From 8a5a969002aede928a7b8a6bfcc2e6f938d1b7c5 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sat, 6 Jun 2015 11:04:41 +0200 Subject: [PATCH] More Destroy()s, better implementation - Re-implements Destroy() for SMES units. This time moves relevant (de)construction code all the way up to obj/machinery/. This should fix any potential GC issues with deconstruction of component-based machines. - Implements Destroy() for breaker boxes. - Fixes SMES units lacking disconnect_terminal(), causing GC errors. --- code/game/machinery/machinery.dm | 9 +++++++++ code/modules/power/breaker_box.dm | 5 +++++ code/modules/power/power.dm | 2 ++ code/modules/power/smes.dm | 8 +++++--- code/modules/power/smes_construction.dm | 9 ++++----- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index d9b579ab03..313efe3bb2 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -123,6 +123,15 @@ Class Procs: /obj/machinery/Destroy() machines -= src + if(component_parts) + for(var/atom/A in component_parts) + if(A.loc == src) // If the components are inside the machine, delete them. + qdel(A) + else // Otherwise we assume they were dropped to the ground during deconstruction, and were not removed from the component_parts list by deconstruction code. + component_parts -= A + if(contents) // The same for contents. + for(var/atom/A in contents) + qdel(A) ..() /obj/machinery/process()//If you dont use process or power why are you here diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 2faa50a4e6..5930dd53e7 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -19,6 +19,11 @@ var/RCon_tag = "NO_TAG" var/update_locked = 0 +/obj/machinery/power/breakerbox/Destroy() + ..() + for(var/obj/nano_module/rcon/R in world) + R.FindDevices() + /obj/machinery/power/breakerbox/activated icon_state = "bbox_on" diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 3b9d094bda..7d51af8e35 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -17,6 +17,8 @@ /obj/machinery/power/Destroy() disconnect_from_network() + disconnect_terminal() + ..() /////////////////////////////// diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e42c5289b7..5fcffca120 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -84,10 +84,12 @@ return -/obj/machinery/power/smes/Destroy() +/obj/machinery/power/smes/disconnect_terminal() if(terminal) - disconnect_terminal() - ..() + terminal.master = null + terminal = null + return 1 + return 0 /obj/machinery/power/smes/update_icon() overlays.Cut() diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 0160868a14..095c172aac 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -76,12 +76,10 @@ should_be_mapped = 1 /obj/machinery/power/smes/buildable/Destroy() + ..() qdel(wires) - if(component_parts) - for(var/atom/A in component_parts) - qdel(A) - - return ..() + for(var/obj/nano_module/rcon/R in world) + R.FindDevices() // Proc: process() @@ -354,6 +352,7 @@ if(I.reliability != 100 && crit_fail) I.crit_fail = 1 I.loc = src.loc + component_parts -= I qdel(src) return