From d72389576f5ac275142d79876ec0d51e12e7f3ef Mon Sep 17 00:00:00 2001 From: sebdaz Date: Fri, 22 Nov 2024 04:23:47 +0100 Subject: [PATCH] Fixes LOOC and emote for vore --- code/modules/mob/mob.dm | 29 +++++++++++++++++----- modular_hearthstone/code/interface/LOOC.dm | 6 +++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3e52dea0e..e7202169c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -207,12 +207,14 @@ GLOBAL_VAR_INIT(mobids, 1) continue //This entire if/else chain could be in two lines but isn't for readibilties sake. var/msg = message - if(M.see_invisible < invisibility)//if src is invisible to M - msg = blind_message - else if(T != loc && T != src) //if src is inside something and not a turf. - msg = blind_message -// else if(T.lighting_object && T.lighting_object.invisibility <= M.see_invisible && T.is_softly_lit()) //if it is too dark. -// msg = blind_message + /// Visible messages are shown to things which contain them and vice versa, mostly to help with vore system UX. Also - dont hide msg from self + if(!in_contents_recursive(src, M) && !in_contents_recursive(M, src) && M != src) + if(M.see_invisible < invisibility)//if src is invisible to M + msg = blind_message + else if(T != loc && T != src) //if src is inside something and not a turf. + msg = blind_message + //else if(T.lighting_object && T.lighting_object.invisibility <= M.see_invisible && T.is_softly_lit()) //if it is too dark. + // msg = blind_message if(!msg) continue M.show_message(msg, MSG_VISUAL, blind_message, MSG_AUDIBLE) @@ -221,6 +223,21 @@ GLOBAL_VAR_INIT(mobids, 1) if(log_seen) log_seen(src, null, hearers, (log_seen_msg ? log_seen_msg : message), log_seen) +/// Checks whether `thing` is somewhere inside `target` +/proc/in_contents_recursive(atom/movable/thing, atom/movable/target) + var/atom/location = thing.loc + /// Theoretically a while(TRUE) but it's an i++ to 100 for safety + for(var/i in 1 to 100) + if(isnull(location)) + break + if(isturf(location)) + break + if(location == target) + return TRUE + else + location = location.loc + return FALSE + ///Adds the functionality to self_message. /mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, runechat_message = null, log_seen = NONE, log_seen_msg = null) . = ..() diff --git a/modular_hearthstone/code/interface/LOOC.dm b/modular_hearthstone/code/interface/LOOC.dm index 0c66177d6..46308b5e7 100644 --- a/modular_hearthstone/code/interface/LOOC.dm +++ b/modular_hearthstone/code/interface/LOOC.dm @@ -50,8 +50,10 @@ mob.log_talk(msg, LOG_LOOC) var/prefix = "LOOC" - for(var/mob/M in range(7,src)) + for(var/mob/M in get_hearers_in_view(7, mob)) var/client/C = M.client + if(M == mob) + continue if(!M.client) continue if (isobserver(M)) @@ -59,4 +61,4 @@ if(C.prefs.chat_toggles & CHAT_OOC) to_chat(C, "[prefix]: [src.mob.name]: [msg]") - to_chat(usr, "[prefix]: [src.mob.name]: [msg]") \ No newline at end of file + to_chat(usr, "[prefix]: [src.mob.name]: [msg]")