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