From 7d8ac460ee2692d693f311fd4e32919132d6e379 Mon Sep 17 00:00:00 2001 From: Belaya Date: Thu, 8 May 2025 11:29:49 -0500 Subject: [PATCH] Ghosts/Observers/Players in lockers and containers can hear and speak on looc --- code/modules/client/verbs/looc.dm | 53 ++++++++++++++----------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm index e6e62280e2..e6fad08971 100644 --- a/code/modules/client/verbs/looc.dm +++ b/code/modules/client/verbs/looc.dm @@ -37,12 +37,13 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC") to_chat(src, "Advertising other servers is not allowed.") log_admin("[key_name(src)] has attempted to advertise in LOOC: [msg]") return - if(mob.stat) - to_chat(src, "You cannot use LOOC while unconscious or dead.") - return - if(isdead(mob)) - to_chat(src, "You cannot use LOOC while ghosting.") - return + //if(mob.stat) + // to_chat(src, "You cannot use LOOC while unconscious or dead.") + // return + //if(isdead(mob)) + // to_chat(src, "You cannot use LOOC while ghosting.") + // return + //GS13 - removed LOOC limits for ghosts (paraphrased from old code) if(HAS_TRAIT(mob, TRAIT_LOOC_MUTE)) to_chat(src, "You cannot use LOOC right now.") return @@ -52,29 +53,21 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC") mob.log_talk(msg,LOG_OOC, tag="LOOC") - var/list/heard = get_hearers_in_view(7, get_top_level_mob(src.mob)) - for(var/mob/M in heard) - if(!M.client) + // GS13 - LOOC tweaks - Observers, mobs in containers can properly hear LOOC + // Search everything in the view for anything that might be a mob, or contain a mob. + var/list/client/targets = list() + var/list/turf/in_view = list() + for(var/turf/viewed_turf in view(get_turf(mob))) + in_view[viewed_turf] = TRUE + for(var/client/client in GLOB.clients) + if(!client.mob || !(client.prefs.toggles & CHAT_OOC) || (client in GLOB.admins)) continue - var/client/C = M.client - if (C in GLOB.admins) - continue //they are handled after that + if(in_view[get_turf(client.mob)]) + targets |= client + to_chat(client, "LOOC: [src.mob.name]: [msg]") - if (isobserver(M)) - continue //Also handled later. - - if(C.prefs.chat_toggles & CHAT_OOC) - if(GLOB.LOOC_COLOR) - to_chat(C, "LOOC: [src.mob.name]: [msg]") - else - to_chat(C, "LOOC: [src.mob.name]: [msg]") - - for(var/client/C in GLOB.admins) - if(C.prefs.chat_toggles & CHAT_OOC) - var/prefix = "(R)LOOC" - if (C.mob in heard) - prefix = "LOOC" - if(GLOB.LOOC_COLOR) - to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]") - else - to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]") + for(var/client/client in GLOB.admins) + if(!(client.prefs.toggles & CHAT_OOC)) + continue + var/prefix = "(R)LOOC" + to_chat(client, "[prefix]: [ADMIN_LOOKUPFLW(usr)]: [msg]", avoid_highlighting = (client == src))