diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 86675a50f19..8e587c2ad04 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -173,6 +173,7 @@ GLOBAL_LIST_EMPTY(event_last_fired) //new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100)), //new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)), new /datum/event_meta(EVENT_LEVEL_MODERATE, /datum/event/apc_short, 12), + new /datum/event_meta(EVENT_LEVEL_MODERATE, /datum/event/grid_check, 12), new /datum/event_meta(EVENT_LEVEL_MODERATE, /datum/event/electrical_storm, 12), new /datum/event_meta(EVENT_LEVEL_MODERATE, /datum/event/radiation_storm, 10, TRUE), new /datum/event_meta(EVENT_LEVEL_MODERATE, /datum/event/spider_infestation, 10, TRUE), diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index b9842d995c7..2a2649918eb 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -23,11 +23,13 @@ /datum/event/tear, /datum/event/tear/honk, /datum/event/traders, + /datum/event/vent_clog, /datum/event/disease_outbreak, /datum/event/vent_clog, /datum/event/disposals_clog, /datum/event/demon_incursion, /datum/event/shuttle_loan, + /datum/event/grid_check, ) + subtypesof(/datum/event/anomaly) + subtypesof(/datum/event/carp_migration) var/datum/event/working_event diff --git a/code/modules/events/grid_check_event.dm b/code/modules/events/grid_check_event.dm new file mode 100644 index 00000000000..8513366f399 --- /dev/null +++ b/code/modules/events/grid_check_event.dm @@ -0,0 +1,36 @@ +/datum/event/grid_check + name = "Grid Check" + nominal_severity = EVENT_LEVEL_MODERATE + endWhen = 60 // In process ticks + +/datum/event/grid_check/announce(false_alarm) + GLOB.minor_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Electrical Grid Check") + return + +/datum/event/grid_check/start() + . = ..() + addtimer(CALLBACK(src, PROC_REF(toggle_power)), rand(10 SECONDS, 15 SECONDS)) + +/datum/event/grid_check/proc/toggle_power(state = TRUE) + var/list/skipped_areas_apc = list( + /area/station/turret_protected/ai, + /area/station/command/office/ce) + skipped_areas_apc += subtypesof(/area/station/engineering) + skipped_areas_apc += subtypesof(/area/station/telecomms) + for(var/obj/machinery/power/apc/power_controller in GLOB.apcs) + var/area/current_area = get_area(power_controller) + if((current_area.type in skipped_areas_apc) || !is_station_level(power_controller.z)) + continue + if(power_controller.operating == state) + power_controller.toggle_breaker() + for(var/mob/M in GLOB.player_list) + var/turf/T = get_turf(M) + if(!M.client || !is_station_level(T.z) || isnewplayer(M)) + continue + if(state) + SEND_SOUND(M, sound('sound/effects/powerloss.ogg')) + else + SEND_SOUND(M, sound('sound/mecha/powerup.ogg')) + + if(state) + addtimer(CALLBACK(src, PROC_REF(toggle_power), FALSE), rand(30 SECONDS, 120 SECONDS)) diff --git a/paradise.dme b/paradise.dme index e06738905c0..753b92835ee 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2271,6 +2271,7 @@ #include "code\modules\events\fake_virus.dm" #include "code\modules\events\false_alarm.dm" #include "code\modules\events\floorcluwne_event.dm" +#include "code\modules\events\grid_check_event.dm" #include "code\modules\events\immovable_rod.dm" #include "code\modules\events\infestation.dm" #include "code\modules\events\ion_storm.dm"