r4074 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Aug 9 10:08:32 EDT 2008


Author: div0
Date: 2008-08-09 10:08:31 -0400 (Sat, 09 Aug 2008)
New Revision: 4074

Modified:
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/race.qc
   trunk/data/qcsrc/server/race.qh
Log:
correct spawnpoint/checkpoint connection


Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2008-08-09 13:04:25 UTC (rev 4073)
+++ trunk/data/qcsrc/server/cl_client.qc	2008-08-09 14:08:31 UTC (rev 4074)
@@ -43,20 +43,34 @@
 	if(spot.team != teamcheck)
 		return -1;
 
+	if(race_spawns)
+		if(spot.target == "")
+			return -1;
+
 	// filter out spots for assault
 	if(spot.target != "") {
 		local entity ent;
 		ent = find(world, targetname, spot.target);
 		if(!ent)
+		{
 			return -1;
+		}
 		while(ent) {
 			if(ent.classname == "target_objective")
+			{
 				if(ent.health < 0 || ent.health >= ASSAULT_VALUE_INACTIVE)
 					return -1;
+			}
 			else if(ent.classname == "trigger_race_checkpoint")
-				if(max(0, self.race_checkpoint) != ent.cnt)
-				// checkpoint -1 players (freshly spawned) spawn close to finish!
+			{
+				if(self.classname == "player") // spectators may spawn everywhere
+				if(ent.cnt != race_PreviousCheckpoint(self.race_checkpoint))
+					// checkpoint -1 players (freshly spawned) spawn close to finish!
 					return -1;
+			}
+			else
+			{
+			}
 			ent = find(ent, targetname, spot.target);
 		}
 	}

Modified: trunk/data/qcsrc/server/race.qc
===================================================================
--- trunk/data/qcsrc/server/race.qc	2008-08-09 13:04:25 UTC (rev 4073)
+++ trunk/data/qcsrc/server/race.qc	2008-08-09 14:08:31 UTC (rev 4074)
@@ -8,6 +8,24 @@
 
 float race_highest_checkpoint;
 
+float race_NextCheckpoint(float f)
+{
+	if(f >= race_highest_checkpoint)
+		return 0;
+	else
+		return f + 1;
+}
+
+float race_PreviousCheckpoint(float f)
+{
+	if(f == -1)
+		return 0;
+	else if(f == 0)
+		return race_highest_checkpoint;
+	else
+		return f - 1;
+}
+
 void race_SendNextCheckpoint(entity e)
 {
 	float recordtime;
@@ -149,10 +167,7 @@
 
 	if(other.race_checkpoint == -1 || other.race_checkpoint == self.cnt)
 	{
-		if(self.cnt == race_highest_checkpoint)
-			other.race_checkpoint = 0;
-		else
-			other.race_checkpoint = self.cnt + 1;
+		other.race_checkpoint = race_NextCheckpoint(self.cnt);
 
 		race_SendTime(other, self.cnt, time - other.race_laptime, !!other.race_laptime);
 
@@ -161,14 +176,10 @@
 
 		race_SendNextCheckpoint(other);
 	}
-	else if(other.race_checkpoint == self.cnt + 1)
+	else if(other.race_checkpoint == race_NextCheckpoint(self.cnt))
 	{
 		// ignored
 	}
-	else if(other.race_checkpoint == 0 && self.cnt == race_highest_checkpoint)
-	{
-		// ignored
-	}
 	else
 	{
 		if(self.spawnflags & 4)
@@ -243,5 +254,6 @@
 		remove(self);
 		return;
 	}
+	++race_spawns;
 	spawnfunc_info_player_deathmatch();
 }

Modified: trunk/data/qcsrc/server/race.qh
===================================================================
--- trunk/data/qcsrc/server/race.qh	2008-08-09 13:04:25 UTC (rev 4073)
+++ trunk/data/qcsrc/server/race.qh	2008-08-09 14:08:31 UTC (rev 4074)
@@ -1,2 +1,5 @@
 void race_PreparePlayer();
 float race_teams;
+float race_spawns;
+float race_PreviousCheckpoint(float f);
+float race_NextCheckpoint(float f);




More information about the nexuiz-commits mailing list