From 6f098e82988e2e65093cf57420151ca34b4e5ad8 Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Mon, 30 Nov 2015 23:34:59 -0500 Subject: [PATCH] Allow ghosts to use any NanoUI interface. --- code/game/objects/objs.dm | 4 ++++ code/modules/nano/states/base.dm | 7 +++++++ code/modules/nano/states/contained.dm | 2 +- code/modules/nano/states/default.dm | 4 +--- code/modules/nano/states/notcontained.dm | 3 +++ 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0d301e9123b..031f6b802b2 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -91,6 +91,10 @@ if(!ai_in_use && !is_in_use) in_use = 0 + +/obj/attack_ghost(mob/user) + ui_interact(user) + /obj/proc/interact(mob/user) return diff --git a/code/modules/nano/states/base.dm b/code/modules/nano/states/base.dm index 3685e769560..8462b8d0881 100644 --- a/code/modules/nano/states/base.dm +++ b/code/modules/nano/states/base.dm @@ -67,6 +67,13 @@ return NANO_DISABLED return ..() +/mob/dead/observer/shared_nano_interaction(atom/movable/src_object) + if (check_rights(R_ADMIN, 0, src)) + return NANO_INTERACTIVE // Admins can interact anyway. + if(!client || get_dist(src_object, src) > client.view) + return NANO_CLOSE // Keep ghosts from opening too many NanoUIs. + return NANO_UPDATE // Ghosts can only view. + /** * public diff --git a/code/modules/nano/states/contained.dm b/code/modules/nano/states/contained.dm index 497b89ea6cf..01d2cdc0828 100644 --- a/code/modules/nano/states/contained.dm +++ b/code/modules/nano/states/contained.dm @@ -1,7 +1,7 @@ /** * NanoUI State: contained_state * - * Checks that the user is an admin, end-of-story. + * Checks that the user is inside the src_object. **/ /var/global/datum/topic_state/contained_state/contained_state = new() diff --git a/code/modules/nano/states/default.dm b/code/modules/nano/states/default.dm index bec1c91d6f9..46363059070 100644 --- a/code/modules/nano/states/default.dm +++ b/code/modules/nano/states/default.dm @@ -13,9 +13,7 @@ return NANO_CLOSE // Don't allow interaction by default. /mob/dead/observer/default_can_use_topic(atom/movable/src_object) - if (check_rights(R_ADMIN, 0, src)) - return NANO_INTERACTIVE // Admins can interact anyway. - return NANO_UPDATE // Ghosts can only view. + return shared_nano_interaction(src_object) /mob/living/default_can_use_topic(atom/movable/src_object) . = shared_nano_interaction(src_object) diff --git a/code/modules/nano/states/notcontained.dm b/code/modules/nano/states/notcontained.dm index 496aa9e353d..a2160491b03 100644 --- a/code/modules/nano/states/notcontained.dm +++ b/code/modules/nano/states/notcontained.dm @@ -14,6 +14,9 @@ /mob/proc/notcontained_can_use_topic(atom/movable/src_object) return NANO_CLOSE +/mob/dead/observer/notcontained_can_use_topic(atom/movable/src_object) + return default_can_use_topic(src_object) + /mob/living/notcontained_can_use_topic(atom/movable/src_object) if (src_object.contains(src)) return NANO_CLOSE // Close if we're inside it.