r4474 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Sep 20 11:20:16 EDT 2008
Author: div0
Date: 2008-09-20 11:20:16 -0400 (Sat, 20 Sep 2008)
New Revision: 4474
Modified:
trunk/data/qcsrc/server/cl_player.qc
trunk/data/qcsrc/server/g_world.qc
trunk/data/qcsrc/server/race.qc
trunk/data/qcsrc/server/race.qh
Log:
race:
- enter race from qualifying at timelimit when at least one player is "ready"
- abandon race when DYING, not when RESPAWNING
Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc 2008-09-19 17:38:42 UTC (rev 4473)
+++ trunk/data/qcsrc/server/cl_player.qc 2008-09-20 15:20:16 UTC (rev 4474)
@@ -497,6 +497,7 @@
SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon);
// print an obituary message
Obituary (attacker, self, deathtype);
+ race_PreDie();
DropAllRunes(self);
if(self == attacker)
kh_Key_DropAll(self, TRUE);
Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc 2008-09-19 17:38:42 UTC (rev 4473)
+++ trunk/data/qcsrc/server/g_world.qc 2008-09-20 15:20:16 UTC (rev 4474)
@@ -1443,19 +1443,21 @@
{
float totalplayers;
float playerswithlaps;
+ float readyplayers;
entity head;
- totalplayers = playerswithlaps = 0;
+ totalplayers = playerswithlaps = readyplayers = 0;
FOR_EACH_PLAYER(head)
{
++totalplayers;
if(PlayerScore_Add(head, SP_RACE_FASTEST, 0))
++playerswithlaps;
+ if(head.ready)
+ ++readyplayers;
}
// at least 2/3 of the players have completed a lap: start the RACE
// otherwise, the players should end the qualifying on their own
- if(totalplayers >= 3)
- if(playerswithlaps >= totalplayers * 2 / 3)
+ if(readyplayers || ((totalplayers >= 3) && (playerswithlaps * 3 >= totalplayers * 2)))
{
checkrules_overtimeend = 0;
ReadyRestart();
Modified: trunk/data/qcsrc/server/race.qc
===================================================================
--- trunk/data/qcsrc/server/race.qc 2008-09-19 17:38:42 UTC (rev 4473)
+++ trunk/data/qcsrc/server/race.qc 2008-09-20 15:20:16 UTC (rev 4474)
@@ -78,6 +78,8 @@
void race_SendTime(entity e, float cp, float t, float tvalid)
{
float snew, l;
+ entity p;
+
t = floor(0.5 + 10 * t); // make integer
if(tvalid)
@@ -100,7 +102,12 @@
if(cvar("fraglimit"))
if(l >= cvar("fraglimit"))
+ {
race_completing = 1;
+ FOR_EACH_PLAYER(p)
+ if(p.deadflag != DEAD_NO)
+ race_AbandonRaceCheck(p);
+ }
if(race_completing)
{
@@ -174,7 +181,6 @@
if(g_race_qualifying)
{
- entity p;
FOR_EACH_REALPLAYER(p)
if(p.race_checkpoint == cp)
race_SendNextCheckpoint(p, 0);
@@ -441,6 +447,25 @@
self.sprite.waypointsprite_for_player = race_waypointsprite_for_player;
}
+void race_AbandonRaceCheck(entity p)
+{
+ if(race_completing && !p.race_completed)
+ {
+ p.race_completed = 1;
+ MAKE_INDEPENDENT_PLAYER(p);
+ bprint(p.netname, "^7 has abandoned the race.\n");
+ // TODO support spectators with this (e.g. set a flag for forced sbar)
+ if(clienttype(p) == CLIENTTYPE_REAL)
+ {
+ msg_entity = p;
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_FORCESCOREBOARD);
+ WriteByte(MSG_ONE, 1);
+ // he can still move, but will see the scoreboard now
+ }
+ }
+}
+
void race_PreparePlayer()
{
race_ClearTime(self);
@@ -459,6 +484,11 @@
}
}
+void race_PreDie()
+{
+ race_AbandonRaceCheck(self);
+}
+
void race_PreSpawn()
{
if(!g_race)
@@ -466,21 +496,7 @@
if(self.killcount == -666 || g_race_qualifying)
race_PreparePlayer();
- if(race_completing)
- {
- self.race_completed = 1;
- MAKE_INDEPENDENT_PLAYER(self);
- bprint(self.netname, "^7 has abandoned the race.\n");
- // TODO support spectators with this (e.g. set a flag for forced sbar)
- if(clienttype(self) == CLIENTTYPE_REAL)
- {
- msg_entity = self;
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_FORCESCOREBOARD);
- WriteByte(MSG_ONE, 1);
- // he can still move, but will see the scoreboard now
- }
- }
+ race_AbandonRaceCheck(self);
}
void race_PostSpawn(entity spot)
Modified: trunk/data/qcsrc/server/race.qh
===================================================================
--- trunk/data/qcsrc/server/race.qh 2008-09-19 17:38:42 UTC (rev 4473)
+++ trunk/data/qcsrc/server/race.qh 2008-09-20 15:20:16 UTC (rev 4474)
@@ -2,11 +2,13 @@
void race_PreSpawnObserver();
void race_PreSpawn();
void race_PostSpawn(entity spot);
+void race_PreDie();
void race_ReadyRestart();
float race_teams;
float race_spawns;
float race_PreviousCheckpoint(float f);
float race_NextCheckpoint(float f);
+void race_AbandonRaceCheck(entity p);
float race_highest_place_spawn; // number of places; a place higher gets spawned at 0
float race_lowest_place_spawn; // where to spawn in qualifying
float race_fraglimit;
More information about the nexuiz-commits
mailing list