From f118ec45277f6b08372057b57096bbb78901fab0 Mon Sep 17 00:00:00 2001 From: packer Date: Tue, 17 Mar 2020 18:47:13 +0100 Subject: [PATCH] Announce remaining frags for leadlimit, too. --- qcsrc/server/g_world.qc | 43 ++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 5ccfc97cc..7aa469818 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -1258,7 +1258,7 @@ void Maplist_Init() break; } } - + if (i == Map_Count) { bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" ); @@ -1705,7 +1705,9 @@ void ShuffleMaplist() cvar_set("g_maplist", shufflewords(autocvar_g_maplist)); } -float leaderfrags; +float leaderscore; +float secondscore; +int fragsleftlast; float WinningCondition_Scores(float limit, float leadlimit) { float limitreached; @@ -1741,18 +1743,45 @@ float WinningCondition_Scores(float limit, float leadlimit) if(MUTATOR_CALLHOOK(Scores_CountFragsRemaining)) // these modes always score in increments of 1, thus this makes sense { - if(leaderfrags != WinningConditionHelper_topscore) + if (leaderscore != WinningConditionHelper_topscore || + secondscore != WinningConditionHelper_secondscore) { - leaderfrags = WinningConditionHelper_topscore; + int fragsleft = 0; + + leaderscore = WinningConditionHelper_topscore; + secondscore = WinningConditionHelper_secondscore; if (limit) { - if (leaderfrags == limit - 1) + if (leaderscore == limit - 1) + fragsleft |= BIT(1); + else if (leaderscore == limit - 2) + fragsleft |= BIT(2); + else if (leaderscore == limit - 3) + fragsleft |= BIT(3); + } + if (leadlimit) + { + if (leaderscore == leadlimit + secondscore - 1) + fragsleft |= BIT(1); + else if (leaderscore == leadlimit + secondscore - 2) + fragsleft |= BIT(2); + else if (leaderscore == leadlimit + secondscore - 3) + fragsleft |= BIT(3); + } + + fragsleft = fragsleft & -fragsleft; // lowest significant bit + + if (fragsleftlast != fragsleft) // do not announce same remaining frags multiple times + { + if (fragsleft & BIT(1)) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1); - else if (leaderfrags == limit - 2) + else if (fragsleft & BIT(2)) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2); - else if (leaderfrags == limit - 3) + else if (fragsleft & BIT(3)) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3); + + fragsleftlast = fragsleft; } } } -- 2.39.2