]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/arena.qc
shotgun: play less ricoche sounds, this fixes performance issues for Unknown[NF]
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / arena.qc
index 7c329b89890087d006ab973565dfc963bd9bd843..046743151dbc02fd27dbd706a77d8065418397b6 100644 (file)
@@ -262,6 +262,8 @@ void Arena_Warmup()
 
 float next_round;
 float stopalivecheck;
+float redalive, bluealive;
+.float redalive_stat, bluealive_stat;
 /**
  * This function finds out whether an arena round is over 1 player is left.
  * It determines the last player who's still alive and saves it's entity reference
@@ -271,6 +273,22 @@ float stopalivecheck;
  */
 void Spawnqueue_Check()
 {
+       if(g_ca) // we want to perform this before the return block below...
+       {
+               // this is STUPID to perform again, but has to be done so that we can give instant feedback when a round ends
+               // and so the code won't start searching for a champion using find() before all players are actually REMOVED
+               redalive = 0; bluealive = 0;
+               FOR_EACH_PLAYER(self) {
+                       if (self.team == COLOR_TEAM1 && self.health >= 1) redalive += 1;
+                       else if (self.team == COLOR_TEAM2 && self.health >= 1) bluealive += 1;
+               }
+               // as if the above stuff wasn't stupid enough, let's run it a third time! :D
+               // (so that we can send redalive/bluealive as a stat)
+               FOR_EACH_PLAYER(self) {
+                       self.redalive_stat = redalive;
+                       self.bluealive_stat = bluealive;
+               }
+       }
        if(time < warmup + 1 || inWarmupStage)
                return;
 
@@ -281,13 +299,6 @@ void Spawnqueue_Check()
                        if (self.team == COLOR_TEAM1) redspawned += 1;
                        else if (self.team == COLOR_TEAM2) bluespawned += 1;
                }
-               // this is STUPID to perform again, but has to be done so that we can give instant feedback when a round ends
-               // and so the code won't start searching for a champion using find() before all players are actually REMOVED
-               float redalive, bluealive;
-               FOR_EACH_PLAYER(self) {
-                       if (self.team == COLOR_TEAM1 && self.health >= 1) redalive += 1;
-                       else if (self.team == COLOR_TEAM2 && self.health >= 1) bluealive += 1;
-               }
 
                required_ca_players = max(2, fabs(cvar("bot_vs_human") + 1));
 
@@ -307,7 +318,7 @@ void Spawnqueue_Check()
                                        strunzone(champion_name);
                                champion_name = strzone(champion.netname);
                        }
-                       else if((!redspawned && !bluespawned) || (!redspawned && !bluealive) || (!bluespawned && !redalive) || time - warmup > cvar("g_ca_round_timelimit")) {
+                       else if((!redspawned && !bluespawned) || time - warmup > cvar("g_ca_round_timelimit")) {
                                FOR_EACH_CLIENT(self) centerprint(self, strcat("^7Round tied.", "^7\n"));
                                next_round = time + 5;
                        }