From 56b7e5d022746d851e1b562a2c90f811b1a603c8 Mon Sep 17 00:00:00 2001 From: FruitieX Date: Sat, 23 Oct 2010 18:43:14 +0300 Subject: [PATCH] add a time limit of 3 minutes to a CA round, show instant feedback when the opposing team was eliminated, allow a bigger time frame for two remaining players to kill each other and ending the match in a draw --- defaultXonotic.cfg | 1 + qcsrc/server/arena.qc | 44 +++++++++++++++++++++++++--------------- qcsrc/server/g_damage.qc | 3 --- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 381b26e13..edefdf3c3 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -616,6 +616,7 @@ set g_arena_respawn_waves 0 set g_ca_respawn_delay 0 set g_ca_respawn_waves 0 set g_ca_damage2score_multiplier 0.01 +set g_ca_round_timelimit 180 set g_nexball_respawn_delay 0 set g_nexball_respawn_waves 0 set g_as_respawn_delay 0 diff --git a/qcsrc/server/arena.qc b/qcsrc/server/arena.qc index a11e01d06..7c329b898 100644 --- a/qcsrc/server/arena.qc +++ b/qcsrc/server/arena.qc @@ -126,10 +126,6 @@ void reset_map(float dorespawn) if(champion && champion.classname == "player" && player_count > 1) UpdateFrags(champion, +1); - if(g_ca) - if(champion && champion.classname == "player" && player_count > 1) - TeamScore_AddToTeam(champion.team, ST_SCORE, +1); - self = oldself; } @@ -265,6 +261,7 @@ void Arena_Warmup() } float next_round; +float stopalivecheck; /** * 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 @@ -284,6 +281,13 @@ 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)); @@ -298,30 +302,38 @@ void Spawnqueue_Check() else if(!next_round) { if((redspawned && !bluespawned) || (bluespawned && !redspawned)) { next_round = time + 5; - champion = find(world, classname, "player"); if(champion_name) strunzone(champion_name); champion_name = strzone(champion.netname); - string champion_team; - if(champion.team == COLOR_TEAM1) { - champion_team = "^1Red team"; - play2all("ctf/red_capture.wav"); - } - else if(champion.team == COLOR_TEAM2) { - champion_team = "^4Blue team"; - play2all("ctf/blue_capture.wav"); - } - FOR_EACH_CLIENT(self) centerprint(self, strcat(champion_team, "^7 wins the round.", "^7\n")); } - else if(!redspawned && !bluespawned) { + else if((!redspawned && !bluespawned) || (!redspawned && !bluealive) || (!bluespawned && !redalive) || time - warmup > cvar("g_ca_round_timelimit")) { FOR_EACH_CLIENT(self) centerprint(self, strcat("^7Round tied.", "^7\n")); next_round = time + 5; } + + } + if(!stopalivecheck) + { + if(redalive && !bluealive) + { + play2all("ctf/red_capture.wav"); + FOR_EACH_CLIENT(self) centerprint(self, "^1 RED ^7team wins the round.\n"); + TeamScore_AddToTeam(COLOR_TEAM1, ST_SCORE, +1); + stopalivecheck = TRUE; + } + else if(bluealive && !redalive) + { + play2all("ctf/blue_capture.wav"); + FOR_EACH_CLIENT(self) centerprint(self, "^4 BLUE ^7team wins the round.\n"); + TeamScore_AddToTeam(COLOR_TEAM2, ST_SCORE, +1); + stopalivecheck = TRUE; + } } if((next_round && next_round < time)) { + stopalivecheck = FALSE; next_round = 0; reset_map(TRUE); } diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index e4dc77d21..ab0638387 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -478,9 +478,6 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float if (gameover || targ.killcount == -666) return; - if(g_arena || g_ca) - if(champion && champion.classname == "player" && player_count > 1) - return; local entity oldself; oldself = self; -- 2.39.2