mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-27 06:54:18 +01:00
The multitool now properly releases its buffer reference when the buffer is destroyed.
This commit is contained in:
@@ -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
|
||||
. += "<b>Alarm Sources<b><br>"
|
||||
. += "<b>Alarm Sources</b><br>"
|
||||
. += "<table>"
|
||||
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
|
||||
. += "<tr>"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user