fix: ventende traktorer genoptages efter genindlæsning (AD's mål = Wait-punkt, ventetilstand tabt) (v1.12.9.0)
This commit is contained in:
@@ -262,6 +262,52 @@ function ADUnloadWait.beforeUpdate(adEnv, task, dt)
|
||||
end
|
||||
end
|
||||
|
||||
-- Efter en genindlæsning er ventetilstanden (kun i hukommelsen) væk, men AutoDrives gemte mål
|
||||
-- peger stadig på Wait-punktet, og traktoren står der med rest-læs — uden dette ville den blive
|
||||
-- stående for evigt. Her genoptages ventningen for aktive traktorer i et forsynings-run hvis
|
||||
-- aflæsningsopgave peger på en Wait-markør: hjem = run'ets mål, og reservationen sættes igen.
|
||||
-- Kaldes fra ADSmartPickup:update (throttlet).
|
||||
ADUnloadWait.ADOPT_INTERVAL_MS = 5000
|
||||
local adoptTimerMs = ADUnloadWait.ADOPT_INTERVAL_MS
|
||||
|
||||
function ADUnloadWait.adoptOrphans(adEnv)
|
||||
if ADRunsController == nil or ADRunsController.getFarmVehicles == nil then
|
||||
return
|
||||
end
|
||||
for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do
|
||||
local stateModule = vehicle.ad ~= nil and vehicle.ad.stateModule or nil
|
||||
local isActive = stateModule ~= nil and stateModule.isActive ~= nil and stateModule:isActive()
|
||||
local run = isActive and waits[vehicle] == nil and ADRunsController.getRunForVehicle(vehicle) or nil
|
||||
if run ~= nil and (run.kind or "supply") == "supply" and stateModule.getSecondMarker ~= nil then
|
||||
local marker = stateModule:getSecondMarker()
|
||||
local task = vehicle.ad.taskModule ~= nil and vehicle.ad.taskModule.getActiveTask ~= nil and vehicle.ad.taskModule:getActiveTask() or nil
|
||||
if marker ~= nil and marker.id ~= nil and ADSupplyPlanner.isWaitMarker(marker) and task ~= nil and task.destinationID == marker.id and task.trailers ~= nil then
|
||||
local fillType, rest = getRestLoad(adEnv, vehicle)
|
||||
local homeId = ADRunsController.chooseTarget ~= nil and ADRunsController.chooseTarget(adEnv, run, vehicle) or run.targetWayPointId
|
||||
if fillType ~= nil and rest >= ADUnloadWait.MIN_REST_LITERS and homeId ~= nil then
|
||||
ADWaitPool.claim(marker.id, vehicle)
|
||||
pendingTargetRestore[vehicle] = homeId
|
||||
waits[vehicle] = {task = task, homeDestinationID = homeId, waitMarker = marker, fillType = fillType, rest = rest}
|
||||
local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
|
||||
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' genoptager ventning ved %s efter genindlæsning: %.0f l %s rest, hjem = markør %s", tostring(vehicle:getName()), tostring(marker.name), rest, tostring(fillTypeName), tostring(homeId))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ADUnloadWait.adoptOrphansThrottled(adEnv, dt)
|
||||
adoptTimerMs = adoptTimerMs + (dt or 0)
|
||||
if adoptTimerMs < ADUnloadWait.ADOPT_INTERVAL_MS then
|
||||
return
|
||||
end
|
||||
adoptTimerMs = 0
|
||||
local ok, err = pcall(ADUnloadWait.adoptOrphans, adEnv)
|
||||
if not ok then
|
||||
Logging.warning(ADUnloadWait.LOG_PREFIX .. "kunne ikke genoptage ventende traktorer: %s", tostring(err))
|
||||
end
|
||||
end
|
||||
|
||||
-- Kaldes fra ADSmartPickup:update — standsede køretøjer slipper deres Wait-punkt.
|
||||
function ADUnloadWait.releaseInactive()
|
||||
for vehicle in pairs(waits) do
|
||||
|
||||
Reference in New Issue
Block a user