Merge pull request #5522 from Crazylemon64/airlock_wire_runtime_fix

Fixes a runtime when an airlock set to `autoclose` is deleted
This commit is contained in:
Fox McCloud
2016-08-25 22:55:59 -04:00
committed by GitHub
4 changed files with 28 additions and 13 deletions
+4 -1
View File
@@ -62,7 +62,10 @@ var/global/datum/controller/process/timer/timer_master
event.thingToCall = thingToCall
event.procToCall = procToCall
event.timeToRun = world.time + wait
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)
+8 -1
View File
@@ -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
safe = TRUE
+14 -9
View File
@@ -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(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose)
autoclose_timer = 0
if(!qdeleted(src) && !density && !operating && autoclose)
close()
return
@@ -308,4 +313,4 @@
/obj/machinery/door/proc/disable_lockdown()
if(!stat) //Opens only powered doors.
open() //Open everything!
open() //Open everything!
@@ -412,8 +412,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)