From 69e0ebf71e39e5f86d472bbf4508b38d46a122e1 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sat, 6 Jun 2015 07:21:34 +0200 Subject: [PATCH] Implements Destroy() for organs - This fixes annoying roundstart GC errors, and should fix other limb/organ related GC errors as well. --- code/modules/organs/organ.dm | 21 +++++++++++++++++++++ code/modules/organs/organ_external.dm | 14 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 7e7e2e81782..86620ba50e0 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -24,6 +24,27 @@ var/list/organ_cache = list() // links chemical IDs to number of ticks for which they'll stay in the blood germ_level = 0 +/obj/item/organ/Destroy() + if(!owner) + return ..() + + if((owner.internal_organs) && (src in owner.internal_organs)) + owner.internal_organs -= src + + if((owner.internal_organs_by_name) && (src in owner.internal_organs_by_name)) + owner.internal_organs_by_name -= src + + if((owner.organs) && (src in owner.organs)) + owner.internal_organs -= src + + if((owner.organs_by_name) && (src in owner.organs_by_name)) + owner.organs_by_name -= src + + if(src in owner.contents) + owner.contents -= src + + return ..() + /obj/item/organ/proc/update_health() return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index a92219c7339..5434e98acce 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -48,6 +48,20 @@ var/can_grasp var/can_stand +/obj/item/organ/external/Destroy() + if(parent && parent.children) + parent.children -= src + + if(children) + for(var/obj/item/organ/external/C in children) + qdel(C) + + if(internal_organs) + for(var/obj/item/organ/O in internal_organs) + qdel(O) + + return ..() + /obj/item/organ/external/attack_self(var/mob/user) if(!contents.len) return ..()