diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index cbd29cd4218..a30e980770b 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -13,6 +13,7 @@ #define span_alertwarning(str) ("" + str + "") #define span_alien(str) ("" + str + "") #define span_announce(str) ("" + str + "") +#define span_announcement_header(str) ("" + str + "") #define span_average(str) ("" + str + "") @@ -70,6 +71,7 @@ #define span_interface(str) ("" + str + "") #define span_linkify(str) ("" + str + "") #define span_looc(str) ("" + str + "") +#define span_major_announcement_text(str) ("" + str + "") #define span_medal(str) ("" + str + "") #define span_medradio(str) ("" + str + "") #define span_memo(str) ("" + str + "") diff --git a/code/__HELPERS/announcements.dm b/code/__HELPERS/announcements.dm new file mode 100644 index 00000000000..d0deab12e99 --- /dev/null +++ b/code/__HELPERS/announcements.dm @@ -0,0 +1,76 @@ +/** + * Sends a div formatted chat box announcement + * + * Formatted like: + * + * " Server Announcement " (or sender_override) + * + * " Title " + * + * " Text " + * + * Arguments + * * text - required, the text to announce + * * title - optional, the title of the announcement. + * * players - optional, a list of all players to send the message to. defaults to the entire world + * * play_sound - if TRUE, play a sound with the announcement (based on player option) + * * sound_override - optional, override the default announcement sound + * * sender_override - optional, modifies the sender of the announcement + * * encode_title - if TRUE, the title will be HTML encoded + * * encode_text - if TRUE, the text will be HTML encoded + * * color_override - optional, set a color for the announcement box + */ + +/proc/send_formatted_announcement( + text, + title = "", + players, + play_sound = TRUE, + sound_override = 'sound/ai/default/attention.ogg', + sender_override = "Server Admin Announcement", + encode_title = TRUE, + encode_text = TRUE, + color_override = "grey", +) + if(isnull(text)) + return + + var/list/announcement_strings = list() + + if(encode_title && title && length(title) > 0) + title = html_encode(title) + if(encode_text) + text = html_encode(text) + if(!length(text)) + return + + announcement_strings += span_announcement_header(generate_unique_announcement_header(title, sender_override)) + announcement_strings += span_major_announcement_text(text) + var/finalized_announcement = create_announcement_div(jointext(announcement_strings, ""), color_override) + + if(islist(players)) + for(var/mob/target in players) + to_chat(target, finalized_announcement) + if(play_sound && target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) + SEND_SOUND(target, sound(sound_override)) + else + to_chat(world, finalized_announcement) + + if(!play_sound) + return + + for(var/mob/player in GLOB.player_list) + if(player.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) + SEND_SOUND(player, sound(sound_override)) + +/** + * Inserts a span styled message into an alert box div + * + * + * Arguments + * * message - required, the message contents + * * color - optional, set a div color other than default + */ +/proc/create_announcement_div(message, color = "default") + var/processed_message = "
[message]
" + return processed_message diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm index 6ceb61d9d6d..ebba2ed5728 100644 --- a/code/modules/admin/verbs/admin.dm +++ b/code/modules/admin/verbs/admin.dm @@ -37,7 +37,7 @@ if(message) if(!check_rights(R_SERVER,0)) message = adminscrub(message,500) - to_chat(world, "[span_adminnotice("[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:")]\n \t [message]", confidential = TRUE) + send_formatted_announcement(message, "From [usr.client.holder.fakekey ? "Administrator" : usr.key]") log_admin("Announce: [key_name(usr)] : [message]") BLACKBOX_LOG_ADMIN_VERB("Announce") diff --git a/tgstation.dme b/tgstation.dme index 5efb1a5d32d..4764eae073e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -385,6 +385,7 @@ #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\admin.dm" #include "code\__HELPERS\ai.dm" +#include "code\__HELPERS\announcements.dm" #include "code\__HELPERS\areas.dm" #include "code\__HELPERS\atmospherics.dm" #include "code\__HELPERS\atoms.dm"