Ahelp and Mhelp QOL 2 (#24796)

* Consistently box mhelp/ahelp messages, change mhelp sound.

* Apply suggestions from code review

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>

---------

Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
Charlie Nolan
2024-04-12 18:35:22 +00:00
committed by GitHub
co-authored by Burzah
parent 6e8abc93f8
commit cb75108c70
6 changed files with 47 additions and 24 deletions
+2
View File
@@ -6,3 +6,5 @@
#define chat_box_notice(str) ("<div class='boxed_message notice_border'>" + str + "</div>")
#define chat_box_healthscan(str) ("<div class='boxed_message notice_border left_align_text'>" + str + "</div>")
#define chat_box_notice_thick(str) ("<div class='boxed_message notice_border thick_border'>" + str + "</div>")
#define chat_box_ahelp(str) ("<div class='boxed_message red_border'>" + str + "</div>")
#define chat_box_mhelp(str) ("<div class='boxed_message notice_border'>" + str + "</div>")
@@ -44,7 +44,7 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
/datum/controller/subsystem/tickets/mentor_tickets/message_staff(msg, prefix_type = NONE, important = FALSE)
message_mentorTicket(msg, important)
message_mentorTicket(chat_box_mhelp(msg), important)
/datum/controller/subsystem/tickets/mentor_tickets/create_other_system_ticket(datum/ticket/T)
SStickets.newTicket(get_client_by_ckey(T.client_ckey), T.first_raw_response, T.title)
@@ -139,7 +139,7 @@ SUBSYSTEM_DEF(tickets)
* msg - The raw message
* ticketNum - Which ticket number the ticket has
*/
/datum/controller/subsystem/tickets/proc/makeUrlMessage(target, msg, ticketNum)
/datum/controller/subsystem/tickets/proc/makeUrlMessage(target, msg, ticketNum, one_line = FALSE)
var/mob/M
var/key_and_name
if(istype(target, /datum/ticket))
@@ -154,13 +154,13 @@ SUBSYSTEM_DEF(tickets)
key_and_name = key_name(M, TRUE, ticket_help_type, ticket_id = ticketNum)
var/list/L = list()
L += "<span class='[ticket_help_span]'>[ticket_help_type]: </span><span class='boldnotice'>[key_and_name] "
L += "<span class='[ticket_help_span]'>[ticket_help_type]: </span><span class='boldnotice'>[key_and_name][one_line ? " " : "<br>"]</span>"
if(M)
L += "([ADMIN_QUE(M,"?")]) ([ADMIN_PP(M,"PP")]) ([ADMIN_VV(M,"VV")]) ([ADMIN_TP(M,"TP")]) ([ADMIN_SM(M,"SM")]) ([admin_jump_link(M)])"
L += "(<a href='?_src_=holder;openticket=[ticketNum][anchor_link_extra]'>TICKET</a>) "
L += "[isAI(M) ? "(<a href='?_src_=holder;adminchecklaws=[M.UID()]'>CL</a>)" : ""] (<a href='?_src_=holder;take_question=[ticketNum][anchor_link_extra]'>TAKE</a>) "
L += "(<a href='?_src_=holder;resolve=[ticketNum][anchor_link_extra]'>RESOLVE</a>) (<a href='?_src_=holder;autorespond=[ticketNum][anchor_link_extra]'>AUTO</a>) "
L += "(<a href='?_src_=holder;convert_ticket=[ticketNum][anchor_link_extra]'>CONVERT</a>) :</span> <span class='[ticket_help_span]'>[msg]</span>"
L += "(<a href='?_src_=holder;convert_ticket=[ticketNum][anchor_link_extra]'>CONVERT</a>) :</span> <span class='[ticket_help_span]'>[one_line ? " " : "<br><br>"][msg]</span>"
return L.Join()
//Open a new ticket and populate details then add to the list of open tickets
@@ -500,7 +500,7 @@ UI STUFF
for(var/T in allTickets)
ticket = T
if(ticket.ticketState == TICKET_OPEN || ticket.ticketState == TICKET_STALE)
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) [ticket.ticketState == TICKET_STALE ? "<font color='red'><b>STALE</font>" : ""] </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket)]</td></tr>"
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) [ticket.ticketState == TICKET_STALE ? "<font color='red'><b>STALE</b></font>" : ""] </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket, one_line = TRUE)]</b></td></tr>"
else
continue
else if(tab == TICKET_RESOLVED)
@@ -508,7 +508,7 @@ UI STUFF
for(var/T in allTickets)
ticket = T
if(ticket.ticketState == TICKET_RESOLVED)
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket)]</td></tr>"
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket, one_line = TRUE)]</b></td></tr>"
else
continue
else if(tab == TICKET_CLOSED)
@@ -516,7 +516,7 @@ UI STUFF
for(var/T in allTickets)
ticket = T
if(ticket.ticketState == TICKET_CLOSED)
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket)]</td></tr>"
dat += "<tr style='[trStyle]'><td style ='[tdStyleleft]'><a href='?src=[UID()];resolve=[ticket.ticketNum]'>Resolve</a><a href='?src=[UID()];details=[ticket.ticketNum]'>Details</a> <br /> #[ticket.ticketNum] ([ticket.ingame_time_opened]) </td><td style='[tdStyle]'><b>[makeUrlMessage(ticket, one_line = TRUE)]</b></td></tr>"
else
continue
@@ -549,7 +549,7 @@ UI STUFF
dat += "<h3>[T.client_ckey] / [T.mobControlled] opened this [ticket_name] at [T.ingame_time_opened] at location [T.locationSent]</h3>"
dat += "<h4>Ticket Status: [status]"
dat += "<table style='width:950px; border: 3px solid;'>"
dat += "<tr><td>[makeUrlMessage(T)]</td></tr>"
dat += "<tr><td>[makeUrlMessage(T, one_line = TRUE)]</td></tr>"
if(length(T.ticket_responses) > 1)
for(var/i in 2 to length(T.ticket_responses))
@@ -620,7 +620,7 @@ UI STUFF
msg = "<span class='admin_channel'>ADMIN TICKET: [msg]</span>"
if(TICKET_STAFF_MESSAGE_PREFIX)
msg = "<span class='adminticket'><span class='prefix'>ADMIN TICKET:</span> [msg]</span>"
message_adminTicket(msg, important)
message_adminTicket(chat_box_ahelp(msg), important)
/datum/controller/subsystem/tickets/Topic(href, href_list)
+1 -1
View File
@@ -47,7 +47,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
to_chat(C, msg, MESSAGE_TYPE_MENTORPM, confidential = TRUE)
if(important)
if(C.prefs?.sound & SOUND_MENTORHELP)
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
SEND_SOUND(C, sound('sound/machines/notif1.ogg'))
window_flash(C)
/proc/admin_ban_mobsearch(mob/M, ckey_to_find, mob/admin_to_notify)
+4 -2
View File
@@ -32,13 +32,15 @@
T = SSmentor_tickets.newHelpRequest(src, msg) // Mhelp
span_type = "mentorhelp"
message_type = MESSAGE_TYPE_MENTORPM
//show it to the person mentorhelping too
to_chat(src, chat_box_mhelp("<span class='[span_type]'><b>[selected_type]</b><br><br>[msg]</span>"), message_type, confidential = TRUE)
else
T = SStickets.newHelpRequest(src, msg) // Ahelp
span_type = "adminhelp"
message_type = MESSAGE_TYPE_ADMINPM
//show it to the person adminhelping too
to_chat(src, chat_box_ahelp("<span class='[span_type]'><b>[selected_type]</b><br><br>[msg]</span>"), message_type, confidential = TRUE)
//show it to the person adminhelping too
to_chat(src, "<span class='[span_type]'>[selected_type]</b>: [msg]</span>", message_type, confidential = TRUE)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Adminhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
switch(selected_type)
+31 -12
View File
@@ -166,23 +166,42 @@
adminhelp(reply) //sender has left, adminhelp instead
return
var/emoji_msg = "<span class='emoji_enabled'>[msg]</span>"
recieve_message = chat_box_red("<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type] [C.holder ? key_name(src, TRUE, type, ticket_id = ticket_id) : key_name_hidden(src, TRUE, type, ticket_id = ticket_id)]</b>:<br><br>[emoji_msg]</span>")
to_chat(C, recieve_message)
var/ping_link = check_rights(R_ADMIN, 0, mob) ? "(<a href='?src=[pm_tracker.UID()];ping=[C.key]'>PING</a>)" : ""
var/window_link = "(<a href='?src=[pm_tracker.UID()];newtitle=[C.key]'>WINDOW</a>)"
var/alert_link = check_rights(R_ADMIN, FALSE, mob) ? " (<a href='?src=[pm_tracker.UID()];adminalert=[C.mob.UID()]'>ALERT</a>)" : ""
to_chat(src, "<span class='[send_span]'>[send_pm_type][type] to-<b>[holder ? key_name(C, TRUE, type, ticket_id = ticket_id) : key_name_hidden(C, TRUE, type, ticket_id = ticket_id)]</b>: [emoji_msg]</span> [ping_link] [window_link][alert_link]", message_type)
var/alert_link = check_rights(R_ADMIN, FALSE, mob) ? "(<a href='?src=[pm_tracker.UID()];adminalert=[C.mob.UID()]'>ALERT</a>)" : ""
if(ticket_id != -1)
if(message_type == MESSAGE_TYPE_MENTORPM)
window_link = "(<a href='?_src_=holder;openticket=[ticket_id];is_mhelp=1'>TICKET</a>)"
else
window_link = "(<a href='?_src_=holder;openticket=[ticket_id]'>TICKET</a>)"
/*if(holder && !C.holder)
C.last_pm_recieved = world.time
C.ckey_last_pm = ckey*/
var/emoji_msg = "<span class='emoji_enabled'>[msg]</span>"
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type] [C.holder ? key_name(src, TRUE, type, ticket_id = ticket_id) : key_name_hidden(src, TRUE, type, ticket_id = ticket_id)]</b>:<br><br>[emoji_msg][C.holder ? "<br>[ping_link] [window_link] [alert_link]" : ""]</span>"
if(message_type == MESSAGE_TYPE_MENTORPM)
recieve_message = chat_box_mhelp(recieve_message)
else
recieve_message = chat_box_ahelp(recieve_message)
to_chat(C, recieve_message)
var/send_message = "<span class='[send_span]'>[send_pm_type][type] to-<b>[holder ? key_name(C, TRUE, type, ticket_id = ticket_id) : key_name_hidden(C, TRUE, type, ticket_id = ticket_id)]</b>:<br><br>[emoji_msg]</span><br>[ping_link] [window_link] [alert_link]"
if(message_type == MESSAGE_TYPE_MENTORPM)
send_message = chat_box_mhelp(send_message)
else
send_message = chat_box_ahelp(send_message)
to_chat(src, send_message)
var/third_party_message
if(message_type == MESSAGE_TYPE_MENTORPM)
third_party_message = chat_box_mhelp("<span class='mentorhelp'>[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]-&gt;[key_name(C, TRUE, type, ticket_id = ticket_id)]:<br><br>[emoji_msg]<br>[ping_link] [window_link] [alert_link]</span>")
else
third_party_message = chat_box_ahelp("<span class='adminhelp'>[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]-&gt;[key_name(C, TRUE, type, ticket_id = ticket_id)]:<br><br>[emoji_msg]<br>[ping_link] [window_link] [alert_link]</span>")
//play the recieving admin the adminhelp sound (if they have them enabled)
//non-admins always hear the sound, as they cannot toggle it
if((!C.holder) || (C.prefs.sound & SOUND_ADMINHELP))
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
if(message_type == MESSAGE_TYPE_MENTORPM)
SEND_SOUND(C, sound('sound/machines/notif1.ogg'))
else
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg'))
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
//we don't use message_admins here because the sender/receiver might get it too
@@ -193,10 +212,10 @@
if(X.key != key && X.key != C.key)
if(message_type == MESSAGE_TYPE_MENTORPM)
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]-&gt;[key_name(C, TRUE, type, ticket_id = ticket_id)]: [emoji_msg]</span>", type = message_type)
to_chat(X, third_party_message)
else
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, TRUE, type, ticket_id = ticket_id)]-&gt;[key_name(C, TRUE, type, ticket_id = ticket_id)]: [emoji_msg]</span>", type = message_type)
to_chat(X, third_party_message)
//Check if the mob being PM'd has any open tickets.
var/list/tickets = tickets_system.checkForTicket(C, ticket_id)