mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
111 lines
3.6 KiB
Plaintext
111 lines
3.6 KiB
Plaintext
//A system to create fun little species appreciation announcements, build primarily by following ATC as an example
|
|
//The system is simple, it just creates an appreciation message about 90 minutes into a shift, where it picks a species to appreciate for the day. Then will make infrequent reminders of this throughout the rest of the shift.
|
|
//It also has the ability to choose a random player's species to appreciate, even if it's a custom one, as long as there at least 5 human mob players.
|
|
|
|
SUBSYSTEM_DEF(appreciation)
|
|
name = "Appreciation Messages"
|
|
priority = FIRE_PRIORITY_APPRECIATE
|
|
runlevels = RUNLEVEL_GAME
|
|
wait = 2 MINUTES //This really does not need to fire very often at all
|
|
flags = SS_NO_INIT | SS_BACKGROUND
|
|
|
|
VAR_PRIVATE/next_tick = 0
|
|
VAR_PRIVATE/delay_min = 90 MINUTES //How long between announcements, minimum
|
|
VAR_PRIVATE/delay_max = 180 MINUTES //Ditto, maximum
|
|
//Shorter delays are probably too spammy, 90-180 minutes means a message every two hours or so, which shouldn't be too intrusive.
|
|
VAR_PRIVATE/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins.
|
|
VAR_PRIVATE/initial_delay = 90 MINUTES //How long to wait before sending the first message of the shift.
|
|
VAR_PRIVATE/squelched = FALSE //If appreciation messages are squelched currently
|
|
|
|
var/list/current_player_list = list()
|
|
var/list/human_list = list()
|
|
var/appreciated
|
|
var/required_humans = 5 //The minimum number of humans in the list needed to allow it to choose one of their species.
|
|
|
|
/datum/controller/subsystem/appreciation/fire(resumed = FALSE)
|
|
if(times_fired < 1)
|
|
return
|
|
if(times_fired == 1)
|
|
next_tick = world.time + initial_delay
|
|
return
|
|
|
|
if(!resumed)
|
|
if(world.time < next_tick)
|
|
return
|
|
if(squelched)
|
|
next_tick = world.time + backoff_delay
|
|
return
|
|
next_tick = world.time + rand(delay_min,delay_max)
|
|
|
|
if(appreciated)
|
|
do_appreciate()
|
|
return
|
|
|
|
current_player_list = player_list.Copy()
|
|
|
|
while(current_player_list.len)
|
|
var/mob/M = current_player_list[current_player_list.len]
|
|
current_player_list.len--
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
human_list += H
|
|
|
|
if (MC_TICK_CHECK)
|
|
return
|
|
|
|
current_player_list.Cut()
|
|
build_appreciation()
|
|
human_list.Cut()
|
|
|
|
if(squelched)
|
|
next_tick = world.time + backoff_delay
|
|
return
|
|
|
|
do_appreciate()
|
|
|
|
|
|
/datum/controller/subsystem/appreciation/proc/build_appreciation()
|
|
if(human_list.len < required_humans)
|
|
appreciated = pick(loremaster.appreciation_targets)
|
|
return
|
|
|
|
if(prob(50))
|
|
appreciated = pick(loremaster.appreciation_targets)
|
|
return
|
|
|
|
var/mob/living/carbon/human/H = pick(human_list)
|
|
if(!istype(H))
|
|
appreciated = pick(loremaster.appreciation_targets)
|
|
return
|
|
|
|
if(H.custom_species)
|
|
appreciated = H.custom_species
|
|
return
|
|
|
|
appreciated = H.species.name
|
|
|
|
|
|
/datum/controller/subsystem/appreciation/proc/do_appreciate()
|
|
var/appreciation_message = pick(loremaster.appreciation_messages)
|
|
var/terrible_factoid = pick(loremaster.terrible_factoids)
|
|
msg("Today is [appreciated] appreciation day! [terrible_factoid] [appreciation_message]")
|
|
|
|
/datum/controller/subsystem/appreciation/proc/msg(var/message,var/sender)
|
|
ASSERT(message)
|
|
GLOB.global_announcer.autosay("[message]", sender ? sender : "Cultural Awareness")
|
|
|
|
/datum/controller/subsystem/appreciation/proc/is_squelched()
|
|
return squelched
|
|
|
|
/datum/controller/subsystem/appreciation/proc/cancel_appreciation(var/yes = 1,var/silent = FALSE)
|
|
if(yes)
|
|
if(!squelched && !silent)
|
|
msg("Today's appreciation day has been suspended.")
|
|
squelched = 1
|
|
return
|
|
|
|
if(squelched && !silent)
|
|
msg("Appreciation day has been resumed, get appreciating!")
|
|
squelched = 0
|