diff --git a/code/datums/expansions/multitool/circuitboards/stationalert.dm b/code/datums/expansions/multitool/circuitboards/stationalert.dm index e3546621480..f46fd6ac5b6 100644 --- a/code/datums/expansions/multitool/circuitboards/stationalert.dm +++ b/code/datums/expansions/multitool/circuitboards/stationalert.dm @@ -1,6 +1,6 @@ /datum/expansion/multitool/circuitboards/stationalert/get_interact_window(var/obj/item/device/multitool/M, var/mob/user) var/obj/item/weapon/circuitboard/stationalert/SA = holder - . += "Alarm Sources
" + . += "Alarm Sources
" . += "" for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) . += "" diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index a5d5fc0525a..5845dcd5c39 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -27,14 +27,14 @@ . = ..() unregister() -/obj/machinery/computer/station_alert/proc/register(var/datum/nano_module/alarm_monitor/monitor) +/obj/machinery/computer/station_alert/proc/register_monitor(var/datum/nano_module/alarm_monitor/monitor) if(monitor.host != src) return alarm_monitor = monitor alarm_monitor.register(src, /obj/machinery/computer/station_alert/update_icon) -/obj/machinery/computer/station_alert/proc/unregister() +/obj/machinery/computer/station_alert/proc/unregister_monitor() if(alarm_monitor) alarm_monitor.unregister(src) qdel(alarm_monitor) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index e383bd0d044..e7c1872af9d 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -32,8 +32,19 @@ /obj/item/device/multitool/proc/set_buffer(var/atom/buffer) if(!buffer || istype(buffer)) - buffer_object = buffer buffer_name = buffer ? buffer.name : null + if(buffer != buffer_object) + if(buffer_object) + buffer_object.unregister(OBSERVER_EVENT_DESTROY, src) + buffer_object = buffer + if(buffer_object) + buffer_object.register(OBSERVER_EVENT_DESTROY, src, /obj/item/device/multitool/proc/on_buffer_destroyed) + +/obj/item/device/multitool/proc/on_buffer_destroyed(var/atom/destroyed_buffer) + // Only remove the buffered object, don't reset the name + // This means one cannot know if the buffer has been destroyed until one attempts to use it. + if(destroyed_buffer == buffer_object) + buffer_object = null /obj/item/device/multitool/resolve_attackby(atom/A, mob/user) if(!isobj(A)) diff --git a/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm b/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm index c6e25de422a..4f3c5800859 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/station_alert.dm @@ -10,14 +10,14 @@ /obj/item/weapon/circuitboard/stationalert/construct(var/obj/machinery/computer/station_alert/SA) if(..(SA)) - SA.unregister() + SA.unregister_monitor() var/datum/nano_module/alarm_monitor/monitor = new(SA) monitor.alarm_handlers.Cut() for(var/alarm_handler in alarm_handlers) monitor.alarm_handlers += alarm_handler - SA.register(monitor) + SA.register_monitor(monitor) return 1 /obj/item/weapon/circuitboard/stationalert/deconstruct(var/obj/machinery/computer/station_alert/SA)