From: terencehill Date: Tue, 20 Nov 2012 14:40:08 +0000 (+0100) Subject: Restore correct handling of DEATH_HURTTRIGGER, now its code is moved into freezetag.qc X-Git-Tag: xonotic-v0.7.0~61^2~116 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=dc550ef55f6f2d079741662577a75578bd1097b5;p=xonotic%2Fxonotic-data.pk3dir.git Restore correct handling of DEATH_HURTTRIGGER, now its code is moved into freezetag.qc --- diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 3e560bd24..64329f23e 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -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); diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 29a8e4e0b..976eb8401 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -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 diff --git a/qcsrc/server/mutators/gamemode_freezetag.qc b/qcsrc/server/mutators/gamemode_freezetag.qc index a28814119..edd5c0002 100644 --- a/qcsrc/server/mutators/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/gamemode_freezetag.qc @@ -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) diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 63d91f607..0da9607f2 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -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;