fix(marksilo): høsten først — tømmevogne holdes tilbage til høstere der kører (planlagt antal minus udsendte); fabrik kun med plads til hele læsset (v1.45.1.0)

This commit is contained in:
2026-09-28 00:51:15 +02:00
parent 28d2f2c086
commit 5a715bc3e9
7 changed files with 94 additions and 2 deletions
+24
View File
@@ -39,6 +39,9 @@ local function chooseStore(stores, silo, fillType, liters, minLiters, reserved,
if mostFree == nil or free > mostFree then most, mostFree = store, free end
end
end
-- fabrikker kun med plads til hele læsset: en fabrik tager kun det den forbruger, så en vogn med resten
-- holder ved den i timevis (in-game 28/9: 252.000 l kartofler ved en fuld snackfabrik)
if production then return best end
return best or most
end
@@ -69,6 +72,27 @@ local function pickStore(input, farmIncoming, task, liters, minLiters, reserved)
or chooseStore(input.stores, task.silo, fillType, liters, minLiters, reserved, not wantProduction)
end
-- Høsten først: for hvert behov {fillType, count} (høstere i arbejde, der mangler tømmevogne) holdes så mange
-- vogne der kan bære afgrøden tilbage; resten må marksilo-flowet låne. Ny liste; input muteres ikke.
function ADFieldSiloPlanner.withoutHarvestReserve(vehicles, needs)
local held = {}
for _, need in ipairs(needs or {}) do
local left = need.count or 0
for _, vehicle in ipairs(vehicles or {}) do
if left <= 0 then break end
if not held[vehicle.id] and canCarry(vehicle, need.fillType) then
held[vehicle.id] = true
left = left - 1
end
end
end
local free = {}
for _, vehicle in ipairs(vehicles or {}) do
if not held[vehicle.id] then table.insert(free, vehicle) end
end
return free
end
function ADFieldSiloPlanner.plan(input)
local minLiters = input.minLiters or 10000
local storesById = {}