]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Restore correct handling of DEATH_HURTTRIGGER, now its code is moved into freezetag.qc
authorterencehill <piuntn@gmail.com>
Tue, 20 Nov 2012 14:40:08 +0000 (15:40 +0100)
committerterencehill <piuntn@gmail.com>
Tue, 20 Nov 2012 21:18:55 +0000 (22:18 +0100)
qcsrc/server/cl_player.qc
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_freezetag.qc
qcsrc/server/sv_main.qc

index 3e560bd2452a71020d339d7ed22830a76b212ec8..64329f23eeab2234b5c244479a3c27d53c8adb7d 100644 (file)
@@ -431,7 +431,6 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float
 }
 
 void ClientKill_Now_TeamChange();
-void freezetag_CheckWinner();
 
 void PlayerDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
@@ -689,18 +688,13 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
        if(accuracy_isgooddamage(attacker, self))
         attacker.accuracy.(accuracy_frags[w-1]) += 1;
 
-               if(deathtype == DEATH_HURTTRIGGER && g_freezetag)
-               {
-                       PutClientInServer();
-                       count_alive_players(); // re-count players
-                       freezetag_CheckWinner();
-                       return;
-               }
-
                frag_attacker = attacker;
                frag_inflictor = inflictor;
                frag_target = self;
-               MUTATOR_CALLHOOK(PlayerDies);
+               frag_deathtype = deathtype;
+               if (MUTATOR_CALLHOOK(PlayerDies))
+                       return;
+
                weapon_action(self.weapon, WR_PLAYERDEATH);
 
                RemoveGrapplingHook(self);
index 29a8e4e0b5602d9fa0f645a2b5de7a1e4bb437d0..976eb8401df865c23ee2d4c44a8736eff8817c29 100644 (file)
@@ -53,10 +53,12 @@ MUTATOR_HOOKABLE(ClientDisconnect);
 
 MUTATOR_HOOKABLE(PlayerDies);
        // called when a player dies to e.g. remove stuff he was carrying.
+       // return 1 to skip death animation, gibs and such (e.g. if player must respawn immediately)
        // INPUT:
                entity frag_inflictor;
                entity frag_attacker;
                entity frag_target; // same as self
+               float frag_deathtype;
 
 MUTATOR_HOOKABLE(GiveFragsForKill);
        // called when someone was fragged by "self", and is expected to change frag_score to adjust scoring for the kill
index a288141197edb0d56c46165722795a486195b74b..edd5c0002f0c65109bf941f8336b6878dd7b6e45 100644 (file)
@@ -282,6 +282,19 @@ MUTATOR_HOOKFUNCTION(freezetag_RemovePlayer)
 
 MUTATOR_HOOKFUNCTION(freezetag_PlayerDies)
 {
+
+       if(frag_deathtype == DEATH_HURTTRIGGER)
+       {
+               if(!self.freezetag_frozen)
+               {
+                       freezetag_remove_alive();
+                       freezetag_CheckWinner();
+               }
+               PutClientInServer(); // respawn the player
+               self.health = 1;
+               return 1;
+       }
+
        if(self.freezetag_frozen == 0)
        {
                freezetag_Freeze(frag_attacker);
@@ -307,7 +320,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDies)
 
        freezetag_CheckWinner();
 
-       return 1;
+       return 0;
 }
 
 MUTATOR_HOOKFUNCTION(freezetag_PlayerSpawn)
index 63d91f6070ca3ecee2ecb56527f7a0c6710c9a98..0da9607f2b45c86bfa8495643bab6071833045ea 100644 (file)
@@ -204,7 +204,7 @@ void StartFrame (void)
        skill = autocvar_skill;
 
        count_players();
-       if(g_ca || g_freezetag)
+       if(g_ca)
                count_alive_players();
        Arena_Warmup();
        Spawnqueue_Check();
@@ -215,7 +215,7 @@ void StartFrame (void)
        if(game_delay_last == TRUE)
        if(game_delay == FALSE)
        if(autocvar_sv_eventlog)
-                       GameLogEcho(":startdelay_ended");
+               GameLogEcho(":startdelay_ended");
 
        game_delay_last = game_delay;