X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_world.qc;h=bf6fddf5cf3db2b75aa7b5be3baa1d05f9d22cb0;hp=b0cd43455a9eee6cfbfb8e10dbd717e97cdc5589;hb=016835f8f51aff29719995f8d080d9c1b19392c4;hpb=8368a96ecebd267d92620f6f049a166e5b692c87;ds=inline diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index b0cd43455a..bf6fddf5cf 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -1735,8 +1735,7 @@ float WinningCondition_Scores(float limit, float leadlimit) limit = -limit; } - if(WinningConditionHelper_zeroisworst - || (!autocvar_leadlimit_and_fraglimit && limit && leadlimit >= fabs(limit))) + if(WinningConditionHelper_zeroisworst) leadlimit = 0; // not supported in this mode if(MUTATOR_CALLHOOK(Scores_CountFragsRemaining)) @@ -1745,39 +1744,36 @@ float WinningCondition_Scores(float limit, float leadlimit) if (leaderscore != WinningConditionHelper_topscore || secondscore != WinningConditionHelper_secondscore) { - int fragsleft = 0; + int fragsleft = 0, leadingfragsleft = 0; leaderscore = WinningConditionHelper_topscore; secondscore = WinningConditionHelper_secondscore; if (limit) + fragsleft = limit - leaderscore; + if (leadlimit) + leadingfragsleft = secondscore + leadlimit - leaderscore; + + if (autocvar_leadlimit_and_fraglimit && leadlimit) { - if (leaderscore == limit - 1) - fragsleft |= BIT(1); - else if (leaderscore == limit - 2) - fragsleft |= BIT(2); - else if (leaderscore == limit - 3) - fragsleft |= BIT(3); + if (limit) + fragsleft = max(leadingfragsleft, fragsleft); } - if (leadlimit) + else 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); + if (limit) + fragsleft = min(fragsleft, leadingfragsleft); + else + fragsleft = leadingfragsleft; } - fragsleft = fragsleft & -fragsleft; // least significant bit where 1 is set - if (fragsleft_last != fragsleft) // do not announce same remaining frags multiple times { - if (fragsleft & BIT(1)) + if (fragsleft == 1) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1); - else if (fragsleft & BIT(2)) + else if (fragsleft == 2) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2); - else if (fragsleft & BIT(3)) + else if (fragsleft == 3) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3); fragsleft_last = fragsleft;