mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-14 00:23:29 +01:00
A more strict dynamic room selection code, and fixed an incorrect area definition for the dynamic lobby south of customs.
This commit is contained in:
@@ -2,8 +2,9 @@
|
||||
name = "dynamic area"
|
||||
icon_state = "purple"
|
||||
var/match_tag = "none"
|
||||
var/width = -1
|
||||
var/height = -1
|
||||
var/match_width = -1
|
||||
var/match_height = -1
|
||||
var/enable_lights = 0
|
||||
|
||||
/area/dynamic/destination // Do not use.
|
||||
name = "dynamic area destination"
|
||||
@@ -11,27 +12,27 @@
|
||||
/area/dynamic/destination/lobby
|
||||
name = "Arrivals Lobby"
|
||||
match_tag = "arrivals"
|
||||
width = 5
|
||||
height = 4
|
||||
match_width = 5
|
||||
match_height = 4
|
||||
enable_lights = 1
|
||||
|
||||
/area/dynamic/source // Do not use.
|
||||
name = "dynamic area source"
|
||||
var/lights_initially_on = 0
|
||||
|
||||
/area/dynamic/source/lobby_bar
|
||||
name = "\improper Bar"
|
||||
match_tag = "arrivals"
|
||||
width = 5
|
||||
height = 4
|
||||
match_width = 5
|
||||
match_height = 4
|
||||
|
||||
/area/dynamic/source/lobby_russian
|
||||
name = "\improper Russian Lounge"
|
||||
match_tag = "arrivals"
|
||||
width = 5
|
||||
height = 4
|
||||
match_width = 5
|
||||
match_height = 4
|
||||
|
||||
/area/dynamic/source/lobby_disco
|
||||
name = "\improper Disco Lounge"
|
||||
match_tag = "arrivals"
|
||||
width = 5
|
||||
height = 4
|
||||
match_width = 5
|
||||
match_height = 4
|
||||
@@ -153,29 +153,49 @@ var/global/datum/controller/gameticker/ticker
|
||||
Holiday_Game_Start()
|
||||
|
||||
spawn(0) // Forking dynamic room selection
|
||||
var/list/area/dynamic_area_source_paths = typesof(/area/dynamic/source) - /area/dynamic/source
|
||||
var/list/area/dynamic_area_destination_paths = typesof(/area/dynamic/destination) - /area/dynamic/destination
|
||||
var/list/area/dynamic/source/available_source_candidates = typesof(/area/dynamic/source) - /area/dynamic/source
|
||||
var/list/area/dynamic/destination/available_destination_candidates = typesof(/area/dynamic/destination) - /area/dynamic/destination
|
||||
|
||||
for (var/dynamic_area_destination_path in dynamic_area_destination_paths)
|
||||
var/area/dynamic_area_destination = locate(dynamic_area_destination_path)
|
||||
for (var/area/dynamic/destination/current_destination_candidate in available_destination_candidates)
|
||||
var/area/dynamic/destination/current_destination = locate(current_destination_candidate)
|
||||
|
||||
if (!dynamic_area_destination)
|
||||
if (!current_destination)
|
||||
continue
|
||||
|
||||
|
||||
var/dynamic_area_source_path = pick(dynamic_area_source_paths)
|
||||
dynamic_area_source_paths -= dynamic_area_source_path
|
||||
|
||||
var/area/dynamic_area_source = locate(dynamic_area_source_path)
|
||||
|
||||
if (!dynamic_area_source)
|
||||
if (current_destination.match_width == 0 || current_destination.match_height == 0)
|
||||
message_admins("Dynamic area destination '[current_destination.name]' does not have its size requirements set.")
|
||||
continue
|
||||
|
||||
dynamic_area_source.copy_contents_to(dynamic_area_destination, 0)
|
||||
var/list/area/dynamic/source/candidate_source_areas = new /list(0)
|
||||
for (var/area/dynamic/source/candidate_source_area in available_source_candidates)
|
||||
var/area/dynamic/source/candidate_source = locate(candidate_source_area)
|
||||
|
||||
// Turn the lights off.
|
||||
dynamic_area_destination.power_light = 0
|
||||
dynamic_area_destination.power_change()
|
||||
if (!candidate_source)
|
||||
continue
|
||||
|
||||
if (candidate_source.match_tag != current_destination.match_tag)
|
||||
continue
|
||||
|
||||
if (candidate_source.match_width != current_destination.match_width || \
|
||||
candidate_source.match_height != current_destination.match_height)
|
||||
continue
|
||||
|
||||
candidate_source_areas += candidate_source
|
||||
|
||||
if (candidate_source_areas.len == 0)
|
||||
message_admins("Failed to find a matching source for dynamic area: [current_destination.name]")
|
||||
continue
|
||||
|
||||
var/area/dynamic/source/selected_source = pick(candidate_source_areas)
|
||||
available_source_candidates -= selected_source
|
||||
|
||||
selected_source.copy_contents_to(current_destination, 0)
|
||||
|
||||
if (current_destination.enable_lights || selected_source.enable_lights)
|
||||
current_destination.power_light = 1
|
||||
else
|
||||
current_destination.power_light = 0
|
||||
current_destination.power_change()
|
||||
|
||||
//start_events() //handles random events and space dust.
|
||||
//new random event system is handled from the MC.
|
||||
|
||||
Reference in New Issue
Block a user