mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-17 20:47:29 +00:00
## About The Pull Request LSP supports it, let's GOOOOOO I've removed the 515 tests since they're stable, alongside the libcall wrapper. left the rustgcall wrapper cause yaknow memes Just removed all the 515 and 514 particular define wrappers. gaming ## Changelog 🆑 server: Minimum compile version has been bumped to 515. clients still support 514 but we're gonna start using 515 restricted features for serverside now. /🆑 --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
72 lines
2.6 KiB
Plaintext
72 lines
2.6 KiB
Plaintext
// See initialization order in /code/game/world.dm
|
|
GLOBAL_REAL(GLOB, /datum/controller/global_vars)
|
|
|
|
/datum/controller/global_vars
|
|
name = "Global Variables"
|
|
|
|
var/static/list/gvars_datum_protected_varlist
|
|
var/list/gvars_datum_in_built_vars
|
|
var/list/gvars_datum_init_order
|
|
|
|
/datum/controller/global_vars/New()
|
|
if(GLOB)
|
|
CRASH("Multiple instances of global variable controller created")
|
|
GLOB = src
|
|
|
|
var/datum/controller/exclude_these = new
|
|
// I know this is dumb but the nested vars list hangs a ref to the datum. This fixes that
|
|
var/list/controller_vars = exclude_these.vars.Copy()
|
|
controller_vars["vars"] = null
|
|
gvars_datum_in_built_vars = controller_vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order))
|
|
|
|
#if DM_VERSION >= 515 && DM_BUILD > 1620
|
|
#warn datum.vars hanging a ref should now be fixed, there should be no reason to remove the vars list from our controller's vars list anymore
|
|
#endif
|
|
QDEL_IN(exclude_these, 0) //signal logging isn't ready
|
|
|
|
Initialize()
|
|
|
|
/datum/controller/global_vars/Destroy(force)
|
|
// This is done to prevent an exploit where admins can get around protected vars
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
return QDEL_HINT_IWILLGC
|
|
|
|
/datum/controller/global_vars/stat_entry(msg)
|
|
msg = "Edit"
|
|
return msg
|
|
|
|
/datum/controller/global_vars/vv_edit_var(var_name, var_value)
|
|
if(gvars_datum_protected_varlist[var_name])
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/controller/global_vars/vv_get_var(var_name)
|
|
switch(var_name)
|
|
if (NAMEOF(src, vars))
|
|
return debug_variable(var_name, list(), 0, src)
|
|
return debug_variable(var_name, vars[var_name], 0, src, display_flags = VV_ALWAYS_CONTRACT_LIST)
|
|
|
|
/datum/controller/global_vars/Initialize()
|
|
gvars_datum_init_order = list()
|
|
gvars_datum_protected_varlist = list(NAMEOF(src, gvars_datum_protected_varlist) = TRUE)
|
|
var/list/global_procs = typesof(/datum/controller/global_vars/proc)
|
|
var/expected_len = vars.len - gvars_datum_in_built_vars.len
|
|
if(global_procs.len != expected_len)
|
|
warning("Unable to detect all global initialization procs! Expected [expected_len] got [global_procs.len]!")
|
|
if(global_procs.len)
|
|
var/list/expected_global_procs = vars - gvars_datum_in_built_vars
|
|
for(var/I in global_procs)
|
|
expected_global_procs -= replacetext("[I]", "InitGlobal", "")
|
|
log_world("Missing procs: [expected_global_procs.Join(", ")]")
|
|
|
|
for(var/I in global_procs)
|
|
var/start_tick = world.time
|
|
call(src, I)()
|
|
var/end_tick = world.time
|
|
if(end_tick - start_tick)
|
|
warning("Global [replacetext("[I]", "InitGlobal", "")] slept during initialization!")
|
|
|
|
// Someone make it so this call isn't necessary
|
|
make_datum_reference_lists()
|
|
|