Files
Polaris/code/controllers/subsystems/persistence.dm
Neerti fdabe51ee8 Linter Introduction + Cleanup (#8085)
* Adds linter defines to repo.

* Uncomments linter defines already in the code.

* Resolves unreachable code linter errors.

* Nukes decade+ old syndie specops code except for computer since that's mapped in?????

* Resolves procs has no parent linter error.

* Proc signature fixes

* Bad comments

* "In" danger

* Type safety

* Implied nested list abuse

* Top level ..() usage

* Sleepy coder typos

* Invalid kwargs calls

* Pointless returns

* Linter hacks (see full message)

Byond doesn't care and it has no effect but linter doesn't like var/proc
for holding references to procs, despite that it's valid byond code.

Also, the linter seems to have serious issues figuring out relative
proc names. This commit is a sort of take-it-or-leave-it thing. It's not
required, it just cuts down on warnings, but this code is valid DM code.

* WHATEVER THIS IS

* Trick dreamchecker linter into ignoring this file's sins in it's weird use of vars

* Fix list decoration syntax - Its a list, not list of lists

- To declare that a var is a list you can `var/list/blah = list()` syntax or the `var/blah[0]` syntax.  Both do exactly the same thing. But if you do `var/list/blah[0]` that is just like doing `var/list/list/blah = list()`

* Hopefully stops the ai holder subtype folder from going quantum and sometimes changes capitalization over time, and incidentally causing 20+ linter errors.

* Fixes unwrapped negated object in list linter error.

* Resolves colon-like list accessing linter error.

* Turns linter on in linter config.

* Fixes closet indentation properly and cleans up suit storage unit switch.

Co-authored-by: Aronai Sieyes <arokha@arokha.com>
Co-authored-by: Leshana <Leshana@users.noreply.github.com>
2021-05-25 18:17:26 -09:00

65 lines
1.8 KiB
Plaintext

SUBSYSTEM_DEF(persistence)
name = "Persistence"
init_order = INIT_ORDER_PERSISTENCE
flags = SS_NO_FIRE
var/list/tracking_values = list()
var/list/persistence_datums = list()
/datum/controller/subsystem/persistence/Initialize()
. = ..()
for(var/thing in subtypesof(/datum/persistent))
var/datum/persistent/P = thing
if(initial(P.name))
P = new P
persistence_datums[thing] = P
P.Initialize()
/datum/controller/subsystem/persistence/Shutdown()
for(var/thing in persistence_datums)
var/datum/persistent/P = persistence_datums[thing]
P.Shutdown()
/datum/controller/subsystem/persistence/proc/track_value(var/atom/value, var/track_type)
if(config.persistence_disabled) //if the config is set to persistence disabled, nothing will save or load.
return
var/turf/T = get_turf(value)
if(!T)
return
var/area/A = get_area(T)
if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT))
return
// if((!T.z in GLOB.using_map.station_levels) || !initialized)
if(!(T.z in using_map.station_levels))
return
if(!(T.z in using_map.persist_levels))
return
if(!tracking_values[track_type])
tracking_values[track_type] = list()
tracking_values[track_type] += value
/datum/controller/subsystem/persistence/proc/forget_value(var/atom/value, var/track_type)
if(tracking_values[track_type])
tracking_values[track_type] -= value
/datum/controller/subsystem/persistence/proc/show_info(var/mob/user)
if(!user.client.holder)
return
var/list/dat = list("<table width = '100%'>")
var/can_modify = check_rights(R_ADMIN, 0, user)
for(var/thing in persistence_datums)
var/datum/persistent/P = persistence_datums[thing]
if(P.has_admin_data)
dat += P.GetAdminSummary(user, can_modify)
dat += "</table>"
var/datum/browser/popup = new(user, "admin_persistence", "Persistence Data")
popup.set_content(jointext(dat, null))
popup.open()