diff --git a/.vscode/launch.json b/.vscode/launch.json index ddec48b..5b06ae2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -28,7 +28,6 @@ "debugadapter": true, "flib": true, "cybersyn": true, - "creative-mod": true, }, "disableExtraMods": false }, diff --git a/cybersyn/scripts/central-planning.lua b/cybersyn/scripts/central-planning.lua index cf376f6..087e8b3 100644 --- a/cybersyn/scripts/central-planning.lua +++ b/cybersyn/scripts/central-planning.lua @@ -170,6 +170,7 @@ local function get_valid_train(map_data, r_station_id, p_station_id, item_type) ---@type Depot|nil local best_depot = nil + local best_capacity = 0 local best_dist = INF local valid_train_exists = false @@ -182,9 +183,10 @@ local function get_valid_train(map_data, r_station_id, p_station_id, item_type) local layout_id = train.layout_id --check cargo capabilities --check layout validity for both stations + local capacity = (is_fluid and train.fluid_capacity) or train.item_slot_capacity if + capacity > 0 and btest(netand, depot.network_flag) and - ((is_fluid and train.fluid_capacity > 0) or (not is_fluid and train.item_slot_capacity > 0)) and (r_station.is_all or r_station.accepted_layouts[layout_id]) and (p_station.is_all or p_station.accepted_layouts[layout_id]) then @@ -194,7 +196,8 @@ local function get_valid_train(map_data, r_station_id, p_station_id, item_type) local d_to_p_dist = get_stop_dist(depot.entity_stop, p_station.entity_stop) - DEPOT_PRIORITY_MULT*depot.priority local dist = d_to_p_dist - if dist < best_dist then + if capacity > best_capacity or (capacity == best_capacity and dist < best_dist) then + best_capacity = capacity best_dist = dist best_depot = depot end diff --git a/cybersyn/scripts/layout.lua b/cybersyn/scripts/layout.lua index 543742e..9a8238e 100644 --- a/cybersyn/scripts/layout.lua +++ b/cybersyn/scripts/layout.lua @@ -3,6 +3,8 @@ local area = require("__flib__.area") local abs = math.abs local floor = math.floor local ceil = math.ceil +local string_find = string.find +local string_sub = string.sub local function iterr(a, i) i = i + 1 @@ -431,11 +433,11 @@ local function reset_station_layout(map_data, station, forbidden_entity) search_area = area.move(search_area, area_delta) end end - layout_pattern = string.sub(layout_pattern, 1, pattern_length)..STATION_LAYOUT_NA.."*$" + layout_pattern = string_sub(layout_pattern, 1, pattern_length)..STATION_LAYOUT_NA.."*$" station.layout_pattern = layout_pattern local accepted_layouts = station.accepted_layouts for id, layout in pairs(map_data.layouts) do - if string.find(layout, layout_pattern) ~= nil then + if string_find(layout, layout_pattern) ~= nil then accepted_layouts[id] = true else accepted_layouts[id] = nil