From 67787100e61130d015eb04205eccd04b18b884e4 Mon Sep 17 00:00:00 2001 From: Mircea Kitsune Date: Mon, 4 Apr 2011 00:02:30 +0300 Subject: [PATCH] Fix many issues with how the effect is handles. Including copying it to dead bodies in CopyBody, removing it from players that disconnect or become spectators, and removing previous effects from players that respawn. --- qcsrc/server/cl_client.qc | 1 + qcsrc/server/cl_player.qc | 2 ++ qcsrc/server/g_violence.qc | 29 +++++++++++++++++++++++------ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index a1047ea9d..de3f0a949 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1980,6 +1980,7 @@ void respawn(void) } CopyBody(1); + Violence_DamageEffect_Remove(self); self.effects |= EF_NODRAW; // prevent another CopyBody if(self.oldcolormap) { diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index 035114b25..58924ed77 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -146,6 +146,8 @@ void CopyBody(float keepvelocity) Drag_MoveDrag(oldself, self); + Violence_DamageEffect_Copy(oldself, self); + self = oldself; } diff --git a/qcsrc/server/g_violence.qc b/qcsrc/server/g_violence.qc index 0eab388dc..315334a8f 100644 --- a/qcsrc/server/g_violence.qc +++ b/qcsrc/server/g_violence.qc @@ -40,6 +40,27 @@ void Violence_GibSplash(entity source, float type, float amount, entity attacker Violence_GibSplash_At(source.origin + source.view_ofs, source.velocity, type, amount, source, attacker); } +// damage effect + +.float lifetime; +.entity damageeffect_repeater; + +void Violence_DamageEffect_Remove(entity pl) +{ + remove(pl.damageeffect_repeater); + pl.damageeffect_repeater = world; +} + +void Violence_DamageEffect_Copy(entity old_pl, entity pl) +{ + if(pl.damageeffect_repeater != world) + Violence_DamageEffect_Remove(pl); + + pl.damageeffect_repeater = spawn(); + copyentity(old_pl.damageeffect_repeater, pl.damageeffect_repeater); + pl.damageeffect_repeater.owner = pl; +} + float Violence_DamageEffect_SendEntity(entity to, float sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_DAMAGEEFFECT); @@ -66,16 +87,12 @@ void Violence_DamageEffect(entity pl, float type) Net_LinkEntity(e, FALSE, 0.2, Violence_DamageEffect_SendEntity); } -.entity damageeffect_repeater; -.float lifetime; - void Violence_DamageEffect_DoRepeat() { - if(time > self.lifetime) + if(time > self.lifetime || (self.owner.classname != "player" && self.owner.classname != "body")) { self.nextthink = 0; - remove(self.owner.damageeffect_repeater); - self.owner.damageeffect_repeater = world; + Violence_DamageEffect_Remove(self.owner); return; } -- 2.39.2