From a8ec4e45ede95ce1689e296149f4dcca9b4969b2 Mon Sep 17 00:00:00 2001 From: Surrealaser <42553659+Surrealaser@users.noreply.github.com> Date: Wed, 21 Nov 2018 05:06:12 -0500 Subject: [PATCH] Motion Detector Auto-Deactivates If User Dead (#693) --- .../objects/items/devices/motion_detector.dm | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm index 48eaa863f..2aa674ad3 100644 --- a/code/game/objects/items/devices/motion_detector.dm +++ b/code/game/objects/items/devices/motion_detector.dm @@ -50,6 +50,7 @@ var/detect_revivable = TRUE var/detect_fubar = TRUE var/ping = TRUE + var/mob/living/carbon/human/operator /obj/item/device/motiondetector/examine(mob/user as mob) if(get_dist(user,src) > 2) @@ -71,6 +72,11 @@ blip_pool = list() ..() +/obj/item/device/motiondetector/dropped(mob/user) + . = ..() + operator = null + + /obj/item/device/motiondetector/update_icon() if(active) icon_state = "detector_on_[detector_mode]" @@ -78,19 +84,31 @@ icon_state = "detector_off" return ..() +/obj/item/device/motiondetector/proc/deactivate() + active = FALSE + operator = null + update_icon() + processing_objects.Remove(src) + /obj/item/device/motiondetector/process() if(!active) - update_icon() - processing_objects.Remove(src) + deactivate() return - var/mob/living/carbon/human/human_user - if(ishuman(loc)) - human_user = loc - else - active = FALSE - update_icon() - processing_objects.Remove(src) + if(!operator) + deactivate() + return + + if(get_turf(src) != get_turf(operator)) + deactivate() + return + + if(operator.stat == DEAD) + deactivate() + return + + if(!operator.client) + deactivate() return recycletime-- @@ -111,7 +129,7 @@ var/detected var/status - for(var/mob/living/M in orange(detector_range, human_user)) + for(var/mob/living/M in orange(detector_range, operator)) if(!isturf(M.loc)) continue if(isrobot(M)) @@ -141,8 +159,7 @@ detected = TRUE - if(human_user) - show_blip(human_user, M, status) + show_blip(operator, M, status) if(detected && ping) playsound(loc, 'sound/items/tick.ogg', 50, 0, 7, 2) @@ -229,6 +246,7 @@ active = !active if(active) to_chat(usr, "You activate [src].") + operator = usr processing_objects.Add(src) else to_chat(usr, "You deactivate [src].")