From 26db3004231e43388810ccb776dc1308a88ae58a Mon Sep 17 00:00:00 2001
From: HMBGERDO <61080616+HMBGERDO@users.noreply.github.com>
Date: Mon, 11 Dec 2023 18:05:46 +0100
Subject: [PATCH] Remote access can open/close windoors (#23466)
* access tuner and other remote can now open close windoors
* yes, revert
* a
* little extra tab
* Update code/game/objects/items/control_wand.dm
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
* Update code/game/objects/items/control_wand.dm
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
* Update code/game/objects/items/control_wand.dm
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
* Update code/game/objects/items/control_wand.dm
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
* Update code/game/objects/items/control_wand.dm
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
* Update code/game/objects/items/control_wand.dm
---------
Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com>
---
code/game/objects/items/control_wand.dm | 141 ++++++++++++++++--------
1 file changed, 95 insertions(+), 46 deletions(-)
diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm
index 5571328920a..33510ccccf5 100644
--- a/code/game/objects/items/control_wand.dm
+++ b/code/game/objects/items/control_wand.dm
@@ -49,45 +49,82 @@
. = ..()
. += "It's current mode is: [mode]"
-/obj/item/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user)
- if(!istype(D))
- return
+/obj/item/door_remote/afterattack(obj/target, mob/user)
+ if(istype(target, /obj/machinery/door/airlock))
+ access_airlock(target, user)
+ if(istype(target, /obj/machinery/door/window))
+ access_windoor(target, user)
+
+/obj/item/door_remote/proc/access_airlock(obj/machinery/door/airlock/D, mob/user)
if(HAS_TRAIT(D, TRAIT_CMAGGED))
to_chat(user, "The door doesn't respond to [src]!")
return
+
if(D.is_special)
to_chat(user, "[src] cannot access this kind of door!")
return
+
if(!(D.arePowerSystemsOn()))
to_chat(user, "[D] has no power!")
return
+
if(!D.requiresID())
to_chat(user, "[D]'s ID scan is disabled!")
return
- if(D.check_access(src.ID))
- D.add_hiddenprint(user)
- switch(mode)
- if(WAND_OPEN)
- if(D.density)
- D.open()
- else
- D.close()
- if(WAND_BOLT)
- if(D.locked)
- D.unlock()
- else
- D.lock()
- if(WAND_EMERGENCY)
- if(D.emergency)
- D.emergency = FALSE
- else
- D.emergency = TRUE
- D.update_icon()
- if(WAND_SPEED)
- D.normalspeed = !D.normalspeed
- to_chat(user, "[D] is now in [D.normalspeed ? "normal" : "fast"] mode.")
- else
+
+ if(!D.check_access(src.ID))
to_chat(user, "[src] does not have access to this door.")
+ return
+
+ D.add_hiddenprint(user)
+ switch(mode)
+ if(WAND_OPEN)
+ if(D.density)
+ D.open()
+ else
+ D.close()
+ if(WAND_BOLT)
+ if(D.locked)
+ D.unlock()
+ else
+ D.lock()
+ if(WAND_EMERGENCY)
+ D.emergency = !D.emergency
+ D.update_icon()
+ if(WAND_SPEED)
+ D.normalspeed = !D.normalspeed
+ to_chat(user, "[D] is now in [D.normalspeed ? "normal" : "fast"] mode.")
+
+/obj/item/door_remote/proc/access_windoor(obj/machinery/door/window/D, mob/user)
+ if(HAS_TRAIT(D, TRAIT_CMAGGED))
+ to_chat(user, "The door doesn't respond to [src]!")
+ return
+
+ if(!D.has_power())
+ to_chat(user, "[D] has no power!")
+ return
+
+ if(!D.requiresID())
+ to_chat(user, "[D]'s ID scan is disabled!")
+ return
+
+ if(!D.check_access(ID))
+ to_chat(user, "[src] does not have access to this door.")
+ return
+
+ D.add_hiddenprint(user)
+ switch(mode)
+ if(WAND_OPEN)
+ if(D.density)
+ D.open()
+ else
+ D.close()
+ if(WAND_BOLT)
+ to_chat(user, "[D] has no bolting functionality.")
+ if(WAND_EMERGENCY)
+ to_chat(user, "[D] has no emergency access functionality.")
+ if(WAND_SPEED)
+ to_chat(user, "[D] has no speed change functionality.")
/obj/item/door_remote/omni
name = "omni door remote"
@@ -145,8 +182,8 @@
var/hack_speed = 1.5 SECONDS
var/busy = FALSE
-/obj/item/door_remote/omni/access_tuner/afterattack(obj/machinery/door/airlock/D, mob/user)
- if(!istype(D))
+/obj/item/door_remote/omni/access_tuner/afterattack(obj/machinery/door/D, mob/user)
+ if(!istype(D, /obj/machinery/door/airlock) && !istype(D, /obj/machinery/door/window))
return
if(busy)
to_chat(user, "[src] is alreading interfacing with a door!")
@@ -186,16 +223,16 @@
playsound(src, 'sound/items/keyring_shake.ogg', 50)
cooldown = world.time + JANGLE_COOLDOWN
-/obj/item/door_remote/janikeyring/afterattack(obj/machinery/door/airlock/D, mob/user, proximity)
+/obj/item/door_remote/janikeyring/afterattack(obj/machinery/door/D, mob/user, proximity)
if(!proximity)
return
- if(!istype(D))
+ if(!istype(D, /obj/machinery/door/airlock) && !istype(D, /obj/machinery/door/window))
return
if(busy)
- to_chat(user, "You are already using [src] on the [D] airlock's access panel!")
+ to_chat(user, "You are already using [src] on the [D]'s access panel!")
return
busy = TRUE
- to_chat(user, "You fiddle with [src], trying different keys to open the [D] airlock...")
+ to_chat(user, "You fiddle with [src], trying different keys to open the [D]...")
playsound(src, 'sound/items/keyring_unlock.ogg', 50)
var/mob/living/carbon/human/H = user
@@ -204,14 +241,11 @@
else
hack_speed = rand(5, 20) SECONDS
- if(!do_after(user, hack_speed, target = D, progress = 0))
- busy = FALSE
- return
+ if(do_after(user, hack_speed, target = D, progress = 0))
+ . = ..()
busy = FALSE
- if(!istype(D))
- return
-
+/obj/item/door_remote/janikeyring/access_airlock(obj/machinery/door/airlock/D, mob/user)
if(HAS_TRAIT(D, TRAIT_CMAGGED))
to_chat(user, "[src] won't fit in the [D] airlock's access panel, there's slime everywhere!")
return
@@ -224,15 +258,30 @@
to_chat(user, "The [D] airlock has no power!")
return
- if(D.check_access(ID))
- D.add_hiddenprint(user)
- if(D.density)
- D.open()
- else
- to_chat(user, "The [D] airlock is already open!")
-
- else
+ if(!D.check_access(ID))
to_chat(user, "[src] does not seem to have a key for the [D] airlock's access panel!")
+ return
+
+ D.add_hiddenprint(user)
+ if(D.density)
+ D.open()
+ else
+ to_chat(user, "The [D] airlock is already open!")
+
+/obj/item/door_remote/janikeyring/access_windoor(obj/machinery/door/window/D, mob/user)
+ if(!(D.has_power()))
+ to_chat(user, "[D] has no power!")
+ return
+
+ if(!D.check_access(ID))
+ to_chat(user, "[src] does not seem to have a key for the [D]'s access panel!")
+ return
+
+ D.add_hiddenprint(user)
+ if(D.density)
+ D.open()
+ else
+ to_chat(user, "The [D] is already open!")
#undef WAND_OPEN
#undef WAND_BOLT