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