diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 83a2de04e79..789597ad0f1 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -2042,6 +2042,7 @@ var/list/the_station_areas = list ( /area/hallway/primary/central, /area/bridge, /area/crew_quarters, + /area/civilian, /area/holodeck, /area/library, /area/chapel, @@ -2052,6 +2053,7 @@ var/list/the_station_areas = list ( /area/teleporter, /area/medical, /area/security, + /area/prison, /area/quartermaster, /area/janitor, /area/hydroponics, diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 11c9a320432..a0c4f7fe96c 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -69,6 +69,8 @@ var/scheduledEvent = null /datum/event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! + var/area/candidate = null + var/list/safe_areas = list( /area/turret_protected/ai, /area/turret_protected/ai_upload, @@ -93,6 +95,21 @@ var/scheduledEvent = null /area/engine/break_room, /area/engine/chiefs_office) - //Need to locate() as it's just a list of paths. - return locate(pick((the_station_areas - safe_areas) + danger_areas)) + var/list/event_areas = list() + + for (var/areapath in the_station_areas) + event_areas += typesof(areapath) + for (var/areapath in safe_areas) + event_areas -= typesof(areapath) + for (var/areapath in danger_areas) + event_areas += typesof(areapath) + + while (event_areas.len > 0) + var/list/event_turfs = null + candidate = locate(pick_n_take(event_areas)) + event_turfs = get_area_turfs(candidate) + if (event_turfs.len > 0) + break + + return candidate