X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fvote.qc;h=ad0fb795a1f20667cf91e668656b22f922a5a270;hb=b58d514c07e4b22b86a93977653787902efba1d6;hp=45e15c95f62dd3441189ed9e85cf78c2e9bf42c8;hpb=6ec0f2147065145e9310fc5af6e16243ef805a0f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index 45e15c95f..ad0fb795a 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -319,14 +319,14 @@ void VoteThink() // Game logic for warmup // ======================= -// Resets the state of all clients, items, flags, runes, keys, weapons, waypoints, ... of the map. +// Resets the state of all clients, items, weapons, waypoints, ... of the map. void reset_map(float dorespawn) { entity oldself; oldself = self; if(time <= game_starttime && round_handler_IsActive()) - round_handler_Reset(game_starttime + 1); + round_handler_Reset(game_starttime); if(g_race || g_cts) race_ReadyRestart(); @@ -377,7 +377,7 @@ void reset_map(float dorespawn) if (restart_mapalreadyrestarted || (time < game_starttime)) { //NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players - if (self.classname == "player") { + if (IS_PLAYER(self)) { //PlayerScore_Clear(self); if(g_lms) PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()); @@ -392,7 +392,7 @@ void reset_map(float dorespawn) } if(g_keyhunt) - kh_Controller_SetThink_NoMsg(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), kh_StartRound); + kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round + (game_starttime - time), kh_StartRound); self = oldself; } @@ -423,8 +423,7 @@ void ReadyRestart_force() checkrules_suddendeathend = checkrules_overtimesadded = checkrules_suddendeathwarning = 0; readyrestart_happened = 1; - game_starttime = time; - if(!g_ca && !g_arena) { game_starttime += RESTART_COUNTDOWN; } + game_starttime = time + RESTART_COUNTDOWN; // clear alivetime FOR_EACH_CLIENT(tmp_player) @@ -439,19 +438,19 @@ void ReadyRestart_force() inWarmupStage = 0; // once the game is restarted the game is in match stage // reset the .ready status of all players (also spectators) - FOR_EACH_CLIENTSLOT(tmp_player) { tmp_player.ready = 0; } + FOR_EACH_REALCLIENT(tmp_player) { tmp_player.ready = 0; } readycount = 0; Nagger_ReadyCounted(); // NOTE: this causes a resend of that entity, and will also turn off warmup state on the client // lock teams with lockonrestart - if(autocvar_teamplay_lockonrestart && teamplay) + if(autocvar_teamplay_lockonrestart && teamplay) { lockteams = 1; bprint("^1The teams are now locked.\n"); } //initiate the restart-countdown-announcer entity - if(autocvar_sv_ready_restart_after_countdown && !g_ca && !g_arena) + if(autocvar_sv_ready_restart_after_countdown) { restart_timer = spawn(); restart_timer.think = ReadyRestart_think; @@ -491,10 +490,13 @@ void ReadyCount() float ready_needed_factor, ready_needed_count; float t_ready = 0, t_players = 0; - FOR_EACH_REALPLAYER(tmp_player) + FOR_EACH_REALCLIENT(tmp_player) { - ++t_players; - if(tmp_player.ready) { ++t_ready; } + if(IS_PLAYER(tmp_player) || tmp_player.caplayer == 1) + { + ++t_players; + if(tmp_player.ready) { ++t_ready; } + } } readycount = t_ready;