r4674 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Wed Oct 8 12:11:22 EDT 2008
Author: div0
Date: 2008-10-08 12:11:22 -0400 (Wed, 08 Oct 2008)
New Revision: 4674
Modified:
trunk/data/qcsrc/server/builtins.qh
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/t_teleporters.qc
Log:
make objerror safe for all entities again
Modified: trunk/data/qcsrc/server/builtins.qh
===================================================================
--- trunk/data/qcsrc/server/builtins.qh 2008-10-08 16:00:18 UTC (rev 4673)
+++ trunk/data/qcsrc/server/builtins.qh 2008-10-08 16:11:22 UTC (rev 4674)
@@ -9,7 +9,7 @@
//void(entity e, float chan, string samp, float vol, float atten) sound = #8;
vector normalize (vector v) = #9;
void error (string e) = #10;
-void objerror (string e) = #11;
+void objerror_builtin (string e) = #11; // do not call, use objerror wrapper
float vlen (vector v) = #12;
float vectoyaw (vector v) = #13;
entity spawn (void) = #14;
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2008-10-08 16:00:18 UTC (rev 4673)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2008-10-08 16:11:22 UTC (rev 4674)
@@ -1,3 +1,5 @@
+void objerror(string s);
+
void() spawnfunc_info_player_deathmatch; // needed for the other spawnpoints
void() spawnpoint_use;
string ColoredTeamName(float t);
@@ -1218,6 +1220,44 @@
.float initialize_entity_order;
.entity initialize_entity_next;
entity initialize_entity_first;
+
+void make_safe_for_remove(entity e)
+{
+ if(e.initialize_entity)
+ {
+ entity ent, prev;
+ for(ent = initialize_entity_first; ent; )
+ {
+ if((ent == e) || ((ent.classname == "initialize_entity") && (ent.enemy == e)))
+ {
+ print("make_safe_for_remove: getting rid of initializer ", etos(ent), "\n");
+ // skip it in linked list
+ if(prev)
+ {
+ prev.initialize_entity_next = ent.initialize_entity_next;
+ ent = prev.initialize_entity_next;
+ }
+ else
+ {
+ initialize_entity_first = ent.initialize_entity_next;
+ ent = initialize_entity_first;
+ }
+ }
+ else
+ {
+ prev = ent;
+ ent = ent.initialize_entity_next;
+ }
+ }
+ }
+}
+
+void objerror(string s)
+{
+ make_safe_for_remove(self);
+ objerror_builtin(s);
+}
+
void InitializeEntity(entity e, void(void) func, float order)
{
entity prev, cur;
Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc 2008-10-08 16:00:18 UTC (rev 4673)
+++ trunk/data/qcsrc/server/t_teleporters.qc 2008-10-08 16:11:22 UTC (rev 4674)
@@ -161,14 +161,14 @@
{
self.angles = '0 0 0';
+ EXACTTRIGGER_INIT;
+
+ // this must be called to spawn the teleport waypoints for bots
+ InitializeEntity(self, teleport_findtarget, INITPRIO_FINDTARGET);
+
if (!self.target)
{
objerror ("Teleporter with no target");
return;
}
-
- EXACTTRIGGER_INIT;
-
- // this must be called to spawn the teleport waypoints for bots
- InitializeEntity(self, teleport_findtarget, INITPRIO_FINDTARGET);
}
More information about the nexuiz-commits
mailing list