diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 622264189bf..ef9cce290c2 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -169,11 +169,12 @@ poweralm = state if(istype(source)) //Only report power alarms on the z-level where the source is located. for(var/thing in cameras) - var/obj/machinery/camera/C = thing - if(state == 1) - C.network -= "Power Alarms" - else - C.network |= "Power Alarms" + var/obj/machinery/camera/C = locateUID(thing) + if(!QDELETED(C)) + if(state == 1) + C.network -= "Power Alarms" + else + C.network |= "Power Alarms" for(var/item in GLOB.silicon_mob_list) var/mob/living/silicon/aiPlayer = item @@ -206,8 +207,9 @@ if(danger_level == ATMOS_ALARM_DANGER) for(var/thing in cameras) - var/obj/machinery/camera/C = thing - C.network |= "Atmosphere Alarms" + var/obj/machinery/camera/C = locateUID(thing) + if(!QDELETED(C)) + C.network |= "Atmosphere Alarms" for(var/item in GLOB.silicon_mob_list) var/mob/living/silicon/aiPlayer = item @@ -221,8 +223,9 @@ else if(atmosalm == ATMOS_ALARM_DANGER) for(var/thing in cameras) - var/obj/machinery/camera/C = thing - C.network -= "Atmosphere Alarms" + var/obj/machinery/camera/C = locateUID(thing) + if(!QDELETED(C)) + C.network -= "Atmosphere Alarms" for(var/item in GLOB.silicon_mob_list) var/mob/living/silicon/aiPlayer = item aiPlayer.cancelAlarm("Atmosphere", src, source) @@ -277,8 +280,9 @@ F.update_icon() for(var/thing in cameras) - var/obj/machinery/camera/C = thing - C.network |= "Fire Alarms" + var/obj/machinery/camera/C = locateUID(thing) + if(!QDELETED(C)) + C.network |= "Fire Alarms" for(var/item in GLOB.alert_consoles) var/obj/machinery/computer/station_alert/a = item @@ -309,8 +313,9 @@ F.update_icon() for(var/thing in cameras) - var/obj/machinery/camera/C = thing - C.network -= "Fire Alarms" + var/obj/machinery/camera/C = locateUID(thing) + if(!QDELETED(C)) + C.network -= "Fire Alarms" for(var/item in GLOB.silicon_mob_list) var/mob/living/silicon/aiPlayer = item diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 28382888af5..62db9341e5c 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -47,7 +47,7 @@ GLOB.cameranet.addCamera(src) if(isturf(loc)) myArea = get_area(src) - LAZYADD(myArea.cameras, src) + LAZYADD(myArea.cameras, UID()) if(is_station_level(z) && prob(3) && !start_active) toggle_cam(null, FALSE) wires.CutAll() @@ -67,7 +67,7 @@ GLOB.cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that GLOB.cameranet.cameras -= src if(isarea(myArea)) - LAZYREMOVE(myArea.cameras, src) + LAZYREMOVE(myArea.cameras, UID()) var/area/ai_monitored/A = get_area(src) if(istype(A)) A.motioncameras -= src @@ -295,14 +295,14 @@ GLOB.cameranet.addCamera(src) if(isturf(loc)) myArea = get_area(src) - LAZYADD(myArea.cameras, src) + LAZYADD(myArea.cameras, UID()) else myArea = null else set_light(0) GLOB.cameranet.removeCamera(src) if(isarea(myArea)) - LAZYREMOVE(myArea.cameras, src) + LAZYREMOVE(myArea.cameras, UID()) GLOB.cameranet.updateChunk(x, y, z) var/change_msg = "deactivates" if(status) @@ -333,7 +333,7 @@ /obj/machinery/camera/proc/triggerCameraAlarm() alarm_on = TRUE for(var/mob/living/silicon/S in GLOB.silicon_mob_list) - S.triggerAlarm("Camera", get_area(src), list(src), src) + S.triggerAlarm("Camera", get_area(src), list(UID()), src) /obj/machinery/camera/proc/cancelCameraAlarm() alarm_on = FALSE diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 1c3f4f30405..47e98006e2a 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -56,7 +56,7 @@ return FALSE for(var/mob/living/silicon/aiPlayer in GLOB.player_list) if(status) - aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) + aiPlayer.triggerAlarm("Motion", get_area(src), list(UID()), src) visible_message("A red light flashes on the [src]!") detectTime = -1 return TRUE diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 8f9f6ea2390..679fd0c63b3 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -47,7 +47,7 @@ return data -/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, O, obj/alarmsource) +/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, list/O, obj/alarmsource) if(alarmsource.z != z) return if(stat & (BROKEN)) @@ -58,18 +58,10 @@ if(I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] - if(!(alarmsource in sources)) - sources += alarmsource + if(!(alarmsource.UID() in sources)) + sources += alarmsource.UID() return TRUE - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && islist(O)) - 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)) + L[A.name] = list(get_area_name(A, TRUE), O, list(alarmsource.UID())) update_icon() return TRUE @@ -83,8 +75,8 @@ if(I == A.name) var/list/alarm = L[I] var/list/srcs = alarm[3] - if(origin in srcs) - srcs -= origin + if(origin.UID() in srcs) + srcs -= origin.UID() if(srcs.len == 0) cleared = TRUE L -= I diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 11dfaed5758..2fc14cb9f7c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -250,20 +250,19 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(L.len) for(var/alarm in L) var/list/alm = L[alarm] - var/area/A = alm[1] + var/area_name = alm[1] var/C = alm[2] var/list/sources = alm[3] dat += "" - if(C && istype(C, /list)) + if(C && islist(C)) var/dat2 = "" - for(var/obj/machinery/camera/I in C) - dat2 += text("[][]", (dat2=="") ? "" : " | ", I.c_tag) - dat += text("-- [] ([])", A.name, (dat2!="") ? dat2 : "No Camera") - else if(C && istype(C, /obj/machinery/camera)) - var/obj/machinery/camera/Ctmp = C - dat += text("-- [] ([])", A.name, Ctmp.c_tag) + for(var/thing in C) + var/obj/machinery/camera/I = locateUID(thing) + if(!QDELETED(I)) + dat2 += text("[][]", (dat2 == "") ? "" : " | ", I.c_tag) + dat += text("-- [] ([])", area_name, (dat2 != "") ? dat2 : "No Camera") else - dat += text("-- [] (No Camera)", A.name) + dat += text("-- [] (No Camera)", area_name) if(sources.len > 1) dat += text("- [] sources", sources.len) dat += "
\n" @@ -819,7 +818,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( Bot.call_bot(src, waypoint) -/mob/living/silicon/ai/triggerAlarm(class, area/A, O, obj/alarmsource) +/mob/living/silicon/ai/triggerAlarm(class, area/A, list/O, obj/alarmsource) if(alarmsource.z != z) return if(stat == DEAD) @@ -829,27 +828,22 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] - if(!(alarmsource in sources)) - sources += alarmsource + if(!(alarmsource.UID() in sources)) + sources += alarmsource.UID() return TRUE - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && islist(O)) - 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)) + L[A.name] = list(get_area_name(A, TRUE), O, list(alarmsource.UID())) if(O) - if(C && C.can_use()) - queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class) - else if(CL && CL.len) + var/obj/machinery/camera/C = locateUID(O[1]) + if(O.len == 1 && !QDELETED(C) && C.can_use()) + queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class) + else if(O && O.len) var/foo = 0 var/dat2 = "" - for(var/obj/machinery/camera/I in CL) - dat2 += text("[][]", (!foo) ? "" : " | ", I.c_tag) //I'm not fixing this shit... - foo = 1 + for(var/thing in O) + var/obj/machinery/camera/I = locateUID(thing) + if(!QDELETED(I)) + dat2 += text("[][]", (!foo) ? "" : " | ", I.c_tag) //I'm not fixing this shit... + foo = 1 queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class) else queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class) @@ -866,8 +860,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(I == A.name) var/list/alarm = L[I] var/list/srcs = alarm[3] - if(origin in srcs) - srcs -= origin + if(origin.UID() in srcs) + srcs -= origin.UID() if(srcs.len == 0) cleared = TRUE L -= I @@ -882,7 +876,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( if(!tracking) cameraFollow = null - if(!C || stat == DEAD) //C.can_use()) + if(!C || QDELETED(C) || stat == DEAD) //C.can_use()) return FALSE if(!eyeobj) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c5877c1a5dd..eefc889dc77 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -557,9 +557,9 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( if(L.len) for(var/alarm in L) var/list/alm = L[alarm] - var/area/A = alm[1] + var/area_name = alm[1] dat += "" - dat += text("-- [A.name]") + dat += text("-- [area_name]") dat += "
\n" else dat += "-- All Systems Nominal
\n" @@ -630,7 +630,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/InCritical() return low_power_mode -/mob/living/silicon/robot/triggerAlarm(class, area/A, O, obj/alarmsource) +/mob/living/silicon/robot/triggerAlarm(class, area/A, list/O, obj/alarmsource) if(alarmsource.z != z) return if(stat == DEAD) @@ -640,18 +640,10 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( if(I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] - if(!(alarmsource in sources)) - sources += alarmsource + if(!(alarmsource.UID() in sources)) + sources += alarmsource.UID() return TRUE - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && islist(O)) - 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)) + L[A.name] = list(get_area_name(A, TRUE), O, list(alarmsource.UID())) queueAlarm(text("--- [class] alarm detected in [A.name]!"), class) return TRUE @@ -662,8 +654,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( if(I == A.name) var/list/alarm = L[I] var/list/srcs = alarm[3] - if(origin in srcs) - srcs -= origin + if(origin.UID() in srcs) + srcs -= origin.UID() if(srcs.len == 0) cleared = 1 L -= I diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm.dm index 76d28827a30..f0015305360 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/alarm.dm @@ -39,7 +39,7 @@ return data -/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/alarmsource) +/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, list/O, obj/alarmsource) if(is_station_level(source.z)) if(!(A.type in GLOB.the_station_areas)) return @@ -51,18 +51,10 @@ if(I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] - if(!(alarmsource in sources)) - sources += alarmsource + if(!(alarmsource.UID() in sources)) + sources += alarmsource.UID() return TRUE - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && islist(O)) - 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)) + L[A.name] = list(get_area_name(A, TRUE), O, list(alarmsource.UID())) update_alarm_display() return TRUE @@ -78,8 +70,8 @@ if(!arealevelalarm) // the traditional behaviour var/list/alarm = L[I] var/list/srcs = alarm[3] - if(origin in srcs) - srcs -= origin + if(origin.UID() in srcs) + srcs -= origin.UID() if(srcs.len == 0) cleared = 1 L -= I