From 5153dba0f26c30e76311988368fc6075aacc7ef2 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 13 Oct 2021 15:11:25 -0300 Subject: [PATCH 1/5] Upload files --- .../configuration/entries/server.dm | 3 +++ code/controllers/subsystem/ticker.dm | 26 +++++++++++++++++-- config/entries/server.txt | 6 +++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/code/controllers/configuration/entries/server.dm b/code/controllers/configuration/entries/server.dm index 1acf8a11ca..ee40df573c 100644 --- a/code/controllers/configuration/entries/server.dm +++ b/code/controllers/configuration/entries/server.dm @@ -88,3 +88,6 @@ /datum/config_entry/number/rounds_until_hard_restart config_entry_value = -1 min_val = 0 + +/datum/config_entry/string/force_gamemode + config_entry_value = null diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index d2a4882f82..b517c5867e 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -71,6 +71,9 @@ SUBSYSTEM_DEF(ticker) var/station_integrity = 100 // stored at roundend for use in some antag goals var/emergency_reason + /// If the gamemode fails to be run too many times, we swap to a preset gamemode, this should give admins time to set their preferred one + var/emergency_swap = 0 + /datum/controller/subsystem/ticker/Initialize(timeofday) load_mode() @@ -179,7 +182,10 @@ SUBSYSTEM_DEF(ticker) timeLeft = 0 if(!modevoted) - send_gamemode_vote() + if(!CONFIG_GET(string/force_gamemode)) + send_gamemode_vote() + else + force_gamemode(CONFIG_GET(string/force_gamemode)) //countdown if(timeLeft < 0) return @@ -227,13 +233,15 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/setup() to_chat(world, "Starting game...") var/init_start = world.timeofday - GLOB.master_mode = "dynamic" + if(emergency_swap >= 10) + force_gamemode("extended") // If everything fails extended does not have hard requirements for starting, could be changed if needed. mode = config.pick_mode(GLOB.master_mode) if(!mode.can_start()) to_chat(world, "Unable to start [mode.name]. Not enough players, [mode.required_players] players and [mode.required_enemies] eligible antagonists needed. Reverting to pre-game lobby.") qdel(mode) mode = null SSjob.ResetOccupations() + emergency_swap++ return 0 CHECK_TICK @@ -252,6 +260,7 @@ SUBSYSTEM_DEF(ticker) QDEL_NULL(mode) to_chat(world, "Error setting up [GLOB.master_mode]. Reverting to pre-game lobby.") SSjob.ResetOccupations() + emergency_swap++ return 0 else message_admins("DEBUG: Bypassing prestart checks...") @@ -305,6 +314,19 @@ SUBSYSTEM_DEF(ticker) return TRUE +/datum/controller/subsystem/ticker/proc/force_gamemode(gamemode) + if(gamemode) + if(!modevoted) + modevoted = TRUE + if(gamemode in config.modes) + GLOB.master_mode = gamemode + SSticker.save_mode(gamemode) + message_admins("The gamemode has been set to [gamemode].") + else + GLOB.master_mode = "extended" + SSticker.save_mode("extended") + message_admins("force_gamemode proc received an invalid gamemode, defaulting to extended.") + /datum/controller/subsystem/ticker/proc/PostSetup() set waitfor = FALSE mode.post_setup() diff --git a/config/entries/server.txt b/config/entries/server.txt index 0ffd5b21a3..e1a5ee9a64 100644 --- a/config/entries/server.txt +++ b/config/entries/server.txt @@ -66,3 +66,9 @@ DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 ## Uncomment to set the number of /world/Reboot()s before the DreamDaemon restarts itself. 0 means restart every round. Requires tgstation server tools. #ROUNDS_UNTIL_HARD_RESTART 10 + +## Force Gamemode ## +## Disallows roundstart gamemode voting if not null or commented +## Just input the gamemode lowercase in there, the thing will take a simple string for it +## Invalid gamemodes will default extended, have fun. +#FORCE_GAMEMODE From f03b83e89b7c52fe6207e768d37125ee8af54e52 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 13 Oct 2021 15:12:52 -0300 Subject: [PATCH 2/5] Update server.txt --- config/entries/server.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/entries/server.txt b/config/entries/server.txt index e1a5ee9a64..2b905810cd 100644 --- a/config/entries/server.txt +++ b/config/entries/server.txt @@ -68,7 +68,7 @@ DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 #ROUNDS_UNTIL_HARD_RESTART 10 ## Force Gamemode ## -## Disallows roundstart gamemode voting if not null or commented +## Disallows roundstart gamemode voting if not null or uncommented ## Just input the gamemode lowercase in there, the thing will take a simple string for it ## Invalid gamemodes will default extended, have fun. #FORCE_GAMEMODE From 4d7e1b32db13f73940aea7a0d3e3538d630d0ffa Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 13 Oct 2021 16:49:44 -0300 Subject: [PATCH 3/5] Update ticker.dm --- code/controllers/subsystem/ticker.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index b517c5867e..ff5539a2b1 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -186,6 +186,8 @@ SUBSYSTEM_DEF(ticker) send_gamemode_vote() else force_gamemode(CONFIG_GET(string/force_gamemode)) + if(GLOB.master_mode == "dynamic" && CONFIG_GET(flag/dynamic_voting)) + send_gamemode_vote() //countdown if(timeLeft < 0) return @@ -640,7 +642,7 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/load_mode() var/mode = trim(file2text("data/mode.txt")) if(mode) - GLOB.master_mode = "dynamic" + GLOB.master_mode = mode else GLOB.master_mode = GLOB.dynamic_forced_extended log_game("Saved mode is '[GLOB.master_mode]'") From 39a744962592175ecd5063fddd1ad8ef23708de1 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 13 Oct 2021 16:57:00 -0300 Subject: [PATCH 4/5] Update ticker.dm --- code/controllers/subsystem/ticker.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index ff5539a2b1..a1e80b3954 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -182,12 +182,11 @@ SUBSYSTEM_DEF(ticker) timeLeft = 0 if(!modevoted) - if(!CONFIG_GET(string/force_gamemode)) + var/forcemode = CONFIG_GET(string/force_gamemode) + if(forcemode) + force_gamemode(forcemode) + if(!forcemode || (GLOB.master_mode == "dynamic" && CONFIG_GET(flag/dynamic_voting)) send_gamemode_vote() - else - force_gamemode(CONFIG_GET(string/force_gamemode)) - if(GLOB.master_mode == "dynamic" && CONFIG_GET(flag/dynamic_voting)) - send_gamemode_vote() //countdown if(timeLeft < 0) return From bdd0cee2eb53814bb4aaef040c7e8cb0154fd59a Mon Sep 17 00:00:00 2001 From: SandPoot <43283559+SandPoot@users.noreply.github.com> Date: Wed, 13 Oct 2021 19:12:23 -0300 Subject: [PATCH 5/5] Update ticker.dm shhhh --- code/controllers/subsystem/ticker.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index a1e80b3954..6f1fe6d8d0 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -185,7 +185,7 @@ SUBSYSTEM_DEF(ticker) var/forcemode = CONFIG_GET(string/force_gamemode) if(forcemode) force_gamemode(forcemode) - if(!forcemode || (GLOB.master_mode == "dynamic" && CONFIG_GET(flag/dynamic_voting)) + if(!forcemode || (GLOB.master_mode == "dynamic" && CONFIG_GET(flag/dynamic_voting))) send_gamemode_vote() //countdown if(timeLeft < 0)