mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-20 19:57:28 +01:00
61 lines
1.9 KiB
Plaintext
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")
|