From d8eb32575b259fd6cb43eb29b863459e8d23e421 Mon Sep 17 00:00:00 2001 From: Exxion Date: Fri, 14 Aug 2020 10:49:17 -0400 Subject: [PATCH] Fixes pipelines and their gas_mixtures hard deleting (#27551) * WIP * Now it works, I think --- code/ATMOSPHERICS/datum_pipe_network.dm | 30 ++++++++++++++++++++----- code/ATMOSPHERICS/datum_pipeline.dm | 10 ++++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index a5f662ee4b7..97027421759 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -17,13 +17,28 @@ ..() /datum/pipe_network/Destroy() - for(var/datum/pipeline/pipeline in line_members) //This will remove the pipeline references for us - pipeline.network = null - line_members = null - for(var/obj/machinery/atmospherics/objects in normal_members) //Procs for the different bases will remove the references - objects.unassign_network(src) - normal_members = null + if(line_members) + for(var/datum/pipeline/pipeline in line_members) //This will remove the pipeline references for us + pipeline.network = null + line_members = null + + if(normal_members) + for(var/obj/machinery/atmospherics/objects in normal_members) //Procs for the different bases will remove the references + objects.unassign_network(src) + normal_members = null + pipe_networks -= src + + if(air_transient) + qdel(air_transient) + air_transient = null + + if(radiate) + qdel(radiate) + radiate = null + + gases = null + ..() /datum/pipe_network/proc/process() @@ -73,6 +88,9 @@ for(var/datum/pipeline/line_member in giver.line_members) line_member.network = src + giver.line_members = null + giver.normal_members = null + qdel(giver) update_network_gases() return 1 diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 02c1daf63d7..c4cb42934d1 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -15,8 +15,9 @@ if(network) //For the pipenet rebuild qdel(network) network = null - if(air && air.volume) //For the pipeline rebuild next tick - temporarily_store_air() + if(air) //For the pipeline rebuild next tick + if(air.total_moles) + temporarily_store_air() qdel(air) air = null //Null the fuck out of all these references @@ -101,9 +102,12 @@ /datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(new_network.line_members.Find(src)) + if(src in new_network.line_members) return 0 + if(network && (network != new_network)) + return new_network.merge(network) + new_network.line_members += src network = new_network