From: Rudolf Polzer Date: Fri, 2 Jul 2010 07:45:51 +0000 (+0200) Subject: cvar leadlimit_and_fraglimit: if set, both leadlimit and fraglimit must be reached... X-Git-Tag: xonotic-v0.1.0preview~501^2~3 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=20c2b78192323fe1f839f8af3a54cc146cb05733 cvar leadlimit_and_fraglimit: if set, both leadlimit and fraglimit must be reached to the end the game (or, of course, timelimit), like in table tennis --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 950a8e1160..fbbc14f9b4 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -547,6 +547,7 @@ set sv_dodging_wall_distance_threshold 10 "the maximum distance from a wall that set sv_dodging_sound 1 "if 1 dodging makes a sound. if 0 dodging is silent" set leadlimit 0 +set leadlimit_and_fraglimit 0 "if set, leadlimit is ANDed with fraglimit (otherwise ORed)" // this means that timelimit can be overidden globally and fraglimit can be overidden for each game mode: DM/TDM, Domination, CTF, and Runematch. seta timelimit_override -1 "Time limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)" diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index f873ea7c6b..90a1e744f9 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -1740,6 +1740,8 @@ void ShuffleMaplist() float leaderfrags; float WinningCondition_Scores(float limit, float leadlimit) { + float limitreached; + // TODO make everything use THIS winning condition (except LMS) WinningConditionHelper(); @@ -1784,13 +1786,22 @@ float WinningCondition_Scores(float limit, float leadlimit) } } + limitreached = FALSE; + if(limit) + if(WinningConditionHelper_topscore >= limit) + limitreached = TRUE; + if(leadlimit) + { + float leadlimitreached; + leadlimitreached = (WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit); + if(cvar("leadlimit_and_fraglimit")) + limitreached = (limitreached && leadlimitreached); + else + limitreached = (limitreached || leadlimitreached); + } + return GetWinningCode( - WinningConditionHelper_topscore && - ( - (limit && (WinningConditionHelper_topscore >= limit)) - || - (leadlimit && (WinningConditionHelper_topscore - WinningConditionHelper_secondscore >= leadlimit)) - ), + WinningConditionHelper_topscore && limitreached, WinningConditionHelper_equality ); }