From: Mario Date: Mon, 28 Mar 2016 03:50:29 +0000 (+0000) Subject: Merge branch 'terencehill/race_fix' into 'master' X-Git-Tag: xonotic-v0.8.2~993 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=d9a9475eee28bbb477788fdf3b06bad9242a51a6;hp=d99ac8ee476af3247fff826bf2b433dc250694a5;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'terencehill/race_fix' into 'master' Fix for broken race not starting after the qualifying session Fix race not starting (game ends) when the qualifying session ends (everyone readied up): the cause was timelimit being set to -1. Also fix timelimit_override and g_race_qualifying_timelimit_override not working. See merge request !296 --- diff --git a/gamemodes.cfg b/gamemodes.cfg index a4b33b7e2..3f89d676e 100644 --- a/gamemodes.cfg +++ b/gamemodes.cfg @@ -530,7 +530,7 @@ set g_onslaught_spawn_at_generator_random 0 // ====== set g_race 0 "Race: be faster than your opponents" set g_race_qualifying_timelimit 0 -set g_race_qualifying_timelimit_override -1 +set g_race_qualifying_timelimit_override -1 "qualifying session time limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)" set g_race_teams 0 "when 2, 3, or 4, the race is played as a team game (the team members can add up their laps)" // ========== diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index d4bc83b68..99411e0bb 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -562,6 +562,18 @@ void __init_dedicated_server_shutdown() { MapInfo_Shutdown(); } +void SetLimits(int fraglimit_override, int leadlimit_override, float timelimit_override, float qualifying_override) +{ + if(!autocvar_g_campaign) + { + if(fraglimit_override >= 0) cvar_set("fraglimit", ftos(fraglimit_override)); + if(timelimit_override >= 0) cvar_set("timelimit", ftos(timelimit_override)); + if(leadlimit_override >= 0) cvar_set("leadlimit", ftos(leadlimit_override)); + if(qualifying_override >= 0) cvar_set("g_race_qualifying_timelimit", ftos(qualifying_override)); + } + limits_are_set = true; +} + void Map_MarkAsRecent(string m); float world_already_spawned; void Nagger_Init(); @@ -718,6 +730,9 @@ spawnfunc(worldspawn) readlevelcvars(); GrappleHookInit(); + if(!limits_are_set) + SetLimits(autocvar_fraglimit_override, autocvar_leadlimit_override, autocvar_timelimit_override, -1); + player_count = 0; bot_waypoints_for_items = autocvar_g_waypoints_for_items; if(bot_waypoints_for_items == 1) diff --git a/qcsrc/server/g_world.qh b/qcsrc/server/g_world.qh index cd1cafd36..5366d0a78 100644 --- a/qcsrc/server/g_world.qh +++ b/qcsrc/server/g_world.qh @@ -10,6 +10,9 @@ const int WINNING_YES = 1; // winner found const int WINNING_NEVER = 2; // no winner, enter overtime if time limit is reached const int WINNING_STARTSUDDENDEATHOVERTIME = 3; // no winner, enter suddendeath overtime NOW +bool limits_are_set = false; +void SetLimits(int fraglimit_override, int leadlimit_override, float timelimit_override, float qualifying_override); + float WinningCondition_Scores(float limit, float leadlimit); void SetWinners(.float field, float value); void CheckRules_Player(); diff --git a/qcsrc/server/mutators/mutator/gamemode_race.qc b/qcsrc/server/mutators/mutator/gamemode_race.qc index 3f6a8a856..7b769e29f 100644 --- a/qcsrc/server/mutators/mutator/gamemode_race.qc +++ b/qcsrc/server/mutators/mutator/gamemode_race.qc @@ -424,7 +424,7 @@ MUTATOR_HOOKFUNCTION(rc, CheckRules_World) { if(!g_race_qualifying) { - ret_float = WinningCondition_QualifyingThenRace(checkrules_fraglimit); + ret_float = WinningCondition_Race(checkrules_fraglimit); return true; } else if(g_race_qualifying == 2) @@ -468,9 +468,8 @@ void rc_SetLimits() qualifying_override = autocvar_g_race_qualifying_timelimit_override; fraglimit_override = autocvar_g_race_laps_limit; leadlimit_override = 0; // currently not supported by race - timelimit_override = -1; // use default if we don't set it below + timelimit_override = autocvar_timelimit_override; - // we need to find out the correct value for g_race_qualifying float want_qualifying = ((qualifying_override >= 0) ? qualifying_override : autocvar_g_race_qualifying_timelimit) > 0; if(autocvar_g_campaign) @@ -478,20 +477,20 @@ void rc_SetLimits() g_race_qualifying = 1; independent_players = 1; } - else if(!autocvar_g_campaign && want_qualifying) + else if(want_qualifying) { g_race_qualifying = 2; independent_players = 1; - race_fraglimit = (race_fraglimit >= 0) ? fraglimit_override : autocvar_fraglimit; - race_leadlimit = (race_leadlimit >= 0) ? leadlimit_override : autocvar_leadlimit; - race_timelimit = (race_timelimit >= 0) ? timelimit_override : autocvar_timelimit; + race_fraglimit = (fraglimit_override >= 0) ? fraglimit_override : autocvar_fraglimit; + race_leadlimit = (leadlimit_override >= 0) ? leadlimit_override : autocvar_leadlimit; + race_timelimit = (timelimit_override >= 0) ? timelimit_override : autocvar_timelimit; + qualifying_override = (qualifying_override >= 0) ? qualifying_override : autocvar_g_race_qualifying_timelimit; fraglimit_override = 0; leadlimit_override = 0; - timelimit_override = autocvar_g_race_qualifying_timelimit; + timelimit_override = qualifying_override; } else g_race_qualifying = 0; - SetLimits(fraglimit_override, leadlimit_override, timelimit_override, qualifying_override); } diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 8dd466711..c275faa7c 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -44,23 +44,6 @@ void ActivateTeamplay() cvar_set("teamplay", "2"); // DP needs this for sending proper getstatus replies. } -void SetLimits(int fraglimit_override, int leadlimit_override, float timelimit_override, float qualifying_override) -{ - // enforce the server's universal frag/time limits - // set to -1 to not change value - if(!autocvar_g_campaign) - { - if(fraglimit_override >= 0) - cvar_set("fraglimit", ftos(fraglimit_override)); - if(timelimit_override >= 0) - cvar_set("timelimit", ftos(timelimit_override)); - if(leadlimit_override >= 0) - cvar_set("leadlimit", ftos(leadlimit_override)); - if(qualifying_override >= 0) - cvar_set("g_race_qualifying_timelimit", ftos(qualifying_override)); - } -} - void InitGameplayMode() { VoteReset(); @@ -89,8 +72,6 @@ void InitGameplayMode() MapInfo_ClearTemps(); - // set both here, gamemode can override it later - SetLimits(autocvar_fraglimit_override, autocvar_leadlimit_override, autocvar_timelimit_override, -1); gamemode_name = MapInfo_Type_ToText(MapInfo_LoadedGametype); cache_mutatormsg = strzone(""); diff --git a/qcsrc/server/teamplay.qh b/qcsrc/server/teamplay.qh index 2a3a528fe..df82a9cae 100644 --- a/qcsrc/server/teamplay.qh +++ b/qcsrc/server/teamplay.qh @@ -20,8 +20,6 @@ void default_delayedinit(entity this); void ActivateTeamplay(); -void SetLimits(int fraglimit_override, int leadlimit_override, float timelimit_override, float qualifying_override); - void InitGameplayMode(); string GetClientVersionMessage();