diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index e35e4a6eb22..d2d0be60f37 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -69,19 +69,22 @@ set category = "OOC" if(say_disabled) //This is here to try to identify lag problems - usr << "\red Speech is currently admin-disabled." + usr << "Speech is currently admin-disabled." + return + + if(!mob) return - if(!mob) return if(IsGuestKey(key)) src << "Guests may not use OOC." return msg = sanitize(msg) - if(!msg) return + if(!msg) + return if(!(prefs.toggles & CHAT_LOOC)) - src << "\red You have LOOC muted." + src << "You have LOOC muted." return if(!holder) @@ -94,7 +97,7 @@ if(prefs.muted & MUTE_OOC) src << "You cannot use OOC (muted)." return - if(handle_spam_prevention(msg,MUTE_OOC)) + if(handle_spam_prevention(msg, MUTE_OOC)) return if(findtext(msg, "byond://")) src << "Advertising other servers is not allowed." @@ -104,26 +107,48 @@ log_ooc("(LOCAL) [mob.name]/[key] : [msg]") - var/mob/source = src.mob + var/mob/source = mob.get_looc_source() var/list/heard = get_mobs_or_objects_in_view(7, source, 1, 0) - var/display_name = source.key + var/display_name = key if(holder && holder.fakekey) display_name = holder.fakekey - if(source.stat != DEAD) - display_name = source.name + if(mob.stat != DEAD) + display_name = mob.name - var/prefix - var/admin_stuff for(var/client/target in clients) if(target.prefs.toggles & CHAT_LOOC) - admin_stuff = "" + var/prefix = "" + var/admin_stuff = "" + var/send = 0 + if(target in admins) - prefix = "(R)" - admin_stuff += "/([source.key])" - if(target != source.client) + admin_stuff += "/([key])" + if(target != src) admin_stuff += "(JMP)" + if(target.mob in heard) - prefix = "" - if((target.mob in heard) || (target in admins)) + send = 1 + if(isAI(target.mob)) + prefix = "(Core) " + + else if(isAI(target.mob)) // Special case + var/mob/living/silicon/ai/A = target.mob + if(A.eyeobj in hearers(7, source)) + send = 1 + prefix = "(Eye) " + + if(!send && (target in admins)) + send = 1 + prefix = "(R)" + + if(send) target << "" + create_text_tag("looc", "LOOC:", target) + " [prefix][display_name][admin_stuff]: [msg]" + +/mob/proc/get_looc_source() + return src + +/mob/living/silicon/ai/get_looc_source() + if(eyeobj) + return eyeobj + return src diff --git a/html/changelogs/Kelenius-ofAIAndLooc.yml b/html/changelogs/Kelenius-ofAIAndLooc.yml new file mode 100644 index 00000000000..66603340028 --- /dev/null +++ b/html/changelogs/Kelenius-ofAIAndLooc.yml @@ -0,0 +1,4 @@ +author: Kelenius +delete-after: True +changes: + - tweak: "AI now hears LOOC both around its eye and its core, and speaks in LOOC around its eye. Keep in mind that you won't hear and won't be heard if there is a wall between your eye and the target."