From 29c5aee553e1cf717bb1f576973b11b9b0f3fc4e Mon Sep 17 00:00:00 2001 From: Mircea Kitsune Date: Mon, 4 Apr 2011 01:24:57 +0300 Subject: [PATCH] Copy an existing damage repeater to another entity by properly re-creating a new one, rather than using CopyEntity(). That was very buggy, and this seems to be safer, even if sometimes the effect won't show on players that respawn for some reason. --- qcsrc/server/g_violence.qc | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/qcsrc/server/g_violence.qc b/qcsrc/server/g_violence.qc index 6db09c7ed..e5a308316 100644 --- a/qcsrc/server/g_violence.qc +++ b/qcsrc/server/g_violence.qc @@ -51,23 +51,6 @@ void Violence_GibSplash(entity source, float type, float amount, entity attacker .float lifetime; .entity damageeffect_repeater; -void Violence_DamageEffect_Remove(entity pl) -{ - pl.damageeffect_repeater.nextthink = 0; - 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); @@ -89,8 +72,6 @@ void Violence_DamageEffect(entity pl, float type) e.cnt = type; e.state |= 8 * pl.species; // gib type, ranges from 0 to 15 - e.team = num_for_edict(pl); - // if this is a copied dead body, send the num of its player instead if(pl.classname == "body") e.team = num_for_edict(pl.owner); @@ -102,6 +83,7 @@ void Violence_DamageEffect(entity pl, float type) Net_LinkEntity(e, FALSE, 0.2, Violence_DamageEffect_SendEntity); } +void Violence_DamageEffect_Remove(entity pl); void Violence_DamageEffect_DoRepeat() { if(time > self.lifetime || (self.owner.classname != "player" && self.owner.classname != "body")) @@ -141,3 +123,19 @@ void Violence_DamageEffect_SetRepeat(entity pl, float damage, float type) pl.damageeffect_repeater.cnt = type; pl.damageeffect_repeater.nextthink = time; } + +void Violence_DamageEffect_Remove(entity pl) +{ + pl.damageeffect_repeater.nextthink = 0; + 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); + + Violence_DamageEffect_SetRepeat(pl, 0, old_pl.damageeffect_repeater.cnt); // spawn a new repeater + pl.damageeffect_repeater.lifetime = old_pl.damageeffect_repeater.lifetime; // copy the lifetime +} -- 2.39.2