From 66e81e7fdab87118ac5d04ed59303f8b0e3a34a4 Mon Sep 17 00:00:00 2001 From: DeltaFire Date: Mon, 11 Oct 2021 19:52:30 +0200 Subject: [PATCH 1/2] asay ping time --- code/__DEFINES/admin.dm | 3 +++ code/modules/admin/verbs/adminhelp.dm | 29 ++++++++++++++++++++++++++ code/modules/admin/verbs/adminsay.dm | 13 ++++++++++++ sound/misc/bloop.ogg | Bin 0 -> 8078 bytes 4 files changed, 45 insertions(+) create mode 100644 sound/misc/bloop.ogg diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index bd6e549d15..b485a5fa29 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -95,3 +95,6 @@ #define STICKYBAN_DB_CACHE_TIME 10 SECONDS #define STICKYBAN_ROGUE_CHECK_TIME 5 + +/// for asay pings, this is the index in the return list for [/proc/check_admin_pings] that contains the message modified with underlines for the spotted names +#define ADMINSAY_PING_UNDERLINE_NAME_INDEX "!underlined_names" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index b026847702..d6d6999196 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -732,3 +732,32 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return founds return msg + +/** + * Checks a given message to see if any of the words contain an active admin's ckey with an @ before it + * + * Returns nothing if no pings are found, otherwise returns an associative list with ckey -> client + * Also modifies msg to underline the pings, then stores them in the key [ADMINSAY_PING_UNDERLINE_NAME_INDEX] for returning + * + * Arguments: + * * msg - the message being scanned + */ +/proc/check_admin_pings(msg) + //explode the input msg into a list + var/list/msglist = splittext(msg, " ") + var/list/admins_to_ping = list() + + var/i = 0 + for(var/word in msglist) + i++ + if(word[1] != "@") + continue + var/ckey_check = lowertext(copytext(word, 2)) + var/client/client_check = GLOB.directory[ckey_check] + if(client_check?.holder) + msglist[i] = "[word]" + admins_to_ping[ckey_check] = client_check + + if(length(admins_to_ping)) + admins_to_ping[ADMINSAY_PING_UNDERLINE_NAME_INDEX] = jointext(msglist, " ") // without tuples, we must make do! + return admins_to_ping diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 66653020d4..fdd1e8dcad 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -8,6 +8,19 @@ msg = copytext_char(sanitize(msg), 1, MAX_MESSAGE_LEN) if(!msg) return + + var/list/pinged_admin_clients = check_admin_pings(msg) + if(length(pinged_admin_clients) && pinged_admin_clients[ADMINSAY_PING_UNDERLINE_NAME_INDEX]) + msg = pinged_admin_clients[ADMINSAY_PING_UNDERLINE_NAME_INDEX] + pinged_admin_clients -= ADMINSAY_PING_UNDERLINE_NAME_INDEX + + for(var/iter_ckey in pinged_admin_clients) + var/client/iter_admin_client = pinged_admin_clients[iter_ckey] + if(!iter_admin_client?.holder) + continue + window_flash(iter_admin_client) + SEND_SOUND(iter_admin_client.mob, sound('sound/misc/bloop.ogg')) + msg = emoji_parse(msg) mob.log_talk(msg, LOG_ASAY) diff --git a/sound/misc/bloop.ogg b/sound/misc/bloop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cfe1c24426c69a168f7cba5d1b03a25d74aa382a GIT binary patch literal 8078 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 Date: Mon, 11 Oct 2021 20:32:00 +0200 Subject: [PATCH 2/2] safety --- code/modules/admin/verbs/adminhelp.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index d6d6999196..78be1c9ea5 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -750,6 +750,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/i = 0 for(var/word in msglist) i++ + if(!length(word)) + continue if(word[1] != "@") continue var/ckey_check = lowertext(copytext(word, 2))