]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix many issues with how the effect is handles. Including copying it to dead bodies...
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Sun, 3 Apr 2011 21:02:30 +0000 (00:02 +0300)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Sun, 3 Apr 2011 21:02:30 +0000 (00:02 +0300)
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/g_violence.qc

index a1047ea9d07595dae83fcb3fd49953b5b24062c7..de3f0a9490d32b95a873aae535ed956eb12ce341 100644 (file)
@@ -1980,6 +1980,7 @@ void respawn(void)
        }
 
        CopyBody(1);
+       Violence_DamageEffect_Remove(self);
        self.effects |= EF_NODRAW; // prevent another CopyBody
        if(self.oldcolormap)
        {
index 035114b25f23a9e62b34885927e9269c6330e003..58924ed77651a91ee27987dc768ede7b2437e04d 100644 (file)
@@ -146,6 +146,8 @@ void CopyBody(float keepvelocity)
 
        Drag_MoveDrag(oldself, self);
 
+       Violence_DamageEffect_Copy(oldself, self);
+
        self = oldself;
 }
 
index 0eab388dc36c00b05a7d5b3eda4f5fcba161624e..315334a8fccf2c5aa68f50e460560edfe61fe351 100644 (file)
@@ -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;
        }