listener update
This commit is contained in:
@@ -89,6 +89,12 @@
|
||||
diag_hud_set_borgcell()
|
||||
logevent("System brought online.")
|
||||
|
||||
listener = new(list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER, ALARM_CAMERA, ALARM_BURGLAR, ALARM_MOTION), list(z))
|
||||
RegisterSignal(listener, COMSIG_ALARM_TRIGGERED, .proc/alarm_triggered)
|
||||
RegisterSignal(listener, COMSIG_ALARM_CLEARED, .proc/alarm_cleared)
|
||||
listener.RegisterSignal(src, COMSIG_LIVING_PREDEATH, /datum/alarm_listener/proc/prevent_alarm_changes)
|
||||
listener.RegisterSignal(src, COMSIG_LIVING_REVIVE, /datum/alarm_listener/proc/allow_alarm_changes)
|
||||
|
||||
add_verb(src, /mob/living/proc/lay_down) //CITADEL EDIT gimmie rest verb kthx
|
||||
add_verb(src, /mob/living/silicon/robot/proc/rest_style)
|
||||
|
||||
@@ -116,8 +122,7 @@
|
||||
ghostize()
|
||||
stack_trace("Borg MMI lacked a brainmob")
|
||||
mmi = null
|
||||
if(modularInterface)
|
||||
QDEL_NULL(modularInterface)
|
||||
QDEL_NULL(modularInterface)
|
||||
if(connected_ai)
|
||||
set_connected_ai(null)
|
||||
if(shell) //??? why would you give an ai radio keys?
|
||||
@@ -132,14 +137,16 @@
|
||||
QDEL_NULL(inv1)
|
||||
QDEL_NULL(inv2)
|
||||
QDEL_NULL(inv3)
|
||||
QDEL_NULL(spark_system)
|
||||
QDEL_NULL(listener)
|
||||
cell = null
|
||||
return ..()
|
||||
|
||||
// /mob/living/silicon/robot/Topic(href, href_list)
|
||||
// . = ..()
|
||||
// //Show alerts window if user clicked on "Show alerts" in chat
|
||||
// if (href_list["showalerts"])
|
||||
// robot_alerts()
|
||||
/mob/living/silicon/robot/Topic(href, href_list)
|
||||
. = ..()
|
||||
//Show alerts window if user clicked on "Show alerts" in chat
|
||||
if (href_list["showalerts"])
|
||||
robot_alerts()
|
||||
|
||||
/mob/living/silicon/robot/proc/pick_module()
|
||||
if(module.type != /obj/item/robot_module)
|
||||
@@ -203,15 +210,16 @@
|
||||
|
||||
/mob/living/silicon/robot/proc/robot_alerts()
|
||||
var/dat = ""
|
||||
for (var/cat in alarms)
|
||||
dat += text("<B>[cat]</B><BR>\n")
|
||||
var/list/L = alarms[cat]
|
||||
if (L.len)
|
||||
for (var/alarm in L)
|
||||
var/list/alm = L[alarm]
|
||||
var/list/alarms = listener.alarms
|
||||
for (var/alarm_type in alarms)
|
||||
dat += "<B>[alarm_type]</B><BR>\n"
|
||||
var/list/alerts = alarms[alarm_type]
|
||||
if (length(alerts))
|
||||
for (var/alarm in alerts)
|
||||
var/list/alm = alerts[alarm]
|
||||
var/area/A = alm[1]
|
||||
dat += "<NOBR>"
|
||||
dat += text("-- [A.name]")
|
||||
dat += "-- [A.name]"
|
||||
dat += "</NOBR><BR>\n"
|
||||
else
|
||||
dat += "-- All Systems Nominal<BR>\n"
|
||||
@@ -267,62 +275,13 @@
|
||||
/mob/living/silicon/robot/restrained(ignore_grab)
|
||||
. = 0
|
||||
|
||||
/mob/living/silicon/robot/triggerAlarm(class, area/home, cameras, obj/source)
|
||||
if(source.z != z)
|
||||
return
|
||||
if(stat == DEAD)
|
||||
return TRUE
|
||||
var/list/our_sort = alarms[class]
|
||||
for(var/areaname in our_sort)
|
||||
if (areaname == home.name)
|
||||
var/list/alarm = our_sort[areaname]
|
||||
var/list/sources = alarm[3]
|
||||
if (!(source in sources))
|
||||
sources += source
|
||||
return TRUE
|
||||
/mob/living/silicon/robot/proc/alarm_triggered(datum/source, alarm_type, area/source_area)
|
||||
SIGNAL_HANDLER
|
||||
queueAlarm("--- [alarm_type] alarm detected in [source_area.name]!", alarm_type)
|
||||
|
||||
var/obj/machinery/camera/cam = null
|
||||
var/list/our_cams = null
|
||||
if(cameras && islist(cameras))
|
||||
our_cams = cameras
|
||||
if (our_cams.len == 1)
|
||||
cam = our_cams[1]
|
||||
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||
cam = cameras
|
||||
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||
queueAlarm(text("--- [class] alarm detected in [home.name]!"), class)
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/freeCamera(area/home, obj/machinery/camera/cam)
|
||||
for(var/class in alarms)
|
||||
var/our_area = alarms[class][home.name]
|
||||
if(!our_area)
|
||||
continue
|
||||
var/cams = our_area[2] //Get the cameras
|
||||
if(!cams)
|
||||
continue
|
||||
if(islist(cams))
|
||||
cams -= cam
|
||||
if(length(cams) == 1)
|
||||
our_area[2] = cams[1]
|
||||
else
|
||||
our_area[2] = null
|
||||
|
||||
/mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin)
|
||||
var/list/L = alarms[class]
|
||||
var/cleared = 0
|
||||
for (var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/srcs = alarm[3]
|
||||
if (origin in srcs)
|
||||
srcs -= origin
|
||||
if (srcs.len == 0)
|
||||
cleared = 1
|
||||
L -= I
|
||||
if (cleared)
|
||||
queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0)
|
||||
return !cleared
|
||||
/mob/living/silicon/robot/proc/alarm_cleared(datum/source, alarm_type, area/source_area)
|
||||
SIGNAL_HANDLER
|
||||
queueAlarm("--- [alarm_type] alarm in [source_area.name] has been cleared.", alarm_type, FALSE)
|
||||
|
||||
/mob/living/silicon/robot/can_interact_with(atom/A)
|
||||
if (A == modularInterface)
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
|
||||
/// the last health before updating - to check net change in health
|
||||
var/previous_health
|
||||
///Alarm listener datum, handes caring about alarm events and such
|
||||
var/datum/alarm_listener/listener
|
||||
|
||||
//Hud stuff
|
||||
|
||||
var/atom/movable/screen/inv1 = null
|
||||
@@ -58,8 +61,6 @@
|
||||
var/locked = TRUE
|
||||
var/list/req_access = list(ACCESS_ROBOTICS)
|
||||
|
||||
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list())
|
||||
|
||||
var/vtec = 0 // VTEC speed boost.
|
||||
/// vtec shorted out
|
||||
var/vtec_disabled = FALSE
|
||||
|
||||
Reference in New Issue
Block a user