diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm
index a88abfc61b9..cd81d6db3cc 100644
--- a/code/game/machinery/ai_slipper.dm
+++ b/code/game/machinery/ai_slipper.dm
@@ -24,46 +24,49 @@
stat |= NOPOWER
/obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses)
- src.disabled = disabled
- src.uses = uses
- src.power_change()
+ disabled = disabled
+ uses = uses
+ power_change()
/obj/machinery/ai_slipper/attackby(obj/item/weapon/W, mob/user, params)
if(stat & (NOPOWER|BROKEN))
return
if(istype(user, /mob/living/silicon))
- return src.attack_hand(user)
+ return attack_hand(user)
else // trying to unlock the interface
- if(src.allowed(usr))
+ if(allowed(usr))
locked = !locked
- to_chat(user, "You [ locked ? "lock" : "unlock"] the device.")
+ to_chat(user, "You [locked ? "lock" : "unlock"] the device.")
if(locked)
- if(user.machine==src)
+ if(user.machine == src)
user.unset_machine()
user << browse(null, "window=ai_slipper")
else
- if(user.machine==src)
- src.attack_hand(usr)
+ if(user.machine == src)
+ attack_hand(usr)
else
to_chat(user, "\red Access denied.")
return
return
-/obj/machinery/ai_slipper/attack_ai(mob/user as mob)
+/obj/machinery/ai_slipper/attack_ai(mob/user)
+ return attack_hand(user)
+
+/obj/machinery/ai_slipper/attack_ghost(mob/user)
return attack_hand(user)
-/obj/machinery/ai_slipper/attack_hand(mob/user as mob)
+/obj/machinery/ai_slipper/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
- if( (get_dist(src, user) > 1 ))
- if(!istype(user, /mob/living/silicon))
- to_chat(user, text("Too far away."))
- user.unset_machine()
- user << browse(null, "window=ai_slipper")
- return
+
+ if(get_dist(src, user) > 1 && (!issilicon(user) || !user.can_admin_interact()))
+ to_chat(user, "Too far away.")
+ user.unset_machine()
+ user << browse(null, "window=ai_slipper")
+ return
user.set_machine(src)
- var/loc = src.loc
+ var/loc = loc
if(istype(loc, /turf))
loc = loc:loc
if(!istype(loc, /area))
@@ -72,39 +75,37 @@
var/area/area = loc
var/t = "AI Liquid Dispenser ([area.name])
"
- if(src.locked && (!istype(user, /mob/living/silicon)))
+ if(locked && (!issilicon(user) || !user.can_admin_interact()))
t += "(Swipe ID card to unlock control panel.)
"
else
- t += text("Dispenser [] - []?
\n", src.disabled?"deactivated":"activated", src.disabled?"Enable":"Disable")
+ t += text("Dispenser [] - []?
\n", disabled ? "deactivated" : "activated", disabled ? "Enable" : "Disable")
t += text("Uses Left: [uses]. Activate the dispenser?
\n")
user << browse(t, "window=computer;size=575x450")
onclose(user, "computer")
- return
/obj/machinery/ai_slipper/Topic(href, href_list)
if(..())
return 1
- if(src.locked)
+ if(locked)
if(!istype(usr, /mob/living/silicon))
to_chat(usr, "Control panel is locked!")
return
if(href_list["toggleOn"])
- src.disabled = !src.disabled
- icon_state = src.disabled? "motion0":"motion3"
+ disabled = !disabled
+ icon_state = disabled? "motion0":"motion3"
if(href_list["toggleUse"])
if(cooldown_on || disabled)
return
else
- new /obj/effect/effect/foam(src.loc)
- src.uses--
+ new /obj/effect/effect/foam(loc)
+ uses--
cooldown_on = 1
cooldown_time = world.timeofday + 100
slip_process()
return
- src.attack_hand(usr)
- return
+ attack_hand(usr)
/obj/machinery/ai_slipper/proc/slip_process()
while(cooldown_time - world.timeofday > 0)
@@ -120,5 +121,4 @@
return
if(uses >= 0)
cooldown_on = 0
- src.power_change()
- return
\ No newline at end of file
+ power_change()
\ No newline at end of file
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index e28bf145b74..b2d934dc9a2 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -56,7 +56,7 @@
return attack_hand(user)
/obj/machinery/driver_button/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob, params)
@@ -169,7 +169,7 @@
return attack_hand(user)
/obj/machinery/ignition_switch/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user, params)
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index e9e4a40e465..a3eeccb94a8 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -64,7 +64,7 @@
playsound(loc, "sparks", 100, 1)
/obj/machinery/door_control/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/door_control/attack_hand(mob/user as mob)
@@ -72,7 +72,7 @@
if(stat & (NOPOWER|BROKEN))
return
- if(!allowed(user) && (wires & 1) && !user.can_admin_interact())
+ if(!allowed(user) && (wires & 1) && !user.can_advanced_admin_interact())
to_chat(user, "Access Denied.")
flick("doorctrl-denied",src)
return
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index f95612e6b89..79a9d02e9ea 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -189,7 +189,7 @@
var/alarmed = A.air_doors_activated || A.fire
var/access_granted = 0
- if(isAI(user) || isrobot(user) || user.can_admin_interact())
+ if(isAI(user) || isrobot(user) || user.can_advanced_admin_interact())
access_granted = 1
if(access_granted == 1)
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 7b6752f892b..d802192a107 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -194,7 +194,7 @@
return attack_hand(user)
/obj/machinery/door/window/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0)
@@ -347,7 +347,7 @@
//don't care who they are or what they have, act as if they're NOTHING
user = null
- if(allowed(user) || user.can_admin_interact())
+ if(allowed(user) || user.can_advanced_admin_interact())
if(density)
open()
else
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index bbc22aa8b2a..2cf45577183 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -48,11 +48,13 @@
user.visible_message("\red [user] has connected the [src]'s flashbulb!", "\red You connect the [src]'s flashbulb!")
//Let the AI trigger them directly.
-/obj/machinery/flasher/attack_ai()
+/obj/machinery/flasher/attack_ai(mob/user)
if(anchored)
return flash()
- else
- return
+
+/obj/machinery/flasher/attack_ghost(mob/user)
+ if(anchored && user.can_advanced_admin_interact())
+ return flash()
/obj/machinery/flasher/proc/flash()
if(!(powered()))
@@ -123,7 +125,7 @@
return attack_hand(user)
/obj/machinery/flasher_button/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/flasher_button/attackby(obj/item/weapon/W, mob/user as mob, params)
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 8876bc83514..330fc5e1104 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -73,7 +73,7 @@
to_chat(user, "A light switch. It is [on? "on" : "off"].")
/obj/machinery/light_switch/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/light_switch/attack_hand(mob/user)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 9d9dffba39e..be81c338c08 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -484,11 +484,11 @@
var/id = 1
/obj/machinery/crema_switch/attack_ghost(mob/user)
- if(user.can_admin_interact())
+ if(user.can_advanced_admin_interact())
return attack_hand(user)
/obj/machinery/crema_switch/attack_hand(mob/user)
- if(allowed(usr) || user.can_admin_interact())
+ if(allowed(usr) || user.can_advanced_admin_interact())
for(var/obj/structure/crematorium/C in world)
if(C.id == id)
if(!C.cremating)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 878e17407c7..ab2b6beb9e7 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -77,7 +77,7 @@ var/list/admin_verbs_admin = list(
/client/proc/reset_all_tcs, /*resets all telecomms scripts*/
/client/proc/cmd_admin_check_player_exp, /* shows players by playtime */
/client/proc/toggle_mentor_chat,
- /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/
+ /client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -984,15 +984,15 @@ var/list/admin_verbs_snpc = list(
verbs += /client/proc/show_snpc_verbs
to_chat(src, "SNPC verbs have been toggled off.")
-/client/proc/toggle_AI_interact()
- set name = "Toggle Admin Observer Interaction"
+/client/proc/toggle_advanced_interaction()
+ set name = "Toggle Advanced Admin Interaction"
set category = "Admin"
- set desc = "Allows you to interact with most machines, computers and other objects while observing."
+ set desc = "Allows you to interact with atoms such as buttons and doors, on top of regular machinery interaction."
if(!check_rights(R_ADMIN))
return
- observer_interact = !observer_interact
+ advanced_admin_interaction = !advanced_admin_interaction
- log_admin("[key_name(usr)] has [observer_interact ? "activated" : "deactivated"] their admin observer interaction.")
- message_admins("[key_name_admin(usr)] has [observer_interact ? "activated" : "deactivated"] their admin observer interaction.")
+ log_admin("[key_name(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.")
+ message_admins("[key_name_admin(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.")
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 76aca64bfc0..bc4a9d83641 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -94,5 +94,5 @@
// Donator stuff.
var/donator_level = DONATOR_LEVEL_NONE
- // If set to true, this client can interact with most machines/computers/objects while observing (requires R_ADMIN as well)
- var/observer_interact = TRUE
\ No newline at end of file
+ // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction
+ var/advanced_admin_interaction = FALSE
\ No newline at end of file
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 0e4cc50ce08..56c5e33ee1c 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -645,10 +645,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.images -= ghostimage //remove ourself
/mob/proc/can_admin_interact()
- return 0
+ return FALSE
+
+/mob/proc/can_advanced_admin_interact()
+ return FALSE
/mob/dead/observer/can_admin_interact()
- return client && client.observer_interact && check_rights(R_ADMIN, 0, src)
+ return check_rights(R_ADMIN, 0, src)
+
+/mob/dead/observer/can_advanced_admin_interact()
+ if(!can_admin_interact())
+ return FALSE
+
+ if(client && client.advanced_admin_interaction)
+ return TRUE
+
+ return FALSE
//this is a mob verb instead of atom for performance reasons
//see /mob/verb/examinate() in mob.dm for more info