Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some LOOC/Mentor-related tweaks #16969

Merged
merged 5 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
//Used in visible_message_flags, audible_message_flags and runechat_flags
#define COMBAT_MESSAGE (1<<0)
#define EMOTE_MESSAGE (1<<1)
#define OOC_MESSAGE (1<<2)

///the area channel of the important_recursive_contents list, everything in here will be sent a signal when their last holding object changes areas
#define RECURSIVE_CONTENTS_AREA_SENSITIVE "recursive_contents_area_sensitive"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/span.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#define span_linkoff(str) ("<span class='linkoff'>" + str + "</span>")
#define span_linkon(str) ("<span class='linkon'>" + str + "</span>")
#define span_looc(str) ("<span class='looc'>" + str + "</span>")
#define span_looc_heard_staff(str) ("<span class='looc_heard_staff'>" + str + "</span>")
#define span_memo(str) ("<span class='memo'>" + str + "</span>")
#define span_memoedit(str) ("<span class='memoedit'>" + str + "</span>")
#define span_mentorsay(str) ("<span class='msay'>" + str + "</span>")
Expand Down
2 changes: 1 addition & 1 deletion code/datums/chatmessage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@
return

// Display visual above source
if(runechat_flags & (COMBAT_MESSAGE|EMOTE_MESSAGE))
if(runechat_flags & (COMBAT_MESSAGE|EMOTE_MESSAGE|OOC_MESSAGE))
new /datum/chatmessage(raw_message, speaker, src, (runechat_flags & EMOTE_MESSAGE ? list("emote", "italics") : list("italics")))
else
new /datum/chatmessage(lang_treat(speaker, message_language, raw_message, spans, null, TRUE), speaker, src, spans)
Expand Down
81 changes: 44 additions & 37 deletions code/game/verbs/ooc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -102,29 +102,28 @@
else
display_class = "otherooc"


if(CONFIG_GET(flag/allow_admin_ooccolor) && check_rights(R_COLOR, FALSE))
display_colour = prefs.ooccolor

for(var/client/C AS in GLOB.clients)
if(!(C.prefs.toggles_chat & CHAT_OOC))
for(var/client/recv_client AS in GLOB.clients)
if(!(recv_client.prefs.toggles_chat & CHAT_OOC))
continue

var/display_name = key
if(holder?.fakekey)
if(check_other_rights(C, R_ADMIN, FALSE))
if(check_other_rights(recv_client, R_ADMIN, FALSE))
display_name = "[holder.fakekey]/([key])"
else
display_name = holder.fakekey

// Admins open straight to player panel
if(check_other_rights(C, R_ADMIN, FALSE))
if(check_other_rights(recv_client, R_ADMIN, FALSE))
display_name = "<a class='hidelink' href='?_src_=holder;[HrefToken(TRUE)];playerpanel=[REF(usr)]'>[display_name]</a>"
var/avoid_highlight = C == src
var/avoid_highlight = recv_client == src
if(display_colour)
to_chat(C, "<font color='[display_colour]'>[span_ooc("<span class='prefix'>OOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)
to_chat(recv_client, "<font color='[display_colour]'>[span_ooc("<span class='prefix'>OOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)
else
to_chat(C, "<span class='[display_class]'>[span_prefix("OOC: [display_name]")]: <span class='message linkify'>[msg]</span></span>", avoid_highlighting = avoid_highlight)
to_chat(recv_client, "<span class='[display_class]'>[span_prefix("OOC: [display_name]")]: <span class='message linkify'>[msg]</span></span>", avoid_highlighting = avoid_highlight)


/client/verb/xooc_wrapper()
Expand Down Expand Up @@ -205,25 +204,25 @@
mob.log_talk(msg, LOG_XOOC)

// Send chat message to non-admins
for(var/client/C AS in GLOB.clients)
if(!(C.prefs.toggles_chat & CHAT_OOC))
for(var/client/recv_client AS in GLOB.clients)
if(!(recv_client.prefs.toggles_chat & CHAT_OOC))
continue
if(!(C.mob in GLOB.xeno_mob_list) && !(C.mob in GLOB.observer_list) || check_other_rights(C, R_ADMIN, FALSE)) // If the client is a xeno, an observer, and not an admin.
if(!(recv_client.mob in GLOB.xeno_mob_list) && !(recv_client.mob in GLOB.observer_list) || check_other_rights(recv_client, R_ADMIN, FALSE)) // If the client is a xeno, an observer, and not an admin.
continue

var/display_name = mob.name
var/display_key = (holder?.fakekey ? "Administrator" : mob.key)
if(!(mob in GLOB.xeno_mob_list) && admin) // If the verb caller is an admin and not a xeno mob, use their fakekey or key instead.
display_name = display_key

var/avoid_highlight = C == src
to_chat(C, "<font color='#6D2A6D'>[span_ooc("<span class='prefix'>XOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)
var/avoid_highlight = recv_client == src
to_chat(recv_client, "<font color='#6D2A6D'>[span_ooc("<span class='prefix'>XOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)

// Send chat message to admins
for(var/client/C AS in GLOB.admins)
if(!(C.prefs.toggles_chat & CHAT_OOC))
for(var/client/recv_staff AS in GLOB.admins)
if(!(recv_staff.prefs.toggles_chat & CHAT_OOC))
continue
if(!check_other_rights(C, R_ADMIN, FALSE)) // Check if the client is still an admin.
if(!check_other_rights(recv_staff, R_ADMIN, FALSE)) // Check if the client is still an admin.
continue

var/display_name = mob.name
Expand All @@ -236,8 +235,8 @@
else
display_name = "[holder.fakekey]/([mob.key]/[display_name])"

var/avoid_highlight = C == src
to_chat(C, "<font color='#6D2A6D'>[span_ooc("<span class='prefix'>XOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)
var/avoid_highlight = recv_staff == src
to_chat(recv_staff, "<font color='#6D2A6D'>[span_ooc("<span class='prefix'>XOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)


/client/verb/mooc_wrapper()
Expand Down Expand Up @@ -315,10 +314,10 @@
mob.log_talk(msg, LOG_MOOC)

// Send chat message to non-admins
for(var/client/C AS in GLOB.clients)
if(!(C.prefs.toggles_chat & CHAT_OOC))
for(var/client/recv_client AS in GLOB.clients)
if(!(recv_client.prefs.toggles_chat & CHAT_OOC))
continue
if(!(C.mob in GLOB.human_mob_list) && !(C.mob in GLOB.observer_list) && !(C.mob in GLOB.ai_list) || check_other_rights(C, R_ADMIN, FALSE)) // If the client is a human, an observer, and not an admin.
if(!(recv_client.mob in GLOB.human_mob_list) && !(recv_client.mob in GLOB.observer_list) && !(recv_client.mob in GLOB.ai_list) || check_other_rights(recv_client, R_ADMIN, FALSE)) // If the client is a human, an observer, and not an admin.
continue

// If the verb caller is an admin and not a human mob, use their key, or if they're stealthmode, hide their key instead.
Expand All @@ -327,14 +326,14 @@
if(!((mob in GLOB.human_mob_list) || (mob in GLOB.ai_list)) && admin) // If the verb caller is an admin and not a human mob, use their fakekey or key instead.
display_name = display_key

var/avoid_highlight = C == src
to_chat(C, "<font color='#B75800'>[span_ooc("<span class='prefix'>MOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)
var/avoid_highlight = recv_client == src
to_chat(recv_client, "<font color='#B75800'>[span_ooc("<span class='prefix'>MOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)

// Send chat message to admins
for(var/client/C AS in GLOB.admins)
if(!(C.prefs.toggles_chat & CHAT_OOC))
for(var/client/recv_staff AS in GLOB.admins)
if(!(recv_staff.prefs.toggles_chat & CHAT_OOC))
continue
if(!check_other_rights(C, R_ADMIN, FALSE)) // Check if the client is still an admin.
if(!check_other_rights(recv_staff, R_ADMIN, FALSE)) // Check if the client is still an admin.
continue

var/display_name = mob.name
Expand All @@ -347,8 +346,8 @@
else
display_name = "[holder.fakekey]/([mob.key]/[display_name])"

var/avoid_highlight = C == src
to_chat(C, "<font color='#B75800'>[span_ooc("<span class='prefix'>MOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)
var/avoid_highlight = recv_staff == src
to_chat(recv_staff, "<font color='#B75800'>[span_ooc("<span class='prefix'>MOOC: [display_name]")]: <span class='message linkify'>[msg]</span></span></font>", avoid_highlighting = avoid_highlight)


/client/verb/looc_wrapper()
Expand Down Expand Up @@ -424,21 +423,29 @@

var/message

if(admin && isobserver(mob))
if(admin && isobserver(mob)) // LOOC speaker is a ghost and an admin, make that obvious
message = span_looc("[span_prefix("LOOC:")] [usr.client.holder.fakekey ? "Administrator" : usr.client.key]: [span_message("[msg]")]")
for(var/mob/M in range(mob))
to_chat(M, message)
for(var/mob/in_range_mob in range(mob))
to_chat(in_range_mob, message)
else
message = span_looc("[span_prefix("LOOC:")] [mob.name]: [span_message("[msg]")]")
for(var/mob/M in range(mob))
to_chat(M, message)
for(var/mob/in_range_mob in range(mob))
to_chat(in_range_mob, message)
if(in_range_mob.client?.prefs?.chat_on_map)
in_range_mob.create_chat_message(mob, raw_message = "(LOOC: [msg])", runechat_flags = OOC_MESSAGE)

for(var/client/C AS in GLOB.admins)
if(!check_other_rights(C, R_ADMIN, FALSE) || C.mob == mob)
for(var/client/recv_staff AS in GLOB.admins)
if(!check_other_rights(recv_staff, R_ADMIN, FALSE) && !is_mentor(recv_staff))
continue
if(!recv_staff.prefs.hear_looc_anywhere_as_staff)
continue
if(is_mentor(recv_staff) && !isobserver(recv_staff.mob))
continue // If we are a mentor, only hear LOOC from anywhere as a ghost
if(recv_staff.mob == mob)
continue
if(C.prefs.toggles_chat & CHAT_LOOC)
to_chat(C, "<font color='#6699CC'>[span_ooc("<span class='prefix'>LOOC: [ADMIN_TPMONTY(mob)]")]: [span_message("[msg]")]</span></font>")

if(recv_staff.prefs.toggles_chat & CHAT_LOOC)
to_chat(recv_staff, span_looc_heard_staff("<span class='prefix'>[span_tooltip("You are seeing this because you are staff and have hearing LOOC from anywhere enabled.", "LOOC")]: [ADMIN_TPMONTY(mob)]: [span_message("[msg]")]"))

/client/verb/motd()
set name = "MOTD"
Expand Down
10 changes: 5 additions & 5 deletions code/modules/admin/admin_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -555,15 +555,15 @@
if(check_other_rights(C, R_ADMIN, FALSE))
to_chat(C,
type = MESSAGE_TYPE_MENTORCHAT,
html = "<span class='[color]'>[span_prefix("[holder.rank.name]:")] [ADMIN_TPMONTY(mob)]: <span class='message linkify'>[msg]</span></span>")
html = "<span class='[color]'>[span_prefix("[span_tooltip(holder.rank.name, "MENTOR:")]")] [ADMIN_TPMONTY(mob)]: <span class='message linkify'>[msg]</span></span>")
else if(is_mentor(C) && mob.stat == DEAD)
to_chat(C,
type = MESSAGE_TYPE_MENTORCHAT,
html = "<span class='[color]'>[span_prefix("[holder.rank.name]:")] [key_name_admin(src, TRUE, TRUE, FALSE)] [ADMIN_JMP(mob)] [ADMIN_FLW(mob)]: <span class='message linkify'>[msg]</span></span>")
html = "<span class='[color]'>[span_prefix("[span_tooltip(holder.rank.name, "MENTOR:")]")] [key_name_admin(src, TRUE, TRUE, FALSE)] [ADMIN_JMP(mob)] [ADMIN_FLW(mob)]: <span class='message linkify'>[msg]</span></span>")
else if(is_mentor(C))
to_chat(C,
type = MESSAGE_TYPE_MENTORCHAT,
html = "<span class='[color]'>[span_prefix("[holder.rank.name]:")] [key_name_admin(src, TRUE, FALSE, FALSE)] [ADMIN_JMP(mob)] [ADMIN_FLW(mob)]: <span class='message linkify'>[msg]</span></span>")
html = "<span class='[color]'>[span_prefix("[span_tooltip(holder.rank.name, "MENTOR:")]")] [key_name_admin(src, TRUE, FALSE, FALSE)] [ADMIN_JMP(mob)] [ADMIN_FLW(mob)]: <span class='message linkify'>[msg]</span></span>")

var/list/pinged_admin_clients = check_admin_pings(msg)
if(length(pinged_admin_clients) && pinged_admin_clients[ADMINSAY_PING_UNDERLINE_NAME_INDEX])
Expand Down Expand Up @@ -1043,13 +1043,13 @@
else if(is_mentor(src))
to_chat(recipient,
type = MESSAGE_TYPE_ADMINPM,
html = span_mentorsay("<size='4'></b>-- Mentor private message --</b></font>"))
html = span_mentorsay("<font size='4'></b>-- Mentor private message --</b></font>"))
to_chat(recipient,
type = MESSAGE_TYPE_ADMINPM,
html = span_mentorsay("[holder.rank.name] PM from- <b>[key_name(src, recipient, FALSE)]</b>: [span_linkify("[msg]")]"))
to_chat(recipient,
type = MESSAGE_TYPE_ADMINPM,
html = span_notice("<i>Click on the mentor's name to reply.</i>"))
html = span_boldnotice("<i>Click on the mentor's name to reply.</i>"))
to_chat(src,
type = MESSAGE_TYPE_ADMINPM,
html = span_notice("<b>[holder.rank.name] PM</b> to-<b>[key_name(recipient, src, TRUE)]</b>: [span_linkify("[msg]")]"))
Expand Down
2 changes: 1 addition & 1 deletion code/modules/admin/verbs/adminhelp.dm
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(!is_mentor(X))
continue
if(X.prefs.toggles_sound & SOUND_ADMINHELP)
SEND_SOUND(X, sound('sound/effects/adminhelp.ogg', channel = CHANNEL_ADMIN))
SEND_SOUND(X, sound('sound/effects/mentorhelp.ogg', channel = CHANNEL_ADMIN))
window_flash(X)
tier_cooldown = world.time + 5 SECONDS
log_admin_private("Ticket (#[id]) has been made [msg] by [key_name(usr)].")
Expand Down
3 changes: 3 additions & 0 deletions code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/fast_mc_refresh = FALSE
///When enabled, will split the 'Admin' panel into several tabs.
var/split_admin_tabs = TRUE
///When enabled, can hear LOOC from anywhere in any situation.
///Mentors may only hear LOOC from anywhere if they are a ghost.
var/hear_looc_anywhere_as_staff = TRUE

/// New TGUI Preference preview
var/map_name = "player_pref_map"
Expand Down
4 changes: 4 additions & 0 deletions code/modules/client/preferences_savefile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@
READ_FILE(S["radio_tts_flags"], radio_tts_flags)
READ_FILE(S["fast_mc_refresh"], fast_mc_refresh)
READ_FILE(S["split_admin_tabs"], split_admin_tabs)
READ_FILE(S["hear_looc_anywhere_as_staff"], hear_looc_anywhere_as_staff)

READ_FILE(S["key_bindings"], key_bindings)
READ_FILE(S["slot_draw_order"], slot_draw_order_pref)
Expand Down Expand Up @@ -265,6 +266,7 @@

fast_mc_refresh = sanitize_integer(fast_mc_refresh, FALSE, TRUE, initial(fast_mc_refresh))
split_admin_tabs = sanitize_integer(split_admin_tabs, FALSE, TRUE, initial(split_admin_tabs))
hear_looc_anywhere_as_staff = sanitize_integer(hear_looc_anywhere_as_staff, FALSE, TRUE, initial(hear_looc_anywhere_as_staff))
return TRUE


Expand Down Expand Up @@ -341,6 +343,7 @@
// Admin
fast_mc_refresh = sanitize_integer(fast_mc_refresh, FALSE, TRUE, initial(fast_mc_refresh))
split_admin_tabs = sanitize_integer(split_admin_tabs, FALSE, TRUE, initial(split_admin_tabs))
hear_looc_anywhere_as_staff = sanitize_integer(hear_looc_anywhere_as_staff, FALSE, TRUE, initial(hear_looc_anywhere_as_staff))

WRITE_FILE(S["default_slot"], default_slot)
WRITE_FILE(S["lastchangelog"], lastchangelog)
Expand Down Expand Up @@ -399,6 +402,7 @@
// Admin options
WRITE_FILE(S["fast_mc_refresh"], fast_mc_refresh)
WRITE_FILE(S["split_admin_tabs"], split_admin_tabs)
WRITE_FILE(S["hear_looc_anywhere_as_staff"], hear_looc_anywhere_as_staff)

return TRUE

Expand Down
4 changes: 4 additions & 0 deletions code/modules/client/preferences_ui.dm
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
data["fullscreen_mode"] = fullscreen_mode
data["fast_mc_refresh"] = fast_mc_refresh
data["split_admin_tabs"] = split_admin_tabs
data["hear_looc_anywhere_as_staff"] = hear_looc_anywhere_as_staff
if(KEYBIND_SETTINGS)
data["is_admin"] = user.client?.holder ? TRUE : FALSE
data["key_bindings"] = list()
Expand Down Expand Up @@ -940,6 +941,9 @@
if("split_admin_tabs")
split_admin_tabs = !split_admin_tabs

if("hear_looc_anywhere_as_staff")
hear_looc_anywhere_as_staff = !hear_looc_anywhere_as_staff

else // Handle the unhandled cases
return

Expand Down
2 changes: 1 addition & 1 deletion tgui/packages/tgui-panel/chat/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export const MESSAGE_TYPES = [
name: 'OOC',
description: 'OOC messages, admin announcements and round announcements',
selector:
'.ooc, .colorooc, .looc, .adminooc, .hostooc, .projleadooc, .headcoderooc, .headminooc, .headmentorooc, .trialminooc, .candiminooc, .mentorooc, .maintainerooc, .contributorooc, .otherooc, .ooc_alert_ooc, .ooc_alert_game',
'.ooc, .colorooc, .looc, .looc_heard_staff, .adminooc, .hostooc, .projleadooc, .headcoderooc, .headminooc, .headmentorooc, .trialminooc, .candiminooc, .mentorooc, .maintainerooc, .contributorooc, .otherooc, .ooc_alert_ooc, .ooc_alert_game',
},
{
type: MESSAGE_TYPE_ADMINPM,
Expand Down
11 changes: 8 additions & 3 deletions tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,12 @@ em {
}

.looc {
color: #3a9696;
color: #d8b555;
font-weight: bold;
}

.looc_heard_staff {
color: #b09448;
font-weight: bold;
}

Expand Down Expand Up @@ -329,7 +334,7 @@ em {
font-weight: bold;
}
.mentorooc {
color: #32b632;
color: #2b9e2b;
font-weight: bold;
}
.maintainerooc {
Expand Down Expand Up @@ -1053,7 +1058,7 @@ h2.alert {

.tooltip {
font-style: italic;
border-bottom: 1px dashed #fff;
border-bottom: 2px dotted;
}

$ooc_alert_bg_colors: (
Expand Down
7 changes: 6 additions & 1 deletion tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,11 @@ em {
font-weight: bold;
}

.rlooc {
color: #507294;
font-weight: bold;
}

.hostooc {
color: #000000;
font-weight: bold;
Expand Down Expand Up @@ -1087,7 +1092,7 @@ h2.alert {

.tooltip {
font-style: italic;
border-bottom: 1px dashed #000;
border-bottom: 2px dotted;
}

$ooc_alert_bg_colors: (
Expand Down
Loading
Loading