mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 10:01:40 +00:00
TGU (#257)
* Automatic changelog compile [ci skip] * Update readme.md * Automatic changelog compile [ci skip] * Update fulp_emote_edits.dm * TGU * what * . * oh * Fulp defines Co-authored-by: Changelogs <action@github.com>
This commit is contained in:
@@ -6,36 +6,56 @@
|
||||
#define KEY_MODE_TYPE 1
|
||||
|
||||
/datum/config_entry
|
||||
var/name //read-only, this is determined by the last portion of the derived entry type
|
||||
/// Read-only, this is determined by the last portion of the derived entry type
|
||||
var/name
|
||||
/// The configured value for this entry. This shouldn't be initialized in code, instead set default
|
||||
var/config_entry_value
|
||||
var/default //read-only, just set value directly
|
||||
|
||||
var/resident_file //the file which this was loaded from, if any
|
||||
var/modified = FALSE //set to TRUE if the default has been overridden by a config entry
|
||||
|
||||
var/deprecated_by //the /datum/config_entry type that supercedes this one
|
||||
|
||||
/// Read-only default value for this config entry, used for resetting value to defaults when necessary. This is what config_entry_value is initially set to
|
||||
var/default
|
||||
/// The file which this was loaded from, if any
|
||||
var/resident_file
|
||||
/// Set to TRUE if the default has been overridden by a config entry
|
||||
var/modified = FALSE
|
||||
/// The config name of a configuration type that depricates this, if it exists
|
||||
var/deprecated_by
|
||||
/// The /datum/config_entry type that supercedes this one
|
||||
var/protection = NONE
|
||||
var/abstract_type = /datum/config_entry //do not instantiate if type matches this
|
||||
|
||||
var/vv_VAS = TRUE //Force validate and set on VV. VAS proccall guard will run regardless.
|
||||
|
||||
/// Do not instantiate if type matches this
|
||||
var/abstract_type = /datum/config_entry
|
||||
/// Force validate and set on VV. VAS proccall guard will run regardless.
|
||||
var/vv_VAS = TRUE
|
||||
/// Controls if error is thrown when duplicate configuration values for this entry type are encountered
|
||||
var/dupes_allowed = FALSE
|
||||
/// Stores the original protection configuration, used for set_default()
|
||||
var/default_protection
|
||||
|
||||
/datum/config_entry/New()
|
||||
if(type == abstract_type)
|
||||
CRASH("Abstract config entry [type] instatiated!")
|
||||
name = lowertext(type2top(type))
|
||||
if(islist(config_entry_value))
|
||||
var/list/L = config_entry_value
|
||||
default = L.Copy()
|
||||
else
|
||||
default = config_entry_value
|
||||
default_protection = protection
|
||||
set_default()
|
||||
|
||||
/datum/config_entry/Destroy()
|
||||
config.RemoveEntry(src)
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Returns the value of the configuration datum to its default, used for resetting a config value. Note this also sets the protection back to default.
|
||||
*/
|
||||
/datum/config_entry/proc/set_default()
|
||||
if ((protection & CONFIG_ENTRY_LOCKED) && IsAdminAdvancedProcCall())
|
||||
log_admin_private("[key_name(usr)] attempted to reset locked config entry [type] to its default")
|
||||
return
|
||||
if (islist(default))
|
||||
var/list/L = default
|
||||
config_entry_value = L.Copy()
|
||||
else
|
||||
config_entry_value = default
|
||||
protection = default_protection
|
||||
resident_file = null
|
||||
modified = FALSE
|
||||
|
||||
/datum/config_entry/can_vv_get(var_name)
|
||||
. = ..()
|
||||
if(var_name == NAMEOF(src, config_entry_value) || var_name == NAMEOF(src, default))
|
||||
@@ -58,9 +78,9 @@
|
||||
return ..()
|
||||
|
||||
/datum/config_entry/proc/VASProcCallGuard(str_val)
|
||||
. = !((protection & CONFIG_ENTRY_LOCKED) && IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "ValidateAndSet" && GLOB.LastAdminCalledTargetRef == "[REF(src)]")
|
||||
. = !((protection & CONFIG_ENTRY_LOCKED) && IsAdminAdvancedProcCall())
|
||||
if(!.)
|
||||
log_admin_private("Config set of [type] to [str_val] attempted by [key_name(usr)]")
|
||||
log_admin_private("[key_name(usr)] attempted to set locked config entry [type] to '[str_val]'")
|
||||
|
||||
/datum/config_entry/proc/ValidateAndSet(str_val)
|
||||
VASProcCallGuard(str_val)
|
||||
@@ -73,7 +93,7 @@
|
||||
return
|
||||
|
||||
/datum/config_entry/string
|
||||
config_entry_value = ""
|
||||
default = ""
|
||||
abstract_type = /datum/config_entry/string
|
||||
var/auto_trim = TRUE
|
||||
|
||||
@@ -87,7 +107,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/config_entry/number
|
||||
config_entry_value = 0
|
||||
default = 0
|
||||
abstract_type = /datum/config_entry/number
|
||||
var/integer = TRUE
|
||||
var/max_val = INFINITY
|
||||
@@ -109,7 +129,7 @@
|
||||
return !(var_name in banned_edits) && ..()
|
||||
|
||||
/datum/config_entry/flag
|
||||
config_entry_value = FALSE
|
||||
default = FALSE
|
||||
abstract_type = /datum/config_entry/flag
|
||||
|
||||
/datum/config_entry/flag/ValidateAndSet(str_val)
|
||||
@@ -121,7 +141,7 @@
|
||||
/// List config entry, used for configuring a list of strings
|
||||
/datum/config_entry/str_list
|
||||
abstract_type = /datum/config_entry/str_list
|
||||
config_entry_value = list()
|
||||
default = list()
|
||||
dupes_allowed = TRUE
|
||||
|
||||
/datum/config_entry/str_list/ValidateAndSet(str_val)
|
||||
@@ -134,7 +154,7 @@
|
||||
|
||||
/datum/config_entry/number_list
|
||||
abstract_type = /datum/config_entry/number_list
|
||||
config_entry_value = list()
|
||||
default = list()
|
||||
|
||||
/datum/config_entry/number_list/ValidateAndSet(str_val)
|
||||
if(!VASProcCallGuard(str_val))
|
||||
@@ -154,7 +174,7 @@
|
||||
|
||||
/datum/config_entry/keyed_list
|
||||
abstract_type = /datum/config_entry/keyed_list
|
||||
config_entry_value = list()
|
||||
default = list()
|
||||
dupes_allowed = TRUE
|
||||
vv_VAS = FALSE //VAS will not allow things like deleting from lists, it'll just bug horribly.
|
||||
var/key_mode
|
||||
|
||||
@@ -147,6 +147,16 @@
|
||||
++.
|
||||
continue
|
||||
|
||||
// Reset directive, used for setting a config value back to defaults. Useful for string list config types
|
||||
if (entry == "$reset")
|
||||
var/datum/config_entry/resetee = _entries[lowertext(value)]
|
||||
if (!value || !resetee)
|
||||
log_config("Warning: invalid $reset directive: [value]")
|
||||
continue
|
||||
resetee.set_default()
|
||||
log_config("Reset configured value for [value] to original defaults")
|
||||
continue
|
||||
|
||||
var/datum/config_entry/E = _entries[entry]
|
||||
if(!E)
|
||||
log_config("Unknown setting in configuration: '[entry]'")
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/string/address
|
||||
config_entry_value = "localhost"
|
||||
default = "localhost"
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/number/port
|
||||
config_entry_value = 3306
|
||||
default = 3306
|
||||
min_val = 0
|
||||
max_val = 65535
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/string/feedback_database
|
||||
config_entry_value = "test"
|
||||
default = "test"
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/string/feedback_login
|
||||
config_entry_value = "root"
|
||||
default = "root"
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/string/feedback_password
|
||||
@@ -26,7 +26,7 @@
|
||||
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
|
||||
|
||||
/datum/config_entry/number/query_debug_log_timeout
|
||||
config_entry_value = 70
|
||||
default = 70
|
||||
min_val = 1
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
deprecated_by = /datum/config_entry/number/blocking_query_timeout
|
||||
@@ -35,19 +35,19 @@
|
||||
return value
|
||||
|
||||
/datum/config_entry/number/async_query_timeout
|
||||
config_entry_value = 10
|
||||
default = 10
|
||||
min_val = 0
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/number/blocking_query_timeout
|
||||
config_entry_value = 5
|
||||
default = 5
|
||||
min_val = 0
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/number/bsql_thread_limit
|
||||
config_entry_value = 50
|
||||
default = 50
|
||||
min_val = 1
|
||||
|
||||
/datum/config_entry/number/max_concurrent_queries
|
||||
config_entry_value = 25
|
||||
default = 25
|
||||
min_val = 1
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
return key_name in config.modes
|
||||
|
||||
/datum/config_entry/number/damage_multiplier
|
||||
config_entry_value = 1
|
||||
default = 1
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/minimal_access_threshold //If the number of players is larger than this threshold, minimal access will be turned on.
|
||||
@@ -55,36 +55,36 @@
|
||||
/datum/config_entry/flag/disable_warops
|
||||
|
||||
/datum/config_entry/number/traitor_scaling_coeff //how much does the amount of players get divided by to determine traitors
|
||||
config_entry_value = 6
|
||||
default = 6
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/brother_scaling_coeff //how many players per brother team
|
||||
config_entry_value = 25
|
||||
default = 25
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/changeling_scaling_coeff //how much does the amount of players get divided by to determine changelings
|
||||
config_entry_value = 6
|
||||
default = 6
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ecult_scaling_coeff //how much does the amount of players get divided by to determine e_cult
|
||||
config_entry_value = 6
|
||||
default = 6
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/security_scaling_coeff //how much does the amount of players get divided by to determine open security officer positions
|
||||
config_entry_value = 8
|
||||
default = 8
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/traitor_objectives_amount
|
||||
config_entry_value = 2
|
||||
default = 2
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/brother_objectives_amount
|
||||
config_entry_value = 2
|
||||
default = 2
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/reactionary_explosions //If we use reactionary explosions, explosions that react to walls and doors
|
||||
@@ -98,7 +98,7 @@
|
||||
/datum/config_entry/flag/allow_latejoin_antagonists // If late-joining players can be traitor/changeling
|
||||
|
||||
/datum/config_entry/number/shuttle_refuel_delay
|
||||
config_entry_value = 12000
|
||||
default = 12000
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
/datum/config_entry/flag/no_intercept_report //Whether or not to send a communications intercept report roundstart. This may be overridden by gamemodes.
|
||||
|
||||
/datum/config_entry/number/arrivals_shuttle_dock_window //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station
|
||||
config_entry_value = 55
|
||||
default = 55
|
||||
integer = FALSE
|
||||
min_val = 30
|
||||
|
||||
@@ -130,27 +130,27 @@
|
||||
/datum/config_entry/flag/arrivals_shuttle_require_safe_latejoin //Require the arrivals shuttle to be operational in order for latejoiners to join
|
||||
|
||||
/datum/config_entry/string/alert_green
|
||||
config_entry_value = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
|
||||
default = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
|
||||
|
||||
/datum/config_entry/string/alert_blue_upto
|
||||
config_entry_value = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted."
|
||||
default = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted."
|
||||
|
||||
/datum/config_entry/string/alert_blue_downto
|
||||
config_entry_value = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed."
|
||||
default = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed."
|
||||
|
||||
/datum/config_entry/string/alert_red_upto
|
||||
config_entry_value = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised."
|
||||
default = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised."
|
||||
|
||||
/datum/config_entry/string/alert_red_downto
|
||||
config_entry_value = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised."
|
||||
default = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised."
|
||||
|
||||
/datum/config_entry/string/alert_delta
|
||||
config_entry_value = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
|
||||
default = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill."
|
||||
|
||||
/datum/config_entry/flag/revival_pod_plants
|
||||
|
||||
/datum/config_entry/number/revival_brain_life
|
||||
config_entry_value = -1
|
||||
default = -1
|
||||
integer = FALSE
|
||||
min_val = -1
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
/datum/config_entry/keyed_list/multiplicative_movespeed
|
||||
key_mode = KEY_MODE_TYPE
|
||||
value_mode = VALUE_MODE_NUM
|
||||
config_entry_value = list( //DEFAULTS
|
||||
default = list( //DEFAULTS
|
||||
/mob/living/simple_animal = 1,
|
||||
/mob/living/silicon/pai = 1,
|
||||
/mob/living/carbon/alien/humanoid/hunter = -1,
|
||||
@@ -243,7 +243,7 @@
|
||||
/datum/config_entry/flag/roundstart_away //Will random away mission be loaded.
|
||||
|
||||
/datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled.
|
||||
config_entry_value = 18000
|
||||
default = 18000
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -257,12 +257,12 @@
|
||||
/datum/config_entry/flag/sandbox_autoclose // close the sandbox panel after spawning an item, potentially reducing griff
|
||||
|
||||
/datum/config_entry/number/default_laws //Controls what laws the AI spawns with.
|
||||
config_entry_value = 0
|
||||
default = 0
|
||||
min_val = 0
|
||||
max_val = 3
|
||||
|
||||
/datum/config_entry/number/silicon_max_law_amount
|
||||
config_entry_value = 12
|
||||
default = 12
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/keyed_list/random_laws
|
||||
@@ -275,51 +275,51 @@
|
||||
splitter = ","
|
||||
|
||||
/datum/config_entry/number/max_law_len
|
||||
config_entry_value = 1024
|
||||
default = 1024
|
||||
|
||||
/datum/config_entry/number/overflow_cap
|
||||
config_entry_value = -1
|
||||
default = -1
|
||||
min_val = -1
|
||||
|
||||
/datum/config_entry/string/overflow_job
|
||||
config_entry_value = "Assistant"
|
||||
default = "Assistant"
|
||||
|
||||
/datum/config_entry/flag/starlight
|
||||
/datum/config_entry/flag/grey_assistants
|
||||
|
||||
/datum/config_entry/number/lavaland_budget
|
||||
config_entry_value = 60
|
||||
default = 60
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/icemoon_budget
|
||||
config_entry_value = 90
|
||||
default = 90
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/space_budget
|
||||
config_entry_value = 16
|
||||
default = 16
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
|
||||
|
||||
/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
|
||||
config_entry_value = 1
|
||||
default = 1
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/events_min_players_mul
|
||||
config_entry_value = 1
|
||||
default = 1
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/mice_roundstart
|
||||
config_entry_value = 10
|
||||
default = 10
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/bombcap
|
||||
config_entry_value = 14
|
||||
default = 14
|
||||
min_val = 4
|
||||
|
||||
/datum/config_entry/number/bombcap/ValidateAndSet(str_val)
|
||||
@@ -345,24 +345,24 @@
|
||||
/datum/config_entry/flag/shift_time_realtime
|
||||
|
||||
/datum/config_entry/number/monkeycap
|
||||
config_entry_value = 64
|
||||
default = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ratcap
|
||||
config_entry_value = 64
|
||||
default = 64
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/maxfine
|
||||
config_entry_value = 1000
|
||||
default = 1000
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/dynamic_config_enabled
|
||||
|
||||
/datum/config_entry/string/drone_required_role
|
||||
config_entry_value = "Silicon"
|
||||
default = "Silicon"
|
||||
|
||||
/datum/config_entry/number/drone_role_playtime
|
||||
config_entry_value = 14
|
||||
default = 14
|
||||
min_val = 0
|
||||
integer = FALSE // It is in hours, but just in case one wants to specify minutes.
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/string/autoadmin_rank // the rank for autoadmins
|
||||
config_entry_value = "Game Master"
|
||||
default = "Game Master"
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_players
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/number/auto_deadmin_timegate
|
||||
config_entry_value = null
|
||||
default = null
|
||||
protection = CONFIG_ENTRY_LOCKED
|
||||
|
||||
/datum/config_entry/flag/auto_deadmin_antagonists
|
||||
@@ -32,19 +32,19 @@
|
||||
/datum/config_entry/string/stationname // station name (the name of the station in-game)
|
||||
|
||||
/datum/config_entry/number/lobby_countdown // In between round countdown.
|
||||
config_entry_value = 120
|
||||
default = 120
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/round_end_countdown // Post round murder death kill countdown
|
||||
config_entry_value = 25
|
||||
default = 25
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/flag/hub // if the game appears on the hub or not
|
||||
|
||||
/datum/config_entry/number/max_hub_pop //At what pop to take hub off the server
|
||||
config_entry_value = 0 //0 means disabled
|
||||
default = 0 //0 means disabled
|
||||
integer = TRUE
|
||||
min_val = 0
|
||||
|
||||
@@ -109,12 +109,12 @@
|
||||
/datum/config_entry/flag/allow_vote_map // allow votes to change map
|
||||
|
||||
/datum/config_entry/number/vote_delay // minimum time between voting sessions (deciseconds, 10 minute default)
|
||||
config_entry_value = 6000
|
||||
default = 6000
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/vote_period // length of voting period (deciseconds, default 1 minute)
|
||||
config_entry_value = 600
|
||||
default = 600
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
/datum/config_entry/flag/popup_admin_pm // adminPMs to non-admins show in a pop-up 'reply' window when set
|
||||
|
||||
/datum/config_entry/number/fps
|
||||
config_entry_value = 20
|
||||
default = 20
|
||||
integer = FALSE
|
||||
min_val = 1
|
||||
max_val = 100 //byond will start crapping out at 50, so this is just ridic
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
/datum/config_entry/number/ticklag/New() //ticklag weirdly just mirrors fps
|
||||
var/datum/config_entry/CE = /datum/config_entry/number/fps
|
||||
config_entry_value = 10 / initial(CE.config_entry_value)
|
||||
default = 10 / initial(CE.default)
|
||||
..()
|
||||
|
||||
/datum/config_entry/number/ticklag/ValidateAndSet(str_val)
|
||||
@@ -161,7 +161,7 @@
|
||||
/datum/config_entry/flag/allow_holidays
|
||||
|
||||
/datum/config_entry/number/tick_limit_mc_init //SSinitialization throttling
|
||||
config_entry_value = TICK_LIMIT_MC_INIT_DEFAULT
|
||||
default = TICK_LIMIT_MC_INIT_DEFAULT
|
||||
min_val = 0 //oranges warned us
|
||||
integer = FALSE
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
/datum/config_entry/flag/use_exp_restrictions_heads
|
||||
|
||||
/datum/config_entry/number/use_exp_restrictions_heads_hours
|
||||
config_entry_value = 0
|
||||
default = 0
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
/datum/config_entry/flag/use_low_living_hour_intern
|
||||
|
||||
/datum/config_entry/number/use_low_living_hour_intern_hours
|
||||
config_entry_value = 0
|
||||
default = 0
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -217,19 +217,19 @@
|
||||
/datum/config_entry/string/banappeals
|
||||
|
||||
/datum/config_entry/string/wikiurl
|
||||
config_entry_value = "http://www.tgstation13.org/wiki"
|
||||
default = "http://www.tgstation13.org/wiki"
|
||||
|
||||
/datum/config_entry/string/forumurl
|
||||
config_entry_value = "http://tgstation13.org/phpBB/index.php"
|
||||
default = "http://tgstation13.org/phpBB/index.php"
|
||||
|
||||
/datum/config_entry/string/rulesurl
|
||||
config_entry_value = "http://www.tgstation13.org/wiki/Rules"
|
||||
default = "http://www.tgstation13.org/wiki/Rules"
|
||||
|
||||
/datum/config_entry/string/githuburl
|
||||
config_entry_value = "https://www.github.com/tgstation/tgstation"
|
||||
default = "https://www.github.com/tgstation/tgstation"
|
||||
|
||||
/datum/config_entry/string/discordbotcommandprefix
|
||||
config_entry_value = "?"
|
||||
default = "?"
|
||||
|
||||
/datum/config_entry/string/roundstatsurl
|
||||
|
||||
@@ -238,12 +238,12 @@
|
||||
/datum/config_entry/flag/guest_ban
|
||||
|
||||
/datum/config_entry/number/id_console_jobslot_delay
|
||||
config_entry_value = 30
|
||||
default = 30
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/inactivity_period //time in ds until a player is considered inactive
|
||||
config_entry_value = 3000
|
||||
default = 3000
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
config_entry_value *= 10 //documented as seconds in config.txt
|
||||
|
||||
/datum/config_entry/number/afk_period //time in ds until a player is considered inactive
|
||||
config_entry_value = 3000
|
||||
default = 3000
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
@@ -288,37 +288,37 @@
|
||||
/datum/config_entry/flag/see_own_notes //Can players see their own admin notes
|
||||
|
||||
/datum/config_entry/number/note_fresh_days
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/note_stale_days
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/maprotation
|
||||
|
||||
/datum/config_entry/number/soft_popcap
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/hard_popcap
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/extreme_popcap
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/soft_popcap_message
|
||||
config_entry_value = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
|
||||
default = "Be warned that the server is currently serving a high number of users, consider using alternative game servers."
|
||||
|
||||
/datum/config_entry/string/hard_popcap_message
|
||||
config_entry_value = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
|
||||
default = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers."
|
||||
|
||||
/datum/config_entry/string/extreme_popcap_message
|
||||
config_entry_value = "The server is currently serving a high number of users, find alternative servers."
|
||||
default = "The server is currently serving a high number of users, find alternative servers."
|
||||
|
||||
/datum/config_entry/flag/byond_member_bypass_popcap
|
||||
|
||||
@@ -330,7 +330,7 @@
|
||||
/datum/config_entry/flag/panic_bunker_interview
|
||||
|
||||
/datum/config_entry/string/panic_bunker_message
|
||||
config_entry_value = "Sorry but the server is currently not accepting connections from never before seen players."
|
||||
default = "Sorry but the server is currently not accepting connections from never before seen players."
|
||||
|
||||
/datum/config_entry/number/notify_new_player_age // how long do we notify admins of a new player
|
||||
min_val = -1
|
||||
@@ -348,23 +348,23 @@
|
||||
return str_val != "ch@nge.me" && ..()
|
||||
|
||||
/datum/config_entry/number/ipintel_rating_bad
|
||||
config_entry_value = 1
|
||||
default = 1
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
max_val = 1
|
||||
|
||||
/datum/config_entry/number/ipintel_save_good
|
||||
config_entry_value = 12
|
||||
default = 12
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/ipintel_save_bad
|
||||
config_entry_value = 1
|
||||
default = 1
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/ipintel_domain
|
||||
config_entry_value = "check.getipintel.net"
|
||||
default = "check.getipintel.net"
|
||||
|
||||
/datum/config_entry/flag/aggressive_changelog
|
||||
|
||||
@@ -388,55 +388,55 @@
|
||||
/datum/config_entry/flag/preference_map_voting
|
||||
|
||||
/datum/config_entry/number/client_warn_version
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/string/client_warn_message
|
||||
config_entry_value = "Your version of byond may have issues or be blocked from accessing this server in the future."
|
||||
default = "Your version of byond may have issues or be blocked from accessing this server in the future."
|
||||
|
||||
/datum/config_entry/flag/client_warn_popup
|
||||
|
||||
/datum/config_entry/number/client_error_version
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 500
|
||||
|
||||
/datum/config_entry/string/client_error_message
|
||||
config_entry_value = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
|
||||
default = "Your version of byond is too old, may have issues, and is blocked from accessing this server."
|
||||
|
||||
/datum/config_entry/number/client_error_build
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/minute_topic_limit
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/second_topic_limit
|
||||
config_entry_value = null
|
||||
default = null
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/minute_click_limit
|
||||
config_entry_value = 400
|
||||
default = 400
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/second_click_limit
|
||||
config_entry_value = 15
|
||||
default = 15
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/error_cooldown // The "cooldown" time for each occurrence of a unique error
|
||||
config_entry_value = 600
|
||||
default = 600
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/number/error_limit // How many occurrences before the next will silence them
|
||||
config_entry_value = 50
|
||||
default = 50
|
||||
|
||||
/datum/config_entry/number/error_silence_time // How long a unique error will be silenced for
|
||||
config_entry_value = 6000
|
||||
default = 6000
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/number/error_msg_delay // How long to wait between messaging admins about occurrences of a unique error
|
||||
config_entry_value = 50
|
||||
default = 50
|
||||
integer = FALSE
|
||||
|
||||
/datum/config_entry/flag/irc_announce_new_game
|
||||
@@ -446,26 +446,26 @@
|
||||
return "" //default broadcast
|
||||
|
||||
/datum/config_entry/string/chat_announce_new_game
|
||||
config_entry_value = null
|
||||
default = null
|
||||
|
||||
/datum/config_entry/string/chat_new_game_notifications
|
||||
config_entry_value = null
|
||||
default = null
|
||||
|
||||
/datum/config_entry/flag/debug_admin_hrefs
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/base_mc_tick_rate
|
||||
integer = FALSE
|
||||
config_entry_value = 1
|
||||
default = 1
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/high_pop_mc_tick_rate
|
||||
integer = FALSE
|
||||
config_entry_value = 1.1
|
||||
default = 1.1
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/high_pop_mc_mode_amount
|
||||
config_entry_value = 65
|
||||
default = 65
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate/disable_high_pop_mc_mode_amount
|
||||
config_entry_value = 60
|
||||
default = 60
|
||||
|
||||
/datum/config_entry/number/mc_tick_rate
|
||||
abstract_type = /datum/config_entry/number/mc_tick_rate
|
||||
@@ -483,14 +483,14 @@
|
||||
world.sleep_offline = !config_entry_value
|
||||
|
||||
/datum/config_entry/number/rounds_until_hard_restart
|
||||
config_entry_value = -1
|
||||
default = -1
|
||||
min_val = 0
|
||||
|
||||
/datum/config_entry/string/default_view
|
||||
config_entry_value = "15x15"
|
||||
default = "15x15"
|
||||
|
||||
/datum/config_entry/string/default_view_square
|
||||
config_entry_value = "15x15"
|
||||
default = "15x15"
|
||||
|
||||
/datum/config_entry/flag/log_pictures
|
||||
|
||||
@@ -518,8 +518,8 @@
|
||||
/datum/config_entry/number/hard_deletes_overrun_threshold
|
||||
integer = FALSE
|
||||
min_val = 0
|
||||
config_entry_value = 0.5
|
||||
default = 0.5
|
||||
|
||||
/datum/config_entry/number/hard_deletes_overrun_limit
|
||||
config_entry_value = 0
|
||||
default = 0
|
||||
min_val = 0
|
||||
|
||||
@@ -1,3 +1,34 @@
|
||||
TIMER_SUBSYSTEM_DEF(circuit_component)
|
||||
SUBSYSTEM_DEF(circuit_component)
|
||||
name = "Circuit Components"
|
||||
wait = 0.1 SECONDS
|
||||
priority = FIRE_PRIORITY_DEFAULT
|
||||
|
||||
var/list/callbacks_to_invoke = list()
|
||||
var/list/currentrun = list()
|
||||
|
||||
/datum/controller/subsystem/circuit_component/fire(resumed)
|
||||
if(!resumed)
|
||||
currentrun = callbacks_to_invoke.Copy()
|
||||
callbacks_to_invoke.Cut()
|
||||
|
||||
while(length(currentrun))
|
||||
var/datum/callback/to_call = currentrun[1]
|
||||
currentrun.Cut(1,2)
|
||||
|
||||
if(QDELETED(to_call))
|
||||
continue
|
||||
|
||||
to_call.InvokeAsync()
|
||||
qdel(to_call)
|
||||
|
||||
if(MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
/**
|
||||
* Adds a callback to be invoked when the next fire() is done. Used by the integrated circuit system.
|
||||
*
|
||||
* Prevents race conditions as it acts like a queue system.
|
||||
* Those that registered first will be executed first and those registered last will be executed last.
|
||||
*/
|
||||
/datum/controller/subsystem/circuit_component/proc/add_callback(datum/callback/to_call)
|
||||
callbacks_to_invoke += to_call
|
||||
|
||||
@@ -20,6 +20,12 @@ SUBSYSTEM_DEF(greyscale)
|
||||
var/datum/greyscale_config/config = configurations[greyscale_type]
|
||||
config.Refresh()
|
||||
|
||||
// This final verification step is for things that need other greyscale configurations to be finished loading
|
||||
for(var/greyscale_type as anything in configurations)
|
||||
CHECK_TICK
|
||||
var/datum/greyscale_config/config = configurations[greyscale_type]
|
||||
config.CrossVerify()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/greyscale/proc/RefreshConfigsFromFile()
|
||||
|
||||
@@ -12,13 +12,12 @@ SUBSYSTEM_DEF(statpanels)
|
||||
/datum/controller/subsystem/statpanels/fire(resumed = FALSE)
|
||||
if (!resumed)
|
||||
var/datum/map_config/cached = SSmapping.next_map_config
|
||||
var/round_time = world.time - SSticker.round_start_time
|
||||
var/list/global_data = list(
|
||||
"Map: [SSmapping.config?.map_name || "Loading..."]",
|
||||
cached ? "Next Map: [cached.map_name]" : null,
|
||||
"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
|
||||
"Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]",
|
||||
"Round Time: [round_time > MIDNIGHT_ROLLOVER ? "[round(round_time/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]",
|
||||
"Round Time: [ROUND_TIME]",
|
||||
"Station Time: [station_time_timestamp()]",
|
||||
"Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)"
|
||||
)
|
||||
|
||||
@@ -46,10 +46,10 @@ SUBSYSTEM_DEF(time_track)
|
||||
GLOB.perf_log = "[GLOB.log_directory]/perf-[GLOB.round_id ? GLOB.round_id : "NULL"]-[SSmapping.config?.map_name].csv"
|
||||
world.Profile(PROFILE_RESTART, type = "sendmaps")
|
||||
//Need to do the sendmaps stuff in its own file, since it works different then everything else
|
||||
var/list/sendmaps_shorthands = list()
|
||||
var/list/sendmaps_headers = list()
|
||||
for(var/proper_name in sendmaps_names_map)
|
||||
sendmaps_shorthands += sendmaps_names_map[proper_name]
|
||||
sendmaps_shorthands += "[sendmaps_names_map[proper_name]]_count"
|
||||
sendmaps_headers += sendmaps_names_map[proper_name]
|
||||
sendmaps_headers += "[sendmaps_names_map[proper_name]]_count"
|
||||
log_perf(
|
||||
list(
|
||||
"time",
|
||||
@@ -76,7 +76,7 @@ SUBSYSTEM_DEF(time_track)
|
||||
"all_queries",
|
||||
"queries_active",
|
||||
"queries_standby"
|
||||
) + sendmaps_shorthands
|
||||
) + sendmaps_headers
|
||||
)
|
||||
|
||||
|
||||
@@ -109,7 +109,12 @@ SUBSYSTEM_DEF(time_track)
|
||||
send_maps_sort[packet["name"]] = packet
|
||||
|
||||
var/list/send_maps_values = list()
|
||||
for(var/list/packet in send_maps_sort)
|
||||
for(var/entry_name in sendmaps_names_map)
|
||||
var/list/packet = send_maps_sort[entry_name]
|
||||
if(!packet) //If the entry does not have a value for us, just put in 0 for both
|
||||
send_maps_values += 0
|
||||
send_maps_values += 0
|
||||
continue
|
||||
send_maps_values += packet["value"]
|
||||
send_maps_values += packet["calls"]
|
||||
|
||||
@@ -144,13 +149,3 @@ SUBSYSTEM_DEF(time_track)
|
||||
)
|
||||
|
||||
SSdbcore.reset_tracking()
|
||||
|
||||
/datum/controller/subsystem/time_track/proc/scream_maptick_data()
|
||||
var/current_profile_data = world.Profile(PROFILE_REFRESH, type = "sendmaps", format="json")
|
||||
log_world(current_profile_data)
|
||||
current_profile_data = json_decode(current_profile_data)
|
||||
var/output = ""
|
||||
for(var/list/entry in current_profile_data)
|
||||
output += "[entry["name"]],[entry["value"]],[entry["calls"]]\n"
|
||||
log_world(output)
|
||||
return output
|
||||
|
||||
@@ -632,7 +632,9 @@ SUBSYSTEM_DEF(timer)
|
||||
timer_subsystem = timer_subsystem || SStimer
|
||||
//id is string
|
||||
var/datum/timedevent/timer = timer_subsystem.timer_id_dict[id]
|
||||
return (timer && !timer.spent) ? timer.timeToRun - world.time : null
|
||||
if(!timer || timer.spent)
|
||||
return null
|
||||
return timer.timeToRun - (timer.flags & TIMER_CLIENT_TIME ? REALTIMEOFDAY : world.time)
|
||||
|
||||
#undef BUCKET_LEN
|
||||
#undef BUCKET_POS
|
||||
|
||||
@@ -16,22 +16,21 @@ SUBSYSTEM_DEF(weather)
|
||||
/datum/controller/subsystem/weather/fire()
|
||||
// process active weather
|
||||
for(var/V in processing)
|
||||
var/datum/weather/W = V
|
||||
if(W.aesthetic || W.stage != MAIN_STAGE)
|
||||
var/datum/weather/our_event = V
|
||||
if(our_event.aesthetic || our_event.stage != MAIN_STAGE)
|
||||
continue
|
||||
for(var/i in GLOB.mob_living_list)
|
||||
var/mob/living/L = i
|
||||
if(W.can_weather_act(L))
|
||||
W.weather_act(L)
|
||||
for(var/mob/act_on as anything in GLOB.mob_living_list)
|
||||
if(our_event.can_weather_act(act_on))
|
||||
our_event.weather_act(act_on)
|
||||
|
||||
// start random weather on relevant levels
|
||||
for(var/z in eligible_zlevels)
|
||||
var/possible_weather = eligible_zlevels[z]
|
||||
var/datum/weather/W = pickweight(possible_weather)
|
||||
run_weather(W, list(text2num(z)))
|
||||
var/datum/weather/our_event = pickweight(possible_weather)
|
||||
run_weather(our_event, list(text2num(z)))
|
||||
eligible_zlevels -= z
|
||||
var/randTime = rand(3000, 6000)
|
||||
next_hit_by_zlevel["[z]"] = addtimer(CALLBACK(src, .proc/make_eligible, z, possible_weather), randTime + initial(W.weather_duration_upper), TIMER_UNIQUE|TIMER_STOPPABLE) //Around 5-10 minutes between weathers
|
||||
next_hit_by_zlevel["[z]"] = addtimer(CALLBACK(src, .proc/make_eligible, z, possible_weather), randTime + initial(our_event.weather_duration_upper), TIMER_UNIQUE|TIMER_STOPPABLE) //Around 5-10 minutes between weathers
|
||||
|
||||
/datum/controller/subsystem/weather/Initialize(start_timeofday)
|
||||
for(var/V in subtypesof(/datum/weather))
|
||||
|
||||
Reference in New Issue
Block a user