mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 15:08:02 +01:00
Adds a crew monitor for observers (#24118)
* wheee * ignoring sensors now actually gets all health info * a * this wasn't supposed to go here * delete observer menu on mob del * erm * global on my datum --------- Co-authored-by: github-actions <github-actions@github.com>
This commit is contained in:
Vendored
+7
-6
@@ -7,7 +7,7 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
cache_data = list()
|
||||
..()
|
||||
|
||||
/datum/repository/crew/proc/health_data(z)
|
||||
/datum/repository/crew/proc/health_data(z, ignore_sensors = FALSE)
|
||||
var/list/crewmembers = list()
|
||||
if(!z)
|
||||
return crewmembers
|
||||
@@ -31,7 +31,7 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
for(var/thing in GLOB.human_list)
|
||||
var/mob/living/carbon/human/H = thing
|
||||
var/obj/item/clothing/under/C = H.w_uniform
|
||||
if(!C || C.sensor_mode == SUIT_SENSOR_OFF || !C.has_sensor)
|
||||
if(!ignore_sensors && (!C || C.sensor_mode == SUIT_SENSOR_OFF || !C.has_sensor))
|
||||
continue
|
||||
var/turf/pos = get_turf(C)
|
||||
if(!istype(pos) || pos.z != z)
|
||||
@@ -39,15 +39,16 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]")
|
||||
|
||||
crewmemberData["sensor_type"] = C.sensor_mode
|
||||
crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
|
||||
// ignoring sensors means we also get their true name
|
||||
crewmemberData["name"] = ignore_sensors ? H.name : H.get_authentification_name(if_no_id="Unknown")
|
||||
crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job")
|
||||
crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job")
|
||||
crewmemberData["is_command"] = (crewmemberData["assignment"] in bold_jobs)
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_BINARY)
|
||||
if(C.sensor_mode >= SUIT_SENSOR_BINARY || ignore_sensors)
|
||||
crewmemberData["dead"] = H.stat == DEAD
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_VITAL)
|
||||
if(C.sensor_mode >= SUIT_SENSOR_VITAL || ignore_sensors)
|
||||
crewmemberData["stat"] = H.stat
|
||||
crewmemberData["health"] = H.health
|
||||
crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
|
||||
@@ -55,7 +56,7 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
crewmemberData["fire"] = round(H.getFireLoss(), 1)
|
||||
crewmemberData["brute"] = round(H.getBruteLoss(), 1)
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_TRACKING)
|
||||
if(C.sensor_mode >= SUIT_SENSOR_TRACKING || ignore_sensors)
|
||||
var/area/A = get_area(H)
|
||||
crewmemberData["area"] = sanitize_simple(A.name)
|
||||
crewmemberData["x"] = pos.x
|
||||
|
||||
@@ -5,6 +5,8 @@ GLOBAL_LIST_EMPTY(ghost_images)
|
||||
|
||||
GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
|
||||
GLOBAL_DATUM_INIT(ghost_crew_monitor, /datum/ui_module/crew_monitor/ghost, new)
|
||||
|
||||
/mob/dead/observer
|
||||
name = "ghost"
|
||||
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
|
||||
@@ -477,6 +479,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
|
||||
orbit_menu.ui_interact(src)
|
||||
|
||||
/mob/dead/observer/verb/crew_monitor()
|
||||
set category = "Ghost"
|
||||
set name = "Crew Monitor"
|
||||
set desc = "Use a ghastly crew monitor that lets you follow people you select."
|
||||
|
||||
GLOB.ghost_crew_monitor.ui_interact(src)
|
||||
|
||||
/mob/dead/observer/proc/add_observer_verbs()
|
||||
verbs.Add(/mob/dead/observer/proc/ManualFollow)
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
name = "Crew monitor"
|
||||
var/is_advanced = FALSE
|
||||
var/viewing_current_z_level
|
||||
/// If true, we'll see everyone, regardless of their suit sensors.
|
||||
var/ignore_sensors = FALSE
|
||||
|
||||
/datum/ui_module/crew_monitor/ui_act(action, params)
|
||||
if(..())
|
||||
@@ -17,11 +19,14 @@
|
||||
|
||||
switch(action)
|
||||
if("track")
|
||||
var/mob/living/carbon/human/H = locate(params["track"]) in GLOB.human_list
|
||||
if(isAI(usr))
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
var/mob/living/carbon/human/H = locate(params["track"]) in GLOB.human_list
|
||||
if(hassensorlevel(H, SUIT_SENSOR_TRACKING))
|
||||
AI.ai_actual_track(H)
|
||||
if(isobserver(usr))
|
||||
var/mob/dead/observer/ghost = usr
|
||||
ghost.ManualFollow(H)
|
||||
if("switch_level")
|
||||
if(!is_advanced)
|
||||
return
|
||||
@@ -53,7 +58,9 @@
|
||||
data["viewing_current_z_level"] = viewing_current_z_level
|
||||
|
||||
data["isAI"] = isAI(user)
|
||||
data["crewmembers"] = GLOB.crew_repository.health_data(viewing_current_z_level)
|
||||
data["isObserver"] = isobserver(user)
|
||||
data["ignoreSensors"] = ignore_sensors
|
||||
data["crewmembers"] = GLOB.crew_repository.health_data(viewing_current_z_level, ignore_sensors)
|
||||
data["critThreshold"] = HEALTH_THRESHOLD_CRIT
|
||||
|
||||
return data
|
||||
@@ -62,9 +69,13 @@
|
||||
var/list/data = list()
|
||||
|
||||
data["is_advanced"] = is_advanced
|
||||
|
||||
data["possible_levels"] = list()
|
||||
for(var/z in 1 to world.maxz)
|
||||
data["possible_levels"] |= z
|
||||
|
||||
return data
|
||||
|
||||
/datum/ui_module/crew_monitor/ghost
|
||||
name = "Crew monitor (Observer)"
|
||||
is_advanced = TRUE
|
||||
ignore_sensors = TRUE
|
||||
|
||||
Reference in New Issue
Block a user