mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-11 17:35:05 +00:00
## About The Pull Request Admins now have a verb to add footnotes to the roundstart threat report. These messages can be signed, and multiple can be submitted at once.  (If no footnotes are submitted, the report does not display the "additional notes" section) This ALSO adds a verb to delay the roundstart threat report indefinitely, to give some extra time. If you turn it off, be sure to toggle it back on when you're done! ## Why It's Good For The Game Gives admins a way to set the tone for a shift, give IC advisory on stuff, bully the command players, or just add some flavor to the report. We already give these chuckleheads enough platforms to shitpost from. What's one more? ## Changelog 🆑 admin: new admin verb -- Command Report Footnote. Lets you attach a signed message to the roundstart command report. admin: new admin verb -- Delay Command Report. Lets you delay the roundstart command report indefinitely. /🆑
89 lines
3.8 KiB
Plaintext
89 lines
3.8 KiB
Plaintext
#define COMMUNICATION_COOLDOWN (30 SECONDS)
|
|
#define COMMUNICATION_COOLDOWN_AI (30 SECONDS)
|
|
#define COMMUNICATION_COOLDOWN_MEETING (5 MINUTES)
|
|
|
|
SUBSYSTEM_DEF(communications)
|
|
name = "Communications"
|
|
flags = SS_NO_INIT | SS_NO_FIRE
|
|
|
|
COOLDOWN_DECLARE(silicon_message_cooldown)
|
|
COOLDOWN_DECLARE(nonsilicon_message_cooldown)
|
|
COOLDOWN_DECLARE(emergency_meeting_cooldown)
|
|
|
|
/// Are we trying to send a cross-station message that contains soft-filtered words? If so, flip to TRUE to extend the time admins have to cancel the message.
|
|
var/soft_filtering = FALSE
|
|
|
|
/// A list of footnote datums, to be added to the bottom of the roundstart command report.
|
|
var/list/command_report_footnotes = list()
|
|
/// A counter of conditions that are blocking the command report from printing. Counter incremements up for every blocking condition, and de-incrememnts when it is complete.
|
|
var/block_command_report = 0
|
|
|
|
/datum/controller/subsystem/communications/proc/can_announce(mob/living/user, is_silicon)
|
|
if(is_silicon && COOLDOWN_FINISHED(src, silicon_message_cooldown))
|
|
return TRUE
|
|
else if(!is_silicon && COOLDOWN_FINISHED(src, nonsilicon_message_cooldown))
|
|
return TRUE
|
|
else
|
|
return FALSE
|
|
|
|
/datum/controller/subsystem/communications/proc/make_announcement(mob/living/user, is_silicon, input, syndicate, list/players)
|
|
if(!can_announce(user, is_silicon))
|
|
return FALSE
|
|
if(is_silicon)
|
|
minor_announce(html_decode(input),"[user.name] Announces:", players = players)
|
|
COOLDOWN_START(src, silicon_message_cooldown, COMMUNICATION_COOLDOWN_AI)
|
|
else
|
|
priority_announce(html_decode(user.treat_message(input)), null, 'sound/misc/announce.ogg', "[syndicate? "Syndicate " : ""]Captain", has_important_message = TRUE, players = players)
|
|
COOLDOWN_START(src, nonsilicon_message_cooldown, COMMUNICATION_COOLDOWN)
|
|
user.log_talk(input, LOG_SAY, tag="priority announcement")
|
|
message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.")
|
|
|
|
/**
|
|
* Check if a mob can call an emergency meeting
|
|
*
|
|
* Should only really happen during april fools.
|
|
* Checks to see that it's been at least 5 minutes since the last emergency meeting call.
|
|
* Arguments:
|
|
* * user - Mob who called the meeting
|
|
*/
|
|
/datum/controller/subsystem/communications/proc/can_make_emergency_meeting(mob/living/user)
|
|
if(!check_holidays(APRIL_FOOLS))
|
|
return FALSE
|
|
else if(COOLDOWN_FINISHED(src, emergency_meeting_cooldown))
|
|
return TRUE
|
|
else
|
|
return FALSE
|
|
|
|
/**
|
|
* Call an emergency meeting
|
|
*
|
|
* Communications subsystem wrapper for the call_emergency_meeting world proc.
|
|
* Checks to make sure the proc can be called, and handles
|
|
* relevant logging and timing. See that proc definition for more detail.
|
|
* Arguments:
|
|
* * user - Mob who called the meeting
|
|
*/
|
|
/datum/controller/subsystem/communications/proc/emergency_meeting(mob/living/user)
|
|
if(!can_make_emergency_meeting(user))
|
|
return FALSE
|
|
call_emergency_meeting(user, get_area(user))
|
|
COOLDOWN_START(src, emergency_meeting_cooldown, COMMUNICATION_COOLDOWN_MEETING)
|
|
message_admins("[ADMIN_LOOKUPFLW(user)] has called an emergency meeting.")
|
|
|
|
/datum/controller/subsystem/communications/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE)
|
|
for(var/obj/machinery/computer/communications/C in GLOB.shuttle_caller_list)
|
|
if(!(C.machine_stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
|
if(unique)
|
|
C.add_message(sending)
|
|
else //We copy the message for each console, answers and deletions won't be shared
|
|
var/datum/comm_message/M = new(sending.title,sending.content,sending.possible_answers.Copy())
|
|
C.add_message(M)
|
|
if(print)
|
|
var/obj/item/paper/printed_paper = new /obj/item/paper(C.loc)
|
|
printed_paper.name = "paper - '[sending.title]'"
|
|
printed_paper.add_raw_text(sending.content)
|
|
printed_paper.update_appearance()
|
|
|
|
#undef COMMUNICATION_COOLDOWN
|
|
#undef COMMUNICATION_COOLDOWN_AI
|