]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/command/vote.qc
Merge branch 'master' into terencehill/ca_arena_mutators
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / command / vote.qc
index 45e15c95f62dd3441189ed9e85cf78c2e9bf42c8..ad0fb795a1f20667cf91e668656b22f922a5a270 100644 (file)
@@ -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;