]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/arena.qc
Merge remote branch 'origin/terencehill/powerups_respawntime_fix'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / arena.qc
index f66ddb2cef7f4a791a646d8fd489224f1d5cde57..ef81fd92bad7db138edb2fa1e1067d252bae875b 100644 (file)
@@ -47,7 +47,7 @@ void reset_map(float dorespawn)
        race_ReadyRestart();
 
        for(self = world; (self = nextent(self)); )
-       if(clienttype(self) == CLIENTTYPE_NOTACLIENT && self.items != IT_STRENGTH && self.items != IT_INVINCIBLE) // don't respawn strength or shield, that will only lead to them spawning very early each match
+       if(clienttype(self) == CLIENTTYPE_NOTACLIENT)
        {
                if(self.reset)
                {
@@ -197,9 +197,15 @@ void Arena_Warmup()
 
        if(gameover)
        {
+               if(warmup && time < warmup)
+               {
+                       FOR_EACH_REALCLIENT(e)
+                               Send_CSQC_Centerprint_Generic_Expire(e, CPID_ROUND_STARTING);
+                       warmup = 0;
+               }
                if(champion && g_arena)
                {
-                       FOR_EACH_CLIENT(e)
+                       FOR_EACH_REALCLIENT(e)
                                centerprint(e, strcat("The Champion is ", champion.netname));
                        champion = world;
                }
@@ -210,10 +216,10 @@ void Arena_Warmup()
 
        f = ceil(warmup - time);
 
-       allowed_to_spawn = 0;
-
        if(inWarmupStage)
                allowed_to_spawn = 1;
+       else if(!g_ca)
+               allowed_to_spawn = 0;
 
        if(time < warmup && !inWarmupStage)
        {
@@ -221,14 +227,14 @@ void Arena_Warmup()
                        allowed_to_spawn = 1;
                if(champion && g_arena)
                {
-                       FOR_EACH_PLAYER(e)
+                       FOR_EACH_REALCLIENT(e)
                                centerprint(e, strcat("The Champion is ", champion.netname));
                }
 
                if(f != roundStartTime_prev) {
                        roundStartTime_prev = f;
                        if(g_ca && !(red_players && blue_players)) {
-                               FOR_EACH_PLAYER(self)
+                               FOR_EACH_REALCLIENT(self)
                                        Send_CSQC_Centerprint_Generic(self, CPID_ROUND_STARTING, "^1Need at least 1 player in each team to play CA", 2, 0);
                                warmup = time + autocvar_g_ca_warmup;
                        } else {
@@ -241,7 +247,7 @@ void Arena_Warmup()
                                else if(f == 1)
                                        Announce("1");
 
-                               FOR_EACH_PLAYER(e)
+                               FOR_EACH_REALCLIENT(e)
                                        Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "Round will start in %d", 1, f);
                        }
                }
@@ -250,10 +256,7 @@ void Arena_Warmup()
                        FOR_EACH_CLIENT(e)
                        {
                                if(e.spawned && e.classname == "player")
-                                       e.movetype = MOVETYPE_NONE;
-                               e.velocity = '0 0 0';
-                               e.avelocity = '0 0 0';
-                               e.movement = '0 0 0';
+                                       e.player_blocked = 1;
                        }
                }
        }
@@ -267,15 +270,15 @@ void Arena_Warmup()
                                reset_map(TRUE);
                } else {
                        Announce("begin");
-                       FOR_EACH_PLAYER(e)
+                       FOR_EACH_REALCLIENT(e)
                                Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "^1Begin!", 1, 0);
                }
 
                if(g_arena) {
-                       FOR_EACH_PLAYER(e)
+                       FOR_EACH_CLIENT(e)
                        {
-                               if(e.health > 0 && e.movetype == MOVETYPE_NONE)
-                                       e.movetype = MOVETYPE_WALK;
+                               if(e.player_blocked)
+                                       e.player_blocked = 0;
                        }
                }
        }
@@ -379,6 +382,12 @@ void count_alive_players()
  */
 void Spawnqueue_Check()
 {
+       if(warmup == 0 && g_ca && !inWarmupStage)
+       {
+               if(red_players || blue_players)
+                       reset_map(TRUE);
+               return;
+       }
        if(time < warmup + 1 || inWarmupStage || intermission_running)
                return;