mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-30 19:41:56 +00:00
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com> Co-authored-by: Ghilker <42839747+Ghilker@users.noreply.github.com> Co-authored-by: tgstation-server <tgstation-server@tgstation13.org> Co-authored-by: gbfree <guillaumebfree@gmail.com> Co-authored-by: Sealed101 <75863639+Sealed101@users.noreply.github.com> Co-authored-by: Changelogs <action@github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com> Co-authored-by: oranges <email@oranges.net.nz> Co-authored-by: Seth Scherer <supernovaa41@gmx.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Azarak <azarak10@gmail.com> Co-authored-by: RandomGamer123 <31096837+RandomGamer123@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> Co-authored-by: ike709 <ike709@users.noreply.github.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Pepsilawn <reisenrui@gmail.com> Co-authored-by: AnturK <AnturK@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: SuperNovaa41 <supernovaa41@protonmail.com> Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: san7890 <34697715+san7890@users.noreply.github.com> Co-authored-by: MMMiracles <lolaccount1@hotmail.com> Co-authored-by: Krysonism <49783092+Krysonism@users.noreply.github.com> Co-authored-by: Aziz Chynaliev <azizonkg@gmail.com> Co-authored-by: Tastyfish <crazychris32@gmail.com> Co-authored-by: Mooshimi <85910816+Mooshimi@users.noreply.github.com> Co-authored-by: carshalash <carshalash@gmail.com> Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
81 lines
3.2 KiB
Plaintext
81 lines
3.2 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)
|
|
|
|
/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(!(SSevents.holidays && SSevents.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.machines)
|
|
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/P = new /obj/item/paper(C.loc)
|
|
P.name = "paper - '[sending.title]'"
|
|
P.info = sending.content
|
|
P.update_appearance()
|
|
|
|
#undef COMMUNICATION_COOLDOWN
|
|
#undef COMMUNICATION_COOLDOWN_AI
|