mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
* SSMetrics * We were a bit too silly * Forgot to commit this * Logs CPU * Removes global data from all ss * And puts it on the metrics ss * Update metrics.dm * Logs profiler data * Adds profile configs * Update code/controllers/subsystem/metrics.dm Co-authored-by: adamsong <adamsong@users.noreply.github.com> * Log request errors * Final fixes * Rebuilds for 1.2.0-yogs1 * Apparnetly you can't split macro calls on multiple lines * Org is called yogstation13 not yogstation --------- Co-authored-by: alexkar598 <> Co-authored-by: adamsong <adamsong@users.noreply.github.com>
84 lines
2.2 KiB
Plaintext
84 lines
2.2 KiB
Plaintext
SUBSYSTEM_DEF(augury)
|
|
name = "Augury"
|
|
flags = SS_NO_INIT
|
|
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
|
|
|
var/list/watchers = list()
|
|
var/list/doombringers = list()
|
|
|
|
var/list/observers_given_action = list()
|
|
|
|
/datum/controller/subsystem/augury/stat_entry(msg)
|
|
msg = "W:[watchers.len]|D:[length(doombringers)]"
|
|
return ..()
|
|
|
|
/datum/controller/subsystem/augury/get_metrics()
|
|
. = ..()
|
|
.["watchers"] = watchers.len
|
|
.["doombringers"] = length(doombringers)
|
|
|
|
/datum/controller/subsystem/augury/proc/register_doom(atom/A, severity)
|
|
doombringers[A] = severity
|
|
RegisterSignal(A, COMSIG_PARENT_QDELETING, PROC_REF(unregister_doom))
|
|
|
|
/datum/controller/subsystem/augury/proc/unregister_doom(atom/A)
|
|
SIGNAL_HANDLER
|
|
UnregisterSignal(A, COMSIG_PARENT_QDELETING)
|
|
doombringers -= A
|
|
|
|
/datum/controller/subsystem/augury/fire()
|
|
var/biggest_doom = null
|
|
var/biggest_threat = null
|
|
|
|
for(var/db in doombringers)
|
|
var/datum/d = db
|
|
if(!d || QDELETED(d))
|
|
doombringers -= d
|
|
continue
|
|
var/threat = doombringers[d]
|
|
if((biggest_threat == null) || (biggest_threat < threat))
|
|
biggest_doom = d
|
|
biggest_threat = threat
|
|
|
|
if(doombringers.len)
|
|
for(var/i in GLOB.player_list)
|
|
if(isobserver(i) && (!(observers_given_action[i])))
|
|
var/datum/action/innate/augury/A = new
|
|
A.Grant(i)
|
|
observers_given_action[i] = TRUE
|
|
else
|
|
for(var/i in observers_given_action)
|
|
if(observers_given_action[i] && isobserver(i))
|
|
var/mob/dead/observer/O = i
|
|
for(var/datum/action/innate/augury/A in O.actions)
|
|
qdel(A)
|
|
observers_given_action -= i
|
|
|
|
for(var/w in watchers)
|
|
if(!w)
|
|
watchers -= w
|
|
continue
|
|
var/mob/dead/observer/O = w
|
|
if(biggest_doom && (!O.orbiting || O.orbiting.parent != biggest_doom))
|
|
O.ManualFollow(biggest_doom)
|
|
|
|
/datum/action/innate/augury
|
|
name = "Auto Follow Debris"
|
|
button_icon = 'icons/obj/meteor.dmi'
|
|
button_icon_state = "flaming"
|
|
|
|
/datum/action/innate/augury/Destroy()
|
|
if(owner)
|
|
SSaugury.watchers -= owner
|
|
return ..()
|
|
|
|
/datum/action/innate/augury/Activate()
|
|
SSaugury.watchers += owner
|
|
to_chat(owner, span_notice("You are now auto-following debris."))
|
|
active = TRUE
|
|
|
|
/datum/action/innate/augury/Deactivate()
|
|
SSaugury.watchers -= owner
|
|
to_chat(owner, span_notice("You are no longer auto-following debris."))
|
|
active = FALSE
|