/obj/machinery/computer3/station_alert default_prog = /datum/file/program/station_alert spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio) icon_state = "frame-eng" /datum/file/program/station_alert name = "Station Alert Console" desc = "Used to access the station's automated alert system." active_state = "alert:0" var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list()) interact(mob/user) if(!interactable()) return var/dat = "Current Station Alerts\n" dat += "Close

" for(var/cat in src.alarms) dat += text("[]
\n", cat) var/list/L = src.alarms[cat] if(L.len) for(var/alarm in L) var/list/alm = L[alarm] var/area/A = alm[1] var/list/sources = alm[3] dat += "" dat += "• " dat += "[A.name]" if(sources.len > 1) dat += text(" - [] sources", sources.len) dat += "
\n" else dat += "-- All Systems Nominal
\n" dat += "
\n" //user << browse(dat, "window=alerts") //onclose(user, "alerts") popup.set_content(dat) popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) popup.open() return Topic(href, href_list) if(..()) return return proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource) var/list/L = src.alarms[class] for(var/I in L) if(I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] if(!(alarmsource in sources)) sources += alarmsource return 1 var/obj/machinery/camera/C = null var/list/CL = null if(O && istype(O, /list)) CL = O if(CL.len == 1) C = CL[1] else if(O && istype(O, /obj/machinery/camera)) C = O L[A.name] = list(A, (C) ? C : O, list(alarmsource)) return 1 proc/cancelAlarm(var/class, area/A as area, obj/origin) var/list/L = src.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 return !cleared process() var/active_alarms = 0 for(var/cat in src.alarms) var/list/L = src.alarms[cat] if(L.len) active_alarms = 1 if(active_alarms) active_state = "alert:2" else active_state = "alert:0" ..() return