From c2e22fd9f893801621cacb6155dc8dc2ad5821f3 Mon Sep 17 00:00:00 2001 From: terencehill Date: Tue, 18 Dec 2018 15:26:20 +0100 Subject: [PATCH] Properly implement checks to end the game right when a player dies (old hacky method overrode rule that bots that disconnect can't end the game); it fixes #2173 "LMS game ends immediately with bots (using minplayers)" --- qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc b/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc index 338fb89dc..58582d290 100644 --- a/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc +++ b/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc @@ -37,7 +37,7 @@ int WinningCondition_LMS() { entity first_player = NULL; int totalplayers = 0; - FOREACH_CLIENT(IS_PLAYER(it), { + FOREACH_CLIENT(IS_PLAYER(it) && it.frags != FRAGS_LMS_LOSER, { if (!totalplayers) first_player = it; ++totalplayers; @@ -185,7 +185,9 @@ void lms_RemovePlayer(entity player) if (!player_rank) { int pl_cnt = 0; - FOREACH_CLIENT(IS_PLAYER(it), { pl_cnt++; }); + FOREACH_CLIENT(IS_PLAYER(it) && it.frags != FRAGS_LMS_LOSER, { + pl_cnt++; + }); if (player.lms_spectate_warning < 2) { if(IS_BOT_CLIENT(player)) @@ -220,8 +222,6 @@ void lms_RemovePlayer(entity player) player.frags = FRAGS_LMS_LOSER; TRANSMUTE(Observer, player); } - if (pl_cnt == 2 && !warmup_stage) // a player is forfeiting leaving only one player - lms_lowest_lives = 0; // end the game now! } if (CS(player).killcount != FRAGS_SPECTATOR && player.lms_spectate_warning < 3) @@ -305,7 +305,9 @@ MUTATOR_HOOKFUNCTION(lms, GiveFragsForKill) if(tl <= 0) { int pl_cnt = 0; - FOREACH_CLIENT(IS_PLAYER(it), { pl_cnt++; }); + FOREACH_CLIENT(IS_PLAYER(it) && it.frags != FRAGS_LMS_LOSER, { + pl_cnt++; + }); if(IS_BOT_CLIENT(frag_target)) bot_clear(frag_target); frag_target.frags = FRAGS_LMS_LOSER; -- 2.39.2