From f29d702b85c4a0ea3ba6c1c1c09c2d8060dc7c8f Mon Sep 17 00:00:00 2001 From: Karolis Date: Thu, 21 Jun 2018 23:02:27 +0300 Subject: [PATCH] Made BYOND to automaticly retry setup if mode fails to start (#4892) As title says. Also tries up to 12 times, what should be more than enough. --- code/controllers/subsystems/ticker.dm | 32 ++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 858b814c2b6..fe734a64ac3 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -1,5 +1,9 @@ #define LOBBY_TIME 180 +#define SETUP_OK 0 +#define SETUP_REVOTE 1 +#define SETUP_REATTEMPT 2 + var/datum/controller/subsystem/ticker/SSticker /datum/controller/subsystem/ticker @@ -137,11 +141,14 @@ var/datum/controller/subsystem/ticker/SSticker if (pregame_timeleft <= 0 || current_state == GAME_STATE_SETTING_UP) current_state = GAME_STATE_SETTING_UP wait = 2 SECONDS - if (!setup()) - // Something fucked up. - wait = 1 SECOND - is_revote = TRUE - pregame() + switch (setup()) + if (SETUP_REVOTE) + wait = 1 SECOND + is_revote = TRUE + pregame() + if (SETUP_REATTEMPT) + pregame_timeleft = 1 SECOND + to_world("Reattempting gamemode selection.") /datum/controller/subsystem/ticker/proc/game_tick() if(current_state != GAME_STATE_PLAYING) @@ -354,7 +361,7 @@ var/datum/controller/subsystem/ticker/SSticker if(!runnable_modes.len) current_state = GAME_STATE_PREGAME world << "Unable to choose playable game mode. Reverting to pre-game lobby." - return 0 + return SETUP_REVOTE if(secret_force_mode != ROUNDTYPE_STR_SECRET && secret_force_mode != ROUNDTYPE_STR_MIXED_SECRET) src.mode = config.pick_mode(secret_force_mode) if(!src.mode) @@ -379,7 +386,7 @@ var/datum/controller/subsystem/ticker/SSticker if(!src.mode) current_state = GAME_STATE_PREGAME world << "Serious error in mode setup! Reverting to pre-game lobby." - return 0 + return SETUP_REVOTE SSjobs.ResetOccupations() src.mode.create_antagonists() @@ -398,7 +405,10 @@ var/datum/controller/subsystem/ticker/SSticker mode.fail_setup() mode = null SSjobs.ResetOccupations() - return 0 + if(master_mode in list(ROUNDTYPE_STR_RANDOM, ROUNDTYPE_STR_SECRET, ROUNDTYPE_STR_MIXED_SECRET)) + return SETUP_REATTEMPT + else + return SETUP_REVOTE var/starttime = REALTIMEOFDAY @@ -444,7 +454,7 @@ var/datum/controller/subsystem/ticker/SSticker log_debug("SSticker: Round-start setup took [(REALTIMEOFDAY - starttime)/10] seconds.") - return 1 + return SETUP_OK /datum/controller/subsystem/ticker/proc/run_callback_list(list/callbacklist) set waitfor = FALSE @@ -514,7 +524,6 @@ var/datum/controller/subsystem/ticker/SSticker world << sound('sound/effects/explosionfar.ogg') //flick("end",cinematic) - if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation sleep(50) world << sound('sound/effects/explosionfar.ogg') @@ -602,4 +611,7 @@ var/datum/controller/subsystem/ticker/SSticker LAZYADD(roundstart_callbacks, callback) +#undef SETUP_OK +#undef SETUP_REVOTE +#undef SETUP_REATTEMPT #undef LOBBY_TIME