X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Farena.qc;h=8a4a404307a1a87749fd88613f1418d79b4f5ed5;hb=39bfc6b0e1d9775ccd116c7d803670af5166cce5;hp=0262b89b896fa769f541b4e3620bb8cb1fc9e6df;hpb=d41484d9c5e2aa6c3ebb81356c1c65a4c54a4a2a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/arena.qc b/qcsrc/server/arena.qc index 0262b89b8..8a4a40430 100644 --- a/qcsrc/server/arena.qc +++ b/qcsrc/server/arena.qc @@ -22,7 +22,7 @@ float red_players, blue_players, yellow_players, pink_players; float total_players; /** - * Resets the state of all clients, items, flags, runes, keys, weapons, waypoints, ... of the map. + * Resets the state of all clients, items, flags, keys, weapons, waypoints, ... of the map. * Sets the 'warmup' global variable. */ void reset_map(float dorespawn) @@ -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) { @@ -123,7 +123,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); if(g_arena) if(champion && champion.classname == "player" && player_count > 1) @@ -197,6 +197,11 @@ void Arena_Warmup() if(gameover) { + if(warmup && time < warmup) + { + Kill_Notification(NOTIF_ALL, world, MSG_CENTER_CPID, CPID_ARENA); + warmup = 0; + } if(champion && g_arena) { FOR_EACH_REALCLIENT(e) @@ -228,8 +233,7 @@ void Arena_Warmup() if(f != roundStartTime_prev) { roundStartTime_prev = f; if(g_ca && !(red_players && blue_players)) { - 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); + Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ARENA_NEEDPLAYER); warmup = time + autocvar_g_ca_warmup; } else { if(f == 5) @@ -241,8 +245,7 @@ void Arena_Warmup() else if(f == 1) Announce("1"); - FOR_EACH_REALCLIENT(e) - Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "Round will start in %d", 1, f); + Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ARENA_ROUNDSTART, f); } } @@ -250,10 +253,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 +267,14 @@ void Arena_Warmup() reset_map(TRUE); } else { Announce("begin"); - FOR_EACH_REALCLIENT(e) - Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "^1Begin!", 1, 0); + Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ARENA_BEGIN); } 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; } } } @@ -290,22 +289,22 @@ void count_players() // count amount of players in each team total_players = red_players = blue_players = yellow_players = pink_players = 0; FOR_EACH_PLAYER(self) { - if (self.team == COLOR_TEAM1) + if (self.team == NUM_TEAM_1) { red_players += 1; total_players += 1; } - else if (self.team == COLOR_TEAM2) + else if (self.team == NUM_TEAM_2) { blue_players += 1; total_players += 1; } - else if (self.team == COLOR_TEAM3) + else if (self.team == NUM_TEAM_3) { yellow_players += 1; total_players += 1; } - else if (self.team == COLOR_TEAM4) + else if (self.team == NUM_TEAM_4) { pink_players += 1; total_players += 1; @@ -319,12 +318,12 @@ void count_alive_players() if(g_ca) { FOR_EACH_PLAYER(self) { - if (self.team == COLOR_TEAM1 && self.health >= 1) + if (self.team == NUM_TEAM_1 && self.health >= 1) { redalive += 1; totalalive += 1; } - else if (self.team == COLOR_TEAM2 && self.health >= 1) + else if (self.team == NUM_TEAM_2 && self.health >= 1) { bluealive += 1; totalalive += 1; @@ -339,22 +338,22 @@ void count_alive_players() { // count amount of alive players in each team FOR_EACH_PLAYER(self) { - if (self.team == COLOR_TEAM1 && self.freezetag_frozen == 0 && self.health >= 1) + if (self.team == NUM_TEAM_1 && self.freezetag_frozen == 0 && self.health >= 1) { redalive += 1; totalalive += 1; } - else if (self.team == COLOR_TEAM2 && self.freezetag_frozen == 0 && self.health >= 1) + else if (self.team == NUM_TEAM_2 && self.freezetag_frozen == 0 && self.health >= 1) { bluealive += 1; totalalive += 1; } - else if (self.team == COLOR_TEAM3 && self.freezetag_frozen == 0 && self.health >= 1) + else if (self.team == NUM_TEAM_3 && self.freezetag_frozen == 0 && self.health >= 1) { yellowalive += 1; totalalive += 1; } - else if (self.team == COLOR_TEAM4 && self.freezetag_frozen == 0 && self.health >= 1) + else if (self.team == NUM_TEAM_4 && self.freezetag_frozen == 0 && self.health >= 1) { pinkalive += 1; totalalive += 1; @@ -379,7 +378,7 @@ void count_alive_players() */ void Spawnqueue_Check() { - if(warmup == 0 && g_ca) + if(warmup == 0 && g_ca && !inWarmupStage) { if(red_players || blue_players) reset_map(TRUE); @@ -397,12 +396,12 @@ void Spawnqueue_Check() if(redalive) { play2all("ctf/red_capture.wav"); FOR_EACH_CLIENT(self) centerprint(self, "^1RED ^7team wins the round"); - TeamScore_AddToTeam(COLOR_TEAM1, ST_SCORE, +1); + TeamScore_AddToTeam(NUM_TEAM_1, ST_SCORE, +1); } else if(bluealive) { play2all("ctf/blue_capture.wav"); FOR_EACH_CLIENT(self) centerprint(self, "^4BLUE ^7team wins the round"); - TeamScore_AddToTeam(COLOR_TEAM2, ST_SCORE, +1); + TeamScore_AddToTeam(NUM_TEAM_2, ST_SCORE, +1); } else FOR_EACH_CLIENT(self) centerprint(self, "^7Round tied");