[nexuiz-commits] r8685 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Feb 28 14:42:17 EST 2010


Author: div0
Date: 2010-02-28 14:42:17 -0500 (Sun, 28 Feb 2010)
New Revision: 8685

Modified:
   trunk/data/qcsrc/server/t_teleporters.qc
Log:
fix in-solid players after warpzoning

Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc	2010-02-28 19:42:05 UTC (rev 8684)
+++ trunk/data/qcsrc/server/t_teleporters.qc	2010-02-28 19:42:17 UTC (rev 8685)
@@ -346,8 +346,17 @@
 	tracebox(o1 - player.view_ofs, player.mins, player.maxs, o1 - player.view_ofs, MOVE_NOMONSTERS, player);
 	if(trace_startsolid)
 	{
-		print("in solid\n");
-		return 0; // TODO nudge out of solid here!
+		setorigin(player, o1 - player.view_ofs);
+		if(move_out_of_solid(player))
+		{
+			setorigin(player, o0);
+			o1 = player.origin + player.view_ofs;
+		}
+		else
+		{
+			setorigin(player, o0 - player.view_ofs);
+			return 0; // cannot fix
+		}
 	}
 
 	if((o1 - self.enemy.warpzone_origin) * self.enemy.warpzone_forward <= 0) // wrong side of the portal post-teleport
@@ -380,20 +389,19 @@
 	e = self.enemy;
 	if(warpzone_teleport(other))
 	{
+		if(self.aiment.target)
+		{
+			oldself = self;
+			activator = other;
+			self = self.aiment;
+			SUB_UseTargets();
+			self = oldself;
+		}
 	}
 	else
 	{
 		dprint("WARPZONE FAIL AHAHAHAHAH))\n");
 	}
-
-	if(self.aiment.target)
-	{
-		oldself = self;
-		activator = other;
-		self = self.aiment;
-		SUB_UseTargets();
-		self = oldself;
-	}
 }
 void warpzone_findtarget (void)
 {



More information about the nexuiz-commits mailing list