From: Mircea Kitsune Date: Sat, 2 Apr 2011 21:10:23 +0000 (+0300) Subject: Do as said in the last commit, and update the effect instead of waiting for old ones... X-Git-Tag: xonotic-v0.6.0~110^2^2~165 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ba9399c48c02004138b26bcc110a4b736038e4b9;p=xonotic%2Fxonotic-data.pk3dir.git Do as said in the last commit, and update the effect instead of waiting for old ones to finish. eg: If you are shot with the Laser while still bleeding after having been shot by the Shotgun, the damage effect will update to the red laser smoke and replace the blood, rather than being ignored cuz we were still bleeding from the Shotgun. --- diff --git a/qcsrc/server/g_violence.qc b/qcsrc/server/g_violence.qc index b88dab1c2..a3026d871 100644 --- a/qcsrc/server/g_violence.qc +++ b/qcsrc/server/g_violence.qc @@ -62,16 +62,15 @@ void Violence_DamageEffect(entity pl, float type) Net_LinkEntity(e, FALSE, 0.2, Violence_DamageEffect_SendEntity); } -.entity player_damageeffect_repeater; -.float player_damageeffect_active; +.entity damageeffect_repeater; .float lifetime; void Violence_DamageEffect_DoRepeat() { if(time > self.lifetime) { - self.owner.player_damageeffect_active = FALSE; self.nextthink = 0; + self = world; remove(self); return; } @@ -82,21 +81,20 @@ void Violence_DamageEffect_DoRepeat() void Violence_DamageEffect_SetRepeat(entity pl, float damage, float type) { - if(sv_gentle) + // return if gentle mode is enabled or the damage was not caused by a weapon + if(sv_gentle || !type) return; - if(!type) - return; // return if the damage was not caused by a weapon - if(pl.player_damageeffect_active) - return; // return if we already have a damage effect active, else too many damage effects get spammed - - pl.player_damageeffect_repeater = spawn(); - pl.player_damageeffect_repeater.classname = "weapondamage_repeater"; - pl.player_damageeffect_repeater.owner = pl; - pl.player_damageeffect_repeater.origin = pl.origin; - pl.player_damageeffect_repeater.cnt = type; - pl.player_damageeffect_repeater.lifetime = time + (autocvar_sv_damageeffect_lifetime * damage); - pl.player_damageeffect_repeater.think = Violence_DamageEffect_DoRepeat; - pl.player_damageeffect_repeater.nextthink = time; - - pl.player_damageeffect_active = TRUE; + + // if a repeater doesn't exist, spawn one, else update the existing one + if(pl.damageeffect_repeater == world) + { + pl.damageeffect_repeater = spawn(); + pl.damageeffect_repeater.classname = "damageeffect_repeater"; + pl.damageeffect_repeater.owner = pl; + pl.damageeffect_repeater.think = Violence_DamageEffect_DoRepeat; + } + + pl.damageeffect_repeater.cnt = type; + pl.damageeffect_repeater.lifetime = time + (autocvar_sv_damageeffect_lifetime * damage); + pl.damageeffect_repeater.nextthink = time; }