From e82752b8af600bae7299048148eca34fd9cfd057 Mon Sep 17 00:00:00 2001 From: terencehill Date: Sun, 25 Nov 2012 20:01:27 +0100 Subject: [PATCH] Put the block of code that detects a push into the void before MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor), so that attacker is changed from trigger_hurt to the pusher player before PlayerDamage_SplitHealthArmor call. With this change playing with the vampire mutator, if you push someone into the void you also suck all his remaining health. --- qcsrc/server/cl_player.qc | 48 ++++++++++++------------ qcsrc/server/mutators/mutator_vampire.qc | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 6df997541..dcf1ab768 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -496,6 +496,30 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht take = damage; } + if(attacker == self) + { + // don't reset pushltime for self damage as it may be an attempt to + // escape a lava pit or similar + //self.pushltime = 0; + self.istypefrag = 0; + } + else if(attacker.classname == "player") + { + self.pusher = attacker; + self.pushltime = time + autocvar_g_maxpushtime; + self.istypefrag = self.BUTTON_CHAT; + } + else if(time < self.pushltime) + { + attacker = self.pusher; + self.pushltime = max(self.pushltime, time + 0.6); + } + else + { + self.pushltime = 0; + self.istypefrag = 0; + } + frag_inflictor = inflictor; frag_attacker = attacker; frag_target = self; @@ -580,30 +604,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht self.dmg_take = self.dmg_take + take;//max(take - 10, 0); self.dmg_inflictor = inflictor; - if(attacker == self) - { - // don't reset pushltime for self damage as it may be an attempt to - // escape a lava pit or similar - //self.pushltime = 0; - self.istypefrag = 0; - } - else if(attacker.classname == "player") - { - self.pusher = attacker; - self.pushltime = time + autocvar_g_maxpushtime; - self.istypefrag = self.BUTTON_CHAT; - } - else if(time < self.pushltime) - { - attacker = self.pusher; - self.pushltime = max(self.pushltime, time + 0.6); - } - else - { - self.pushltime = 0; - self.istypefrag = 0; - } - if(g_ca && self != attacker && attacker.classname == "player") PlayerScore_Add(attacker, SP_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier); diff --git a/qcsrc/server/mutators/mutator_vampire.qc b/qcsrc/server/mutators/mutator_vampire.qc index 7e253ddf9..40a925b3c 100644 --- a/qcsrc/server/mutators/mutator_vampire.qc +++ b/qcsrc/server/mutators/mutator_vampire.qc @@ -10,7 +10,7 @@ MUTATOR_HOOKFUNCTION(vampire_PlayerDamage) else { // otherwise: each hit gets damage back - frag_attacker.health += damage_take; + frag_attacker.health = frag_attacker.health + bound(0, damage_take, self.health); } return 0; } -- 2.39.2