r4914 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Oct 27 07:18:21 EDT 2008


Author: div0
Date: 2008-10-27 07:18:21 -0400 (Mon, 27 Oct 2008)
New Revision: 4914

Modified:
   trunk/data/qcsrc/server/w_common.qc
   trunk/data/qcsrc/server/w_grenadelauncher.qc
   trunk/data/qcsrc/server/w_hagar.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
   trunk/data/qcsrc/server/w_seeker.qc
Log:
fix radiusdamage recursions


Modified: trunk/data/qcsrc/server/w_common.qc
===================================================================
--- trunk/data/qcsrc/server/w_common.qc	2008-10-27 11:08:20 UTC (rev 4913)
+++ trunk/data/qcsrc/server/w_common.qc	2008-10-27 11:18:21 UTC (rev 4914)
@@ -152,3 +152,15 @@
 		Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force);
 	}
 }
+
+void W_PrepareExplosionByDamage(entity attacker, void() explode)
+{
+	self.takedamage = DAMAGE_NO;
+	self.event_damage = SUB_Null;
+	self.owner = attacker;
+
+	// do not explode NOW but in the NEXT FRAME!
+	// because recursive calls to RadiusDamage are not allowed
+	self.nextthink = time;
+	self.think = explode;
+}

Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc	2008-10-27 11:08:20 UTC (rev 4913)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc	2008-10-27 11:18:21 UTC (rev 4914)
@@ -82,8 +82,7 @@
 	self.health = self.health - damage;
 	if (self.health <= 0)
 	{
-		self.owner = attacker;
-		self.think ();
+		W_PrepareExplosionByDamage(attacker, self.think);
 	}
 }
 

Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc	2008-10-27 11:08:20 UTC (rev 4913)
+++ trunk/data/qcsrc/server/w_hagar.qc	2008-10-27 11:18:21 UTC (rev 4914)
@@ -74,7 +74,7 @@
 {
 	self.health = self.health - damage;
 	if (self.health <= 0)
-		self.think ();
+		W_PrepareExplosionByDamage(attacker, self.think);
 }
 
 void W_Hagar_Attack (void)

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2008-10-27 11:08:20 UTC (rev 4913)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2008-10-27 11:18:21 UTC (rev 4914)
@@ -196,10 +196,7 @@
 	self.health = self.health - damage;
 	self.angles = vectoangles(self.velocity);
 	if (self.health <= 0)
-	{
-		self.owner = attacker;
-		W_Rocket_Explode();
-	}
+		W_PrepareExplosionByDamage(attacker, W_Rocket_Explode);
 }
 
 void W_Rocket_Attack (void)

Modified: trunk/data/qcsrc/server/w_seeker.qc
===================================================================
--- trunk/data/qcsrc/server/w_seeker.qc	2008-10-27 11:08:20 UTC (rev 4913)
+++ trunk/data/qcsrc/server/w_seeker.qc	2008-10-27 11:18:21 UTC (rev 4914)
@@ -129,7 +129,6 @@
 
 void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
-
     float d;
     d = damage;
 
@@ -139,7 +138,7 @@
     self.health = self.health - d;
 
     if (self.health <= 0)
-        Seeker_Missile_Explode();
+		W_PrepareExplosionByDamage(attacker, Seeker_Missile_Explode);
 }
 
 #define EF_ROCKET				16777216




More information about the nexuiz-commits mailing list