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