From 9caf0a7c9435c9bc83b737920e719daed417f7c6 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 21 Oct 2008 17:45:12 +0000 Subject: [PATCH] experimental g_start_delay cvar to wait for other players to join git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4797 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 2 ++ data/qcsrc/server/clientcommands.qc | 36 ++++++++++++++++++----------- data/qcsrc/server/miscfunctions.qc | 12 ++++++++++ data/qcsrc/server/teamplay.qc | 2 +- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 1ad3ae060..0f253a1a0 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -1163,3 +1163,5 @@ seta cl_teamradar_zoommode 0 // zoom mode: 0 = zoomed by default, 1 = zoomed whe alias cl_teamradar_rotate "toggle cl_teamradar_rotation 0 1 2 3 4" set g_maplist_allow_hidden 1 // allow hidden maps to be, e.g., voted for and in the maplist + +set g_start_delay 0 // delay before the game starts, so everyone can join; recommended to set this to like 15 on a public server diff --git a/data/qcsrc/server/clientcommands.qc b/data/qcsrc/server/clientcommands.qc index 931d91b28..a0e491f38 100644 --- a/data/qcsrc/server/clientcommands.qc +++ b/data/qcsrc/server/clientcommands.qc @@ -221,6 +221,7 @@ entity GetPlayer(string name) } //float ctf_clientcommand(); +float readyrestart_happened; void SV_ParseClientCommand(string s) { local string cmd; local float i, j, tokens; @@ -330,13 +331,16 @@ void SV_ParseClientCommand(string s) { return sprint(self, "^1You cannot reset the game while a timeout is active!\n"); } - if(game_starttime == 0 || cvar("sv_ready_restart_repeatable")) + //if(!restartAnnouncer) { - self.ready = TRUE; - bprint(self.netname, "^2 is ready\n"); - ReadyCount(); - } else { - sprint(self, "^1game has already been restarted\n"); + if(!readyrestart_happened || cvar("sv_ready_restart_repeatable")) + { + self.ready = TRUE; + bprint(self.netname, "^2 is ready\n"); + ReadyCount(); + } else { + sprint(self, "^1game has already been restarted\n"); + } } } } else if(argv(0) == "maplist") { @@ -461,6 +465,7 @@ void ReadyRestart() if(checkrules_overtimeend) checkrules_overtimeend = 0; + readyrestart_happened = 1; game_starttime = time + RESTART_COUNTDOWN; restart_mapalreadyrestarted = 0; //reset this var, needed when cvar sv_ready_restart_repeatable is in use @@ -488,7 +493,7 @@ void ReadyRestart() restartAnnouncer = spawn(); restartAnnouncer.think = restartAnnouncer_Think; restartAnnouncer.nextthink = time; - restartAnnouncer.cnt = RESTART_COUNTDOWN; + restartAnnouncer.spawnflags = !!cvar("sv_ready_restart_after_countdown"); //after a restart every players number of allowed timeouts gets reset, too if(cvar("sv_timeout")) @@ -552,8 +557,12 @@ void ReadyCount() void restartAnnouncer_Think() { local entity plr; local string s; - if(self.cnt <= 0) { //show the "Begin" message and - if (cvar("sv_ready_restart_after_countdown")) { + float f, c; + c = game_starttime - time; + f = floor(0.5 + c); + if(c <= 0) { //show the "Begin" message and + if(self.spawnflags & 1) + { restart_mapalreadyrestarted = 1; reset_map(); } @@ -572,16 +581,15 @@ void restartAnnouncer_Think() { else { FOR_EACH_REALCLIENT(plr) { if(plr.classname == "player") { - s = strcat(NEWLINES, "^1Game starts in ", ftos(self.cnt), " seconds"); + s = strcat(NEWLINES, "^1Game starts in ", ftos(f), " seconds"); centerprint(plr, s); } } - if(self.cnt <= 3) { - play2all(strcat("announcer/robotic/", ftos(self.cnt), ".ogg")); + if(f <= 3) { + play2all(strcat("announcer/robotic/", ftos(f), ".ogg")); } - self.nextthink = time + 1; - self.cnt -= 1; + self.nextthink = game_starttime - (f - 1); } } diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 31723dc62..b996798df 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -911,6 +911,18 @@ void readlevelcvars(void) g_pickup_healthmega = cvar("g_pickup_healthmega"); g_pickup_healthmega_max = cvar("g_pickup_healthmega_max"); + if not(inWarmupStage) + { + game_starttime = cvar("g_start_delay"); + if(game_starttime) + { + restartAnnouncer = spawn(); + restartAnnouncer.think = restartAnnouncer_Think; + restartAnnouncer.nextthink = time + 0.1; + restartAnnouncer.spawnflags = 0; + } + } + readplayerstartcvars(); } diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index 522d3c8ca..44e5bf8db 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -392,7 +392,7 @@ void PrintWelcomeMessage(entity pl) local string specString; specString = NEWLINES; if(time < game_starttime) //also show the countdown when being a spectator - specString = strcat(specString, "\n\n^1Game starts in ", ftos(restartAnnouncer.cnt + 1), " seconds^7"); + specString = strcat(specString, "\n\n^1Game starts in ", ftos(ceil(game_starttime - time)), " seconds^7"); else if (timeoutStatus != 0) specString = strcat(specString, "\n\n", getTimeoutText(1)); else -- 2.39.2