r4916 - in branches/nexuiz-2.0: . data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Oct 27 07:23:38 EDT 2008
Author: div0
Date: 2008-10-27 07:23:38 -0400 (Mon, 27 Oct 2008)
New Revision: 4916
Modified:
branches/nexuiz-2.0/.patchsets
branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
branches/nexuiz-2.0/data/qcsrc/server/w_common.qc
branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc
branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc
branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
Log:
r4914 | div0 | 2008-10-27 12:18:21 +0100 (Mon, 27 Oct 2008) | 2 lines
fix radiusdamage recursions
r4915 | div0 | 2008-10-27 12:22:55 +0100 (Mon, 27 Oct 2008) | 2 lines
if a remaining RadiusDamage recursion exists, print a stack trace for it and avoid the crash
Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/.patchsets 2008-10-27 11:23:38 UTC (rev 4916)
@@ -1,2 +1,2 @@
master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-4912
+revisions_applied = 1-4915
Modified: branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc 2008-10-27 11:23:38 UTC (rev 4916)
@@ -819,6 +819,7 @@
return nearest;
}
+float RadiusDamage_running;
float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity)
// Returns total damage applies to creatures
{
@@ -832,6 +833,21 @@
vector nearest;
float total_damage_to_creatures;
+ if(RadiusDamage_running)
+ {
+ string save;
+ print("RadiusDamage called recursively!\n");
+ print("Expect stuff to go HORRIBLY wrong.\n");
+ print("Causing a stack trace...\n");
+ save = cvar_string("prvm_backtraceforwarnings");
+ cvar_set("prvm_backtraceforwarnings", "1");
+ fclose(-1); // calls VM_Warning
+ cvar_set("prvm_backtraceforwarnings", save);
+ return 0;
+ }
+
+ RadiusDamage_running = 1;
+
blastorigin = (inflictor.origin + (inflictor.mins + inflictor.maxs) * 0.5);
total_damage_to_creatures = 0;
@@ -893,5 +909,7 @@
targ = targ.chain;
}
+ RadiusDamage_running = 0;
+
return total_damage_to_creatures;
}
Modified: branches/nexuiz-2.0/data/qcsrc/server/w_common.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_common.qc 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_common.qc 2008-10-27 11:23:38 UTC (rev 4916)
@@ -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: branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc 2008-10-27 11:23:38 UTC (rev 4916)
@@ -82,8 +82,7 @@
self.health = self.health - damage;
if (self.health <= 0)
{
- self.owner = attacker;
- self.think ();
+ W_PrepareExplosionByDamage(attacker, self.think);
}
}
Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc 2008-10-27 11:23:38 UTC (rev 4916)
@@ -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: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc 2008-10-27 11:23:38 UTC (rev 4916)
@@ -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: branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc 2008-10-27 11:22:55 UTC (rev 4915)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc 2008-10-27 11:23:38 UTC (rev 4916)
@@ -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