From 2e13a89388266f0dbc247845d5047b256e9f68cb Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Mon, 13 Feb 2017 14:30:48 -0500 Subject: [PATCH 1/2] Improved turf destruction flow --- code/game/turfs/turf.dm | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 640095ae48b..2a94057aa65 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -24,6 +24,7 @@ var/list/decals var/requires_activation //add to air processing after initialize? + var/changing_turf = FALSE /turf/SDQL_update(const/var_name, new_value) if(var_name == "x" || var_name == "y" || var_name == "z") @@ -50,12 +51,16 @@ /turf/proc/Initalize_Atmos(times_fired) CalculateAdjacentTurfs() -/turf/Destroy() +/turf/Destroy(force) + if(!changing_turf) + stack_trace("Incorrect turf deletion") + changing_turf = FALSE + SSair.remove_from_active(src) visibilityChanged() initialized = FALSE requires_activation = FALSE ..() - return QDEL_HINT_HARDDEL_NOW + return QDEL_HINT_IWILLGC /turf/attack_hand(mob/user) user.Move_Pulled(src) @@ -188,24 +193,14 @@ return if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed return src - var/old_blueprint_data = blueprint_data - SSair.remove_from_active(src) - - var/list/old_checkers = proximity_checkers - var/old_ex_level = explosion_level - var/old_ex_id = explosion_id - - Destroy() //❄ + changing_turf = TRUE + qdel(src) //Just get the side effects and call Destroy var/turf/W = new path(src) - W.proximity_checkers = old_checkers - W.explosion_level = old_ex_level - W.explosion_id = old_ex_id - if(!defer_change) W.AfterChange(ignore_air) - W.blueprint_data = old_blueprint_data + return W /turf/proc/AfterChange(ignore_air = FALSE) //called after a turf has been replaced in ChangeTurf() From af67d13a745a6e33c5f329c983a23b8247bae673 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Mon, 13 Feb 2017 14:51:37 -0500 Subject: [PATCH 2/2] Fixes admin turf deletion --- code/modules/admin/verbs/randomverbs.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index d28ba376720..30c4f0b0fe0 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -508,7 +508,11 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] deleted [O] at ([O.x],[O.y],[O.z])") message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])") feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - qdel(O) + if(isturf(O)) + var/turf/T = O + T.ChangeTurf(T.baseturf) + else + qdel(O) /client/proc/cmd_admin_list_open_jobs() set category = "Admin"