mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-21 19:19:12 +01:00
* These two are easy * !!!runlevel_flags the fact it was global.runlevel_flags.len has me a bit...iffy on this. * !!!json_cache Same as above. used global. * player_list & observer_mob_list * mechas_list * this wasn't even used * surgery_steps * event_triggers * landmarks_list * dead_mob_list * living_mob_list * ai_list * cable_list * cleanbot_reserved_turfs * listening_objects * silicon_mob_list * human_mob_list * Update global_lists.dm * joblist * mob_list * Update global_lists.dm * holomap_markers * mapping_units * mapping_beacons * hair_styles_list * facial_hair_styles_list * Update global_lists.dm * facial_hair_styles_male_list * facial_hair_styles_female_list * body_marking_styles_list * body_marking_nopersist_list * ear_styles_list * hair_styles_male_list * tail_styles_list * wing_styles_list * escape_list & rune_list & endgame_exits these were all really small * endgame_safespawns * stool_cache * emotes_by_key * random_maps & map_count * item_tf_spawnpoints * narsie_list * active_radio_jammers * unused * paikeys * pai_software_by_key & default_pai_software * plant_seed_sprites * magazine_icondata_keys & magazine_icondata_states * unused * ashtray_cache * light_type_cache * HOLIDAY!!! this one was annoying * faction stuff (red?!) * Update preferences_factions.dm * vs edit removal * backbaglist, pdachoicelist, exclude_jobs * item_digestion_blacklist, edible_tech, blacklisted_artifact_effect, selectable_footstep, hexNums, syndicate_access * string_slot_flags and hexdigits->hexNums * possible_changeling_IDs * vr_mob_tf_options * vr_mob_spawner_options * pipe_colors * vr_mob_spawner_options * common_tools * newscaster_standard_feeds * Update periodic_news.dm * changeling_fabricated_clothing * semirandom_mob_spawner_decisions * id_card_states * Update syndicate_ids.dm * overlay_cache & gear_distributed_to * more * radio_channels_by_freq * Update global_lists.dm * proper * default_medbay_channels & default_internal_channels default_internal_channels is weird as it has a mapbased proc() but that proc is never called... * valid_ringtones * move this * possible_plants * more * separate these moves xeno2chemlist from a hook to a new global list. * tube_dir_list * valid_bloodreagents & monitor_states * Junk * valid_bloodtypes * breach_burn_descriptors & burn * more!! appliance_available_recipes seems uber cursed, re-look at later * Appliance code is cursed * wide_chassis & flying_chassis * allows_eye_color * all_tooltip_styles * direction_table * gun_choices * severity_to_string * old event_viruses * description_icons * MOVE_KEY_MAPPINGS * more more * pai & robot modules * Update global_lists.dm * GEOSAMPLES Also swaps a .len to LAZYLEN() * shieldgens * reagent recipies * global ammo types * rad collector * old file and unused global * nif_look_messages * FESH * nifsoft * chamelion * the death of sortAtom * globulins * lazylen that * Update global_lists.dm * LAZY * Theese too * quick fix --------- 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 = GLOB.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
|