]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
mutator system: cleanup of hooks
authorRudolf Polzer <rpolzer@nb-04.(none)>
Sat, 20 Mar 2010 19:05:08 +0000 (20:05 +0100)
committerRudolf Polzer <rpolzer@nb-04.(none)>
Sat, 20 Mar 2010 19:05:08 +0000 (20:05 +0100)
qcsrc/server/cl_client.qc
qcsrc/server/cl_physics.qc
qcsrc/server/cl_player.qc
qcsrc/server/clientcommands.qc
qcsrc/server/g_damage.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_keyhunt.qc
qcsrc/server/mutators/mutator_dodging.qc

index 65091dcc7a7de96f7efec0029b4660e49ca20f0a..e747918f693ce24a5e96f421fea196264e7ca923 100644 (file)
@@ -2848,7 +2848,6 @@ void PlayerPostThink (void)
                        ImpulseCommands();
                if (intermission_running)
                        return;         // intermission or finale
-
                GetPressedKeys();
        } else if (self.classname == "observer") {
                //do nothing
index 66dc32fcce2593eb3f570309679bcddc25303d9d..52477cb9a8976093372af11c0119dbd37238c3f7 100644 (file)
@@ -593,8 +593,6 @@ void SV_PlayerPhysics()
        float not_allowed_to_move;
        string c;
 
-       MUTATOR_CALLHOOK(PlayerPhysics);
-
     if(self.PlayerPhysplug)
         if(self.PlayerPhysplug())
             return;
@@ -690,6 +688,8 @@ void SV_PlayerPhysics()
                bot_think();
        }
        
+       MUTATOR_CALLHOOK(PlayerPhysics);
+
        self.items &~= IT_USING_JETPACK;
 
        if(self.classname == "player")
index 1911f4027bbd5578c038eb02f84178780d070211..33cc475cf12a2598ee8ba69165086a99c6d52442 100644 (file)
@@ -633,7 +633,11 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                Obituary (attacker, inflictor, self, deathtype);
                race_PreDie();
                DropAllRunes(self);
-               frag_attacker = attacker; MUTATOR_CALLHOOK(PlayerDies);
+
+               frag_attacker = attacker;
+               frag_inflictor = inflictor;
+               MUTATOR_CALLHOOK(PlayerDies);
+
                if(self.flagcarried)
                {
                        if(attacker.classname != "player" && attacker.classname != "gib")
index d272d694ad912bdf8ae26fec5af8fd5088c9fe1a..ff5794dae989397d202294c1641844ee7b678e57 100644 (file)
@@ -225,7 +225,6 @@ void SV_ParseClientCommand(string s) {
                                DropFlag(self.flagcarried, world, world);
                        if(self.ballcarried)
                                DropBall(self.ballcarried, self.origin, self.velocity);
-                       MUTATOR_CALLHOOK(MakePlayerSpectator);
                        WaypointSprite_PlayerDead();
                        self.classname = "observer";
                        if(g_ca)
index 936b5f67879c1747e3bf75bca6933720ca388d1d..338204c0c3a2cf30ba72cd7fff44b64b0e9d9c2d 100644 (file)
@@ -146,37 +146,44 @@ void GiveFrags (entity attacker, entity targ, float f)
        }
 
        // FIXME fix the mess this is (we have REAL points now!)
-       frag_attacker = attacker;
+       entity oldself;
+       oldself = self;
+       self = attacker;
        frag_target = targ;
        frag_score = f;
        if(MUTATOR_CALLHOOK(GiveFragsForKill))
        {
                f = frag_score;
+               self = oldself;
        }
-       else if(g_runematch)
-       {
-               f = RunematchHandleFrags(attacker, targ, f);
-       }
-       else if(g_lms)
+       else
        {
-               // remove a life
-               float tl;
-               tl = PlayerScore_Add(targ, SP_LMS_LIVES, -1);
-               if(tl < lms_lowest_lives)
-                       lms_lowest_lives = tl;
-               if(tl <= 0)
+               self = oldself;
+               if(g_runematch)
                {
-                       if(!lms_next_place)
-                               lms_next_place = player_count;
-                       PlayerScore_Add(targ, SP_LMS_RANK, lms_next_place); // won't ever spawn again
-                       --lms_next_place;
+                       f = RunematchHandleFrags(attacker, targ, f);
                }
-               f = 0;
-       }
-       else if(g_ctf)
-       {
-               if(g_ctf_ignore_frags)
+               else if(g_lms)
+               {
+                       // remove a life
+                       float tl;
+                       tl = PlayerScore_Add(targ, SP_LMS_LIVES, -1);
+                       if(tl < lms_lowest_lives)
+                               lms_lowest_lives = tl;
+                       if(tl <= 0)
+                       {
+                               if(!lms_next_place)
+                                       lms_next_place = player_count;
+                               PlayerScore_Add(targ, SP_LMS_RANK, lms_next_place); // won't ever spawn again
+                               --lms_next_place;
+                       }
                        f = 0;
+               }
+               else if(g_ctf)
+               {
+                       if(g_ctf_ignore_frags)
+                               f = 0;
+               }
        }
 
        attacker.totalfrags += f;
index 7e00a8d6ca1e554a137306d87a51957e5cab6da2..dda27b8faa2a81d9261770d395393fc49e90d4fe 100644 (file)
@@ -594,11 +594,11 @@ void GetCvars(float f)
 {
        string s;
 
-       get_cvars_f = f;
-       MUTATOR_CALLHOOK(GetCvars);
-
        if (f > 0)
                s = strcat1(argv(f));
+
+       get_cvars_f = f;
+       MUTATOR_CALLHOOK(GetCvars);
        GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
        GetCvars_handleFloat(s, f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
        GetCvars_handleFloat(s, f, cvar_scr_centertime, "scr_centertime");
index 49feb762d24f45e321862e1fcb10a3a8b2a12e26..9ed316ee1574a00bdbfe517894c6c2c259e86be6 100644 (file)
@@ -36,22 +36,77 @@ void Mutator_Remove(float(float) func); // calls error() on fail
 
 
 // register all possible hooks here
+
 MUTATOR_HOOKABLE(MakePlayerObserver);
-MUTATOR_HOOKABLE(MakePlayerSpectator);
+       // called when a player becomes observer, after shared setup
+
 MUTATOR_HOOKABLE(PlayerSpawn);
+       // called when a player spawns as player, after shared setup, before his weapon is chosen (so items may be changed in here)
+
 MUTATOR_HOOKABLE(ClientDisconnect);
-MUTATOR_HOOKABLE(PlayerDies); entity other; entity frag_attacker;
-MUTATOR_HOOKABLE(GiveFragsForKill); entity frag_attacker, frag_target; float frag_score;
+       // called when a player disconnects
+
+MUTATOR_HOOKABLE(PlayerDies);
+       // called when a player dies to e.g. remove stuff he was carrying.
+       // INPUT:
+               entity frag_inflictor;
+               entity frag_attacker;
+
+MUTATOR_HOOKABLE(GiveFragsForKill);
+       // called when someone was fragged by "self", and is expected to change frag_score to adjust scoring for the kill
+       // INPUT:
+               entity frag_target;
+       // INPUT, OUTPUT:
+               float frag_score;
+
 MUTATOR_HOOKABLE(MatchEnd);
-MUTATOR_HOOKABLE(GetTeamCount); float ret_float;
-MUTATOR_HOOKABLE(SpectateCopy); entity other;
+       // called when the match ends
+
+MUTATOR_HOOKABLE(GetTeamCount);
+       // should adjust ret_float to contain the team count
+       // INPUT, OUTPUT:
+               float ret_float;
+
+MUTATOR_HOOKABLE(SpectateCopy);
+       // copies variables for spectating "other" to "self"
+       // INPUT:
+               entity other;
+
 MUTATOR_HOOKABLE(ForbidThrowCurrentWeapon);
+       // returns 1 if throwing the current weapon shall not be allowed
+
 MUTATOR_HOOKABLE(SetStartItems);
-MUTATOR_HOOKABLE(BuildMutatorsString); string ret_string;
-MUTATOR_HOOKABLE(BuildMutatorsPrettyString); string ret_string;
-MUTATOR_HOOKABLE(FilterItem); // return error to request removal, or change self.items or self.weapons
-MUTATOR_HOOKABLE(OnEntityPreSpawn); // return error to prevent entity spawn, or modify the entity
+       // adjusts {warmup_}start_{items,weapons,ammo_{cells,rockets,nails,shells,fuel}}
+
+MUTATOR_HOOKABLE(BuildMutatorsString);
+       // appends ":mutatorname" to ret_string for logging
+       // INPUT, OUTPUT:
+               string ret_string;
+
+MUTATOR_HOOKABLE(BuildMutatorsPrettyString);
+       // appends ", Mutator name" to ret_string for display
+       // INPUT, OUTPUT:
+               string ret_string;
+
+MUTATOR_HOOKABLE(FilterItem);
+       // checks if the current item may be spawned (self.items and self.weapons may be read and written to, as well as the ammo_ fields)
+       // return error to request removal
+
+MUTATOR_HOOKABLE(OnEntityPreSpawn);
+       // return error to prevent entity spawn, or modify the entity
+
 MUTATOR_HOOKABLE(PlayerPreThink);
+       // runs in the event loop for players; is called for ALL player entities, also bots, also the dead, or spectators
+
 MUTATOR_HOOKABLE(GetPressedKeys);
+       // TODO change this into a general PlayerPostThink hook?
+
 MUTATOR_HOOKABLE(PlayerPhysics);
-MUTATOR_HOOKABLE(GetCvars); float get_cvars_f;
+       // called before any player physics, may adjust variables for movement,
+       // is run AFTER bot code and idle checking
+
+MUTATOR_HOOKABLE(GetCvars);
+       // is meant to call GetCvars_handle*(get_cvars_s, get_cvars_f, cvarfield, "cvarname") for cvars this mutator needs from the client
+       // INPUT:
+               float get_cvars_f;
+               string get_cvars_s;
index f2074260b66d0ed5752cc8186d3629d5b770b6de..cdc4a076f6c5ae5014255b8095852eb6333d5c9f 100644 (file)
@@ -1064,10 +1064,9 @@ MUTATOR_HOOKFUNCTION(kh_SpectateCopy)
 MUTATOR_DEFINITION(gamemode_keyhunt)
 {
        MUTATOR_HOOK(MakePlayerObserver, kh_Key_DropAll, CBC_ORDER_ANY);
-       MUTATOR_HOOK(MakePlayerSpectator, kh_Key_DropAll, CBC_ORDER_ANY);
        MUTATOR_HOOK(ClientDisconnect, kh_Key_DropAll, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerDies, kh_PlayerDies, CBC_ORDER_ANY);
-       MUTATOR_HOOK(GiveFragsForKill, kh_GiveFragsForKill, CBC_ORDER_EXCLUSIVE);
+       MUTATOR_HOOK(GiveFragsForKill, kh_GiveFragsForKill, CBC_ORDER_FIRST);
        MUTATOR_HOOK(MatchEnd, kh_finalize, CBC_ORDER_ANY);
        MUTATOR_HOOK(GetTeamCount, kh_GetTeamCount, CBC_ORDER_EXCLUSIVE);
        MUTATOR_HOOK(SpectateCopy, kh_SpectateCopy, CBC_ORDER_ANY);
index 3c5e884e88088a521ac4fce2a0ca0b8883f3c133..b50f7090ea75c1142438dc6d897b33d2142e6ea6 100644 (file)
@@ -37,13 +37,7 @@ void dodging_Initialize() {
 }
 
 MUTATOR_HOOKFUNCTION(dodging_GetCvars) {
-       // print("dodging_GetCvars\n");
-
-       string s;
-       s = strcat1(argv(get_cvars_f));
-
-       GetCvars_handleFloat(s, get_cvars_f, cvar_cl_dodging_timeout, "cl_dodging_timeout");
-
+       GetCvars_handleFloat(get_cvars_s, get_cvars_f, cvar_cl_dodging_timeout, "cl_dodging_timeout");
        return 0;
 }