feat(udkørsel): 'Lager til' — tvunget aflæsningssted pr. flow (siloer/egne fabrikker; første med plads og vej), XML #storeBuildings (v1.18.0.0)

This commit is contained in:
2026-09-24 05:13:09 +02:00
parent c814557ae1
commit d0485caa33
16 changed files with 169 additions and 11 deletions
+24
View File
@@ -139,6 +139,30 @@ function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointI
return nil, string.format("%d silo(er) tager varen, men AutoDrive finder ingen rute fra traktoren til dem", withSpace)
end
-- Tvunget lagermål (flowets "Lager til"): kun de valgte aflæsningsmarkører, i rækkefølge. Første der
-- tager varen, har plads til læsset og kan nås, vinder. Returnerer marker — eller nil + forklaring.
function ADLoadSwap.findForcedDumpMarker(adEnv, vehicle, fillType, liters, markerIds, isReachable)
local farmId = ADSmartPickup.getFarmId(vehicle)
local reasons = {}
for _, wayPointId in ipairs(markerIds or {}) do
local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(wayPointId)
local station = marker ~= nil and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, wayPointId, farmId) or nil
local name = marker ~= nil and tostring(marker.name) or tostring(wayPointId)
if station == nil then
table.insert(reasons, name .. ": ingen aflæsning ved markøren")
elseif station.getIsFillTypeSupported ~= nil and not station:getIsFillTypeSupported(fillType) then
table.insert(reasons, name .. ": tager ikke varen")
elseif not acceptsRest(station, fillType, liters, farmId) then
table.insert(reasons, name .. ": fuld")
elseif not isReachable(wayPointId) then
table.insert(reasons, name .. ": ingen vej")
else
return marker
end
end
return nil, "valgt lager: " .. (#reasons > 0 and table.concat(reasons, "; ") or "ingen markør")
end
-- Kaldes fra Wait-logikken hvert tick; redirect(task, id) og release(vehicle) er dens egne.
-- true = traktoren er sendt til en silo (Wait-punktet er frigivet).
function ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirect, release, isReachable)