Files

61 lines
1.9 KiB
Plaintext

/datum/event/bluespace_locker
var/obj/structure/closet/entry_point
var/obj/structure/closet/exit_point
var/list/area/excluded = list(
/area/shuttle,
/area/crew_quarters,
/area/construction,
/area/rnd/test_area,
/area/solar
)
var/list/area/pickable_areas
/datum/event/bluespace_locker/setup()
pickable_areas = get_station_areas(excluded)
for(var/i in 1 to 15)
if(entry_point)
continue
entry_point = pick_locker(pickable_areas)
for(var/i in 1 to 15)
if(exit_point)
continue
exit_point = pick_locker(pickable_areas, TRUE, TRUE)
if(entry_point && exit_point)
announceWhen = rand(10 SECONDS, 2 MINUTES)
endWhen = announceWhen + 1
return TRUE
log_game("Bluespace Locker Event: Giving up after too many failures to pick valid candidates.")
kill()
return
/datum/event/bluespace_locker/proc/pick_locker(list/areas, crates = FALSE, sealed = FALSE)
var/area/picked_area = pick(areas)
var/list/obj/structure/closet/valid_lockers = list()
for(var/obj/structure/closet/closet in picked_area)
if((istype(closet, /obj/structure/closet/crate) && crates) || (istype(closet, /obj/structure/closet/walllocker) && crates))
continue
if(!closet.can_open() && sealed)
continue
valid_lockers.Add(closet)
pickable_areas.Remove(picked_area)
if(!isemptylist(valid_lockers))
return pick(valid_lockers)
return FALSE
/datum/event/bluespace_locker/start()
if(!entry_point || !exit_point)
return
entry_point.AddComponent(/datum/component/bluespace_connection, list(exit_point))
exit_point.AddComponent(/datum/component/bluespace_connection, list(entry_point))
log_and_message_admins("Bluespace lockers linked. Entry: [get_area(entry_point)] Exit: [get_area(exit_point)]")
/datum/event/bluespace_locker/announce()
GLOB.command_announcement.Announce("Bluespace anomaly detected near [station_name()]. Possible location, [get_area(pick(entry_point, exit_point))].", "Anomaly Alert")