From 663a849afeeb005134560a47362bd59ca1c292aa Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 12 Mar 2020 21:02:34 +0100 Subject: [PATCH] Makes the autotransfer subsystem a bit more optional. --- code/controllers/configuration/entries/general.dm | 6 ++++-- code/controllers/subsystem/autotransfer.dm | 15 ++++++++++++--- code/datums/elements/ghost_role_eligibility.dm | 7 ++++--- code/modules/mob/dead/observer/observer.dm | 14 ++++++++------ config/config.txt | 3 ++- 5 files changed, 30 insertions(+), 15 deletions(-) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 5d18337a9f..76bee768f4 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -82,7 +82,9 @@ config_entry_value = 600 min_val = 0 -/datum/config_entry/number/vote_autotransfer_initial //length of time before the first autotransfer vote is called (deciseconds, default 2 hours) +/// Length of time before the first autotransfer vote is called (deciseconds, default 2 hours) +/// Set to 0 to disable the subsystem altogether. +/datum/config_entry/number/vote_autotransfer_initial config_entry_value = 72000 min_val = 0 @@ -90,7 +92,7 @@ config_entry_value = 18000 min_val = 0 -/datum/config_entry/number/vote_autotransfer_maximum // maximum extensions until the round autoends +/datum/config_entry/number/vote_autotransfer_maximum // maximum extensions until the round autoends, set to 0 to disable. config_entry_value = 4 min_val = 0 diff --git a/code/controllers/subsystem/autotransfer.dm b/code/controllers/subsystem/autotransfer.dm index 2f4eac6197..ce44b25fcc 100644 --- a/code/controllers/subsystem/autotransfer.dm +++ b/code/controllers/subsystem/autotransfer.dm @@ -7,18 +7,27 @@ SUBSYSTEM_DEF(autotransfer) var/targettime var/voteinterval var/maxvotes - var/curvotes + var/curvotes = 0 /datum/controller/subsystem/autotransfer/Initialize(timeofday) + var/init_vote = CONFIG_GET(number/vote_autotransfer_initial) + if(init_vote == 0) //Autotransfer voting disabled. + can_fire = FALSE + return ..() starttime = world.time - targettime = starttime + CONFIG_GET(number/vote_autotransfer_initial) + targettime = starttime + init_vote voteinterval = CONFIG_GET(number/vote_autotransfer_interval) maxvotes = CONFIG_GET(number/vote_autotransfer_maximum) curvotes = 0 return ..() +/datum/controller/subsystem/autotransfer/Recover() + starttime = SSautotransfer.starttime + voteinterval = SSautotransfer.voteinterval + curvotes = SSautotransfer.curvotes + /datum/controller/subsystem/autotransfer/fire() - if(maxvotes > curvotes) + if(!maxvotes || maxvotes > curvotes) if(world.time > targettime) SSvote.initiate_vote("transfer","server") targettime = targettime + voteinterval diff --git a/code/datums/elements/ghost_role_eligibility.dm b/code/datums/elements/ghost_role_eligibility.dm index ab87d7f1d2..bdfc6f8f1d 100644 --- a/code/datums/elements/ghost_role_eligibility.dm +++ b/code/datums/elements/ghost_role_eligibility.dm @@ -17,9 +17,10 @@ penalty += roundstart_quit_limit - world.time if(penalty) penalty += world.realtime - var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes - if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) - penalty = CANT_REENTER_ROUND + if(SSautotransfer.can_fire && SSautotransfer.max_votes) + var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes + if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) + penalty = CANT_REENTER_ROUND if(!(M.ckey in timeouts)) timeouts += M.ckey timeouts[M.ckey] = 0 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 87c8598541..ac0f7f9f08 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -292,9 +292,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES if(world.time < roundstart_quit_limit) penalty += roundstart_quit_limit - world.time - var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes - if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) - penalty = CANT_REENTER_ROUND + if(SSautotransfer.can_fire && SSautotransfer.max_votes) + var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes + if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) + penalty = CANT_REENTER_ROUND if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE, (stat == DEAD)? penalty : 0, (stat == DEAD)? TRUE : FALSE) & COMPONENT_BLOCK_GHOSTING) return @@ -327,9 +328,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES if(world.time < roundstart_quit_limit) penalty += roundstart_quit_limit - world.time - var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes - if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) - penalty = CANT_REENTER_ROUND + if(SSautotransfer.can_fire && SSautotransfer.max_votes) + var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes + if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) + penalty = CANT_REENTER_ROUND var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst alive you won't be able to re-enter this round [penalty ? "or play ghost roles [penalty == CANT_REENTER_ROUND ? "until the round is over" : "for the next [DisplayTimeText(penalty)]"]" : ""]! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body") if(response != "Ghost") diff --git a/config/config.txt b/config/config.txt index 1d987070dd..7ec5354128 100644 --- a/config/config.txt +++ b/config/config.txt @@ -185,12 +185,13 @@ VOTE_DELAY 6000 VOTE_PERIOD 600 ## autovote initial delay (deciseconds) before first automatic transfer vote call (default 120 minutes) +## Set to 0 to disable the subsystem altogether. VOTE_AUTOTRANSFER_INITIAL 72000 ## autovote delay (deciseconds) before sequential automatic transfer votes are called (default 30 minutes) VOTE_AUTOTRANSFER_INTERVAL 18000 -## autovote maximum votes until automatic transfer call (default 4) +## autovote maximum votes until automatic transfer call, set to 0 to disable. (default 4) VOTE_AUTOTRANSFER_MAXIMUM 4 ## prevents dead players from voting or starting votes