[nexuiz-commits] r8686 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Feb 28 14:42:21 EST 2010
Author: div0
Date: 2010-02-28 14:42:21 -0500 (Sun, 28 Feb 2010)
New Revision: 8686
Modified:
trunk/data/qcsrc/server/t_teleporters.qc
Log:
require only one of the two entities to target the other for warpzones, instead of a cyclic connection
Now, warpzone layout is:
trigger_warpzone --killtarget--> target_position for origin and direction
--target------> trigger_warpzone --kiltarget--> target_position for origin and direction
^
|
+--------X--------+
| _ |
+--------|\-------+
\
\
\ ^
\ |
+------\X--------+
| \ |
+----------------+
Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc 2010-02-28 19:42:17 UTC (rev 8685)
+++ trunk/data/qcsrc/server/t_teleporters.qc 2010-02-28 19:42:21 UTC (rev 8686)
@@ -306,6 +306,12 @@
void warpzone_updatetransform()
{
+ if(!self.enemy || self.enemy.enemy != self)
+ {
+ objerror("Invalid warp zone detected. Killed.");
+ return;
+ }
+
// 1. update this, and the enemy, warp zone
self.warpzone_origin = self.aiment.origin;
self.warpzone_angles = self.aiment.angles;
@@ -405,17 +411,7 @@
}
void warpzone_findtarget (void)
{
- if(self.target == "")
- {
- objerror("Warp zone with no target");
- return;
- }
- self.enemy = find(world, targetname, self.target);
- if(self.enemy == world)
- {
- objerror("Warp zone with nonexisting target");
- return;
- }
+ entity e;
if(self.killtarget == "")
{
@@ -429,6 +425,17 @@
return;
}
+ // this way only one of the two ents needs to target
+ if(self.target != "")
+ {
+ e = find(world, targetname, self.target);
+ if(e)
+ {
+ self.enemy = e;
+ self.enemy.enemy = self;
+ }
+ }
+
// now enable touch
self.touch = warpzone_touch;
}
More information about the nexuiz-commits
mailing list