From 1a98660522e67110af9b7909dca42d3919ef8155 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Mon, 22 Aug 2016 21:47:18 -0700 Subject: [PATCH 1/4] Fixes a runtime when an airlock set to `autoclose` is deleted --- code/game/machinery/doors/door.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 18879cfdc9b..2a0de29c9ca 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -270,7 +270,7 @@ /obj/machinery/door/proc/autoclose() var/obj/machinery/door/airlock/A = src - if(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose) + if(!qdeleted(src) && A && !A.density && !A.operating && !A.locked && !A.welded && A.autoclose) close() return @@ -308,4 +308,4 @@ /obj/machinery/door/proc/disable_lockdown() if(!stat) //Opens only powered doors. - open() //Open everything! \ No newline at end of file + open() //Open everything! From ea669191d5a55de92e27e0c58e3ab76a76892366 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 23 Aug 2016 02:50:27 -0700 Subject: [PATCH 2/4] Moves airlocks to the `addtimer` system --- code/controllers/Processes/timer.dm | 2 ++ code/game/machinery/doors/airlock.dm | 9 ++++++++- code/game/machinery/doors/door.dm | 21 +++++++++++++-------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/code/controllers/Processes/timer.dm b/code/controllers/Processes/timer.dm index de68a01ef51..bda5ad5f650 100644 --- a/code/controllers/Processes/timer.dm +++ b/code/controllers/Processes/timer.dm @@ -62,6 +62,8 @@ var/global/datum/controller/process/timer/timer_master event.thingToCall = thingToCall event.procToCall = procToCall event.timeToRun = world.time + wait + // Make the tag portion of the hash be independent + args[1] = "\ref[thingToCall]" event.hash = jointext(args, null) if(args.len > 4) event.argList = args.Copy(5) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3f21e952a36..4cb724c1a01 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -374,6 +374,13 @@ About the new airlock wires panel: /obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user as mob) ..(user) + +/obj/machinery/door/airlock/autoclose() + autoclose_timer = 0 + if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose) + close() + return + /obj/machinery/door/airlock/proc/isElectrified() if(src.electrified_until != 0) return 1 @@ -1088,4 +1095,4 @@ About the new airlock wires panel: unlock() electrified_until = 0 open() - safe = TRUE \ No newline at end of file + safe = TRUE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 2a0de29c9ca..735ca761a8e 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -18,6 +18,7 @@ var/p_open = 0 var/operating = 0 var/autoclose = 0 + var/autoclose_timer var/glass = 0 var/normalspeed = 1 var/heat_proof = 0 // For glass airlocks/opacity firedoors @@ -58,6 +59,9 @@ air_update_turf(1) update_freelook_sight() airlocks -= src + if(autoclose_timer) + deltimer(autoclose_timer) + autoclose_timer = 0 return ..() /obj/machinery/door/Bumped(atom/AM) @@ -220,12 +224,9 @@ air_update_turf(1) update_freelook_sight() - if(autoclose && normalspeed) - spawn(150) - autoclose() - if(autoclose && !normalspeed) - spawn(5) - autoclose() + // The `addtimer` system has the advantage of being cancelable + if(autoclose) + autoclose_timer = addtimer(src, "autoclose", normalspeed ? 150 : 5, unique = 1) return 1 @@ -236,6 +237,10 @@ return operating = 1 + if(autoclose_timer) + deltimer(autoclose_timer) + autoclose_timer = 0 + do_animate("closing") src.layer = closed_layer sleep(5) @@ -269,8 +274,8 @@ return 1 /obj/machinery/door/proc/autoclose() - var/obj/machinery/door/airlock/A = src - if(!qdeleted(src) && A && !A.density && !A.operating && !A.locked && !A.welded && A.autoclose) + autoclose_timer = 0 + if(!qdeleted(src) && !density && !operating && autoclose) close() return From 7a75910bb02702a6b6c188850a81036762a97d07 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 23 Aug 2016 02:50:51 -0700 Subject: [PATCH 3/4] Peoples' limbs are no longer given a wound cleanup timer if they don't need it --- code/modules/surgery/organs/organ_external.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index e2702b36afe..4033379ed64 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -411,8 +411,8 @@ This function completely restores a damaged organ to perfect condition. last_dam = brute_dam + burn_dam if(germ_level) return 1 - if(!wound_cleanup_timer) - wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), 1, wounds) + if(!wound_cleanup_timer && wounds.len) + wound_cleanup_timer = addtimer(src, "cleanup_wounds", SecondsToTicks(600), unique = 1, wounds) if(update_icon()) owner.UpdateDamageIcon(1) From d3c5c6dbbbc1cba5d005d887ec7cb216a80f86c9 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 23 Aug 2016 13:44:06 -0700 Subject: [PATCH 4/4] Adds the name back to the hash --- code/controllers/Processes/timer.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/controllers/Processes/timer.dm b/code/controllers/Processes/timer.dm index bda5ad5f650..711412608ba 100644 --- a/code/controllers/Processes/timer.dm +++ b/code/controllers/Processes/timer.dm @@ -62,9 +62,10 @@ var/global/datum/controller/process/timer/timer_master event.thingToCall = thingToCall event.procToCall = procToCall event.timeToRun = world.time + wait - // Make the tag portion of the hash be independent - args[1] = "\ref[thingToCall]" - event.hash = jointext(args, null) + var/hashlist = args.Copy() + + hashlist[1] = "[thingToCall](\ref[thingToCall])" + event.hash = jointext(hashlist, null) if(args.len > 4) event.argList = args.Copy(5)