From: Mircea Kitsune Date: Sun, 3 Apr 2011 22:24:57 +0000 (+0300) Subject: Copy an existing damage repeater to another entity by properly re-creating a new... X-Git-Tag: xonotic-v0.6.0~110^2^2~134 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=29c5aee553e1cf717bb1f576973b11b9b0f3fc4e;p=xonotic%2Fxonotic-data.pk3dir.git 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. --- 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 +}