From 3c800cf213caced41bef8bdeb635a03f2056bd45 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 6 Jun 2024 06:56:30 +0200 Subject: [PATCH] [MIRROR] Admins can reroll random events into something else (#27855) * Admins can reroll random events into something else * Fixing Conflicts --------- Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> --- code/controllers/subsystem/events.dm | 15 +++++--- code/modules/events/_event.dm | 55 ++++++++++++---------------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 23b36eb994e..e030ccff623 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -67,8 +67,13 @@ SUBSYSTEM_DEF(events) /datum/controller/subsystem/events/proc/reschedule() scheduled = world.time + rand(frequency_lower, max(frequency_lower,frequency_upper)) -//selects a random event based on whether it can occur and it's 'weight'(probability) -/datum/controller/subsystem/events/proc/spawnEvent(threat_override = FALSE) //SKYRAT EDIT CHANGE +/** + * Selects a random event based on whether it can occur and it's 'weight'(probability) + * + * Arguments: + * * excluded_event - The event path we will be foregoing, if present. + */ +/datum/controller/subsystem/events/proc/spawnEvent(datum/round_event_control/excluded_event) set waitfor = FALSE //for the admin prompt if(!CONFIG_GET(flag/allow_random_events)) return @@ -79,12 +84,10 @@ SUBSYSTEM_DEF(events) var/list/event_roster = list() for(var/datum/round_event_control/event_to_check in control) + if(excluded_event && event_to_check.typepath == excluded_event.typepath) //If an event has been rerolled we won't just roll the same one again. + continue if(!event_to_check.can_spawn_event(players_amt)) continue - //SKYRAT EDIT ADDITION - if(threat_override && !event_to_check.alert_observers) - continue - //SKYRAT EDIT END if(event_to_check.weight < 0) //for round-start events etc. var/res = TriggerEvent(event_to_check) if(res == EVENT_INTERRUPTED) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 39865fa956d..adba9d55c2c 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -1,4 +1,4 @@ -#define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (3 MINUTES) //SKYRAT EDIT CHANGE +#define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (3 MINUTES) // SKYRAT EDIT CHANGE - ORIGINAL: #define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (10 SECONDS) //this singleton datum is used by the events controller to dictate how it selects events /datum/round_event_control @@ -102,38 +102,30 @@ triggering = TRUE // We sleep HERE, in pre-event setup (because there's no sense doing it in run_event() since the event is already running!) for the given amount of time to make an admin has enough time to cancel an event un-fitting of the present round. - // SKYRAT EDIT REMOVAL BEGIN - Event notification - /** if(alert_observers) - message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL | SOMETHING ELSE)") //SKYRAT EDIT CHANGE + // message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL) (SOMETHING ELSE)") // SKYRAT EDIT REMOVAL sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME) var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE) if(!can_spawn_event(players_amt)) - message_admins("Second pre-condition check for [name] failed, skipping...") + message_admins("Second pre-condition check for [name] failed, rerolling...") + SSevents.spawnEvent(excluded_event = src) return EVENT_INTERRUPTED - */ - // SKYRAT EDIT REMOVAL END - Event notification - // SKYRAT EDIT ADDITION BEGIN - Event notification - message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (\ - CANCEL | \ - SOMETHING ELSE)") - for(var/client/staff as anything in GLOB.admins) - if(staff?.prefs.read_preference(/datum/preference/toggle/comms_notification)) - SEND_SOUND(staff, sound('sound/misc/server-ready.ogg')) - sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5) - - if(triggering) - message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5)]: [name]. (\ - CANCEL | \ - SOMETHING ELSE)") + // SKYRAT EDIT ADDITION BEGIN - Event notification Makes an attention-grabbing sound, gives admins two notifications spread over RANDOM_EVENT_ADMIN_INTERVENTION_TIME instead of just the one. + message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (\ + CANCEL | \ + SOMETHING ELSE") + for(var/client/staff as anything in GLOB.admins) + if(staff?.prefs.read_preference(/datum/preference/toggle/comms_notification)) + SEND_SOUND(staff, sound('sound/misc/server-ready.ogg')) sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5) - // SKYRAT EDIT ADDITION END - Event notification - if(!triggering) - return EVENT_CANCELLED //admin cancelled - triggering = FALSE - return EVENT_READY + if(triggering) + message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5)]: [name]. (\ + CANCEL | \ + SOMETHING ELSE") + sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5) + // SKYRAT EDIT ADDITION END - Event notification /datum/round_event_control/Topic(href, href_list) ..() @@ -145,16 +137,15 @@ message_admins("[key_name_admin(usr)] cancelled event [name].") log_admin_private("[key_name(usr)] cancelled event [name].") SSblackbox.record_feedback("tally", "event_admin_cancelled", 1, typepath) - //SKYRAT EDIT ADDITION BEGIN - if(href_list["something_else"]) + if(href_list["different_event"]) if(!triggering) - to_chat(usr, span_admin("Too late! The event is running.")) + to_chat(usr, span_admin("Too late to change events now!")) return triggering = FALSE - SSevents.spawnEvent(TRUE) - message_admins("[key_name_admin(usr)] requested a new event be spawned instead of [name].") - log_admin_private("[key_name(usr)] requested a new event be spawned instead of [name].") - //SKYRAT EDIT ADDITION END + message_admins("[key_name_admin(usr)] chose to have event [name] rolled into a different event.") + log_admin_private("[key_name(usr)] rerolled event [name].") + SSblackbox.record_feedback("tally", "event_admin_rerolled", 1, typepath) + SSevents.spawnEvent(excluded_event = src) /* Runs the event