fix(forsyning): intet at hente til valgt mål -> prøv run'ets andre mål før Wait (to traktorer til samme DOB); hold-tekst siger den reelle grund (v1.18.2.0)
This commit is contained in:
@@ -736,6 +736,37 @@ local function chooseRunTarget(adEnv, driver)
|
||||
Logging.info(ADSmartPickup.LOG_PREFIX .. "'%s' kører til %s (%s)", tostring(ADRuns.vehicleLabel(driver)), marker ~= nil and tostring(marker.name) or tostring(targetId), why)
|
||||
end
|
||||
|
||||
local tryOtherRunTargets
|
||||
-- Det valgte mål har intet der kan hentes (kilden er tom, eller andre traktorer har allerede læs på vej
|
||||
-- til det): prøv run'ets ANDRE mål, og skift AD's aflæsningsmål til det første der kan forsynes.
|
||||
-- Ellers holdt traktoren ved Wait mens fx fire andre DOB'er ved samme biogasanlæg stod tomme.
|
||||
tryOtherRunTargets = function(adEnv, driver, ingredients)
|
||||
local run = ADRunsController ~= nil and ADRunsController.getRunForVehicle(driver) or nil
|
||||
if run == nil or (run.kind or "supply") ~= "supply" then
|
||||
return nil
|
||||
end
|
||||
-- AD's mål er midlertidigt en silo (forkert last læsses af): rør det ikke
|
||||
if ADUnloadWait ~= nil and ADUnloadWait.getPendingTargetRestore ~= nil and ADUnloadWait.getPendingTargetRestore(driver) ~= nil then
|
||||
return nil
|
||||
end
|
||||
local stateModule = driver.ad.stateModule
|
||||
local current = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil
|
||||
local currentId = current ~= nil and current.id or nil
|
||||
for _, targetId in ipairs(ADRunsController.getRunTargets(run)) do
|
||||
if targetId ~= currentId then
|
||||
local choice = ADSmartPickup.findSupplyPickup(adEnv, driver, ingredients, targetId)
|
||||
if choice ~= nil and stateModule.setSecondMarkerByWayPointId ~= nil then
|
||||
stateModule:setSecondMarkerByWayPointId(targetId)
|
||||
local marker = adEnv.ADGraphManager.getMapMarkerByWayPointId ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(targetId) or nil
|
||||
Logging.info(ADSmartPickup.LOG_PREFIX .. "'%s' kører til %s (intet at hente til %s)", tostring(ADRuns.vehicleLabel(driver)),
|
||||
marker ~= nil and tostring(marker.name) or tostring(targetId), current ~= nil and tostring(current.name) or "?")
|
||||
return choice
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Samlet valg: behovsstyret med ingrediensliste, ellers mappe-logik. nil = AutoDrives original.
|
||||
function ADSmartPickup.choosePickup(adEnv, driver)
|
||||
enRoute[driver] = nil -- ny tur: forrige læs er leveret (eller opgivet)
|
||||
@@ -747,6 +778,9 @@ function ADSmartPickup.choosePickup(adEnv, driver)
|
||||
end
|
||||
|
||||
local choice = ADSmartPickup.findSupplyPickup(adEnv, driver, ingredients)
|
||||
if choice == nil then
|
||||
choice = tryOtherRunTargets(adEnv, driver, ingredients)
|
||||
end
|
||||
if choice == nil then
|
||||
-- Traktor i et forsynings-run uden noget (tilladt) at hente: hold ved Wait og prøv igen, i stedet
|
||||
-- for at falde tilbage til mappe-logikken (den henter hvad som helst, fx ensilage i et halvfuldt trug).
|
||||
@@ -762,7 +796,7 @@ function ADSmartPickup.choosePickup(adEnv, driver)
|
||||
activePickups[driver] = {station = next.station, fillTypes = next.fillTypes, markerName = next.markerName, fillType = next.fillType}
|
||||
return next.markerId
|
||||
end
|
||||
local held = ADOutbound.holdSupplyVehicle(adEnv, driver, run, {"intet at hente (bedste foder mangler, truget ikke nødlidende)"}, replan)
|
||||
local held = ADOutbound.holdSupplyVehicle(adEnv, driver, run, {"intet at hente til nogen af run'ets mål (tom kilde, læs på vej, eller bedste foder mangler)"}, replan)
|
||||
if held ~= nil then
|
||||
return held
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.18.1.0</version>
|
||||
<version>1.18.2.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
Reference in New Issue
Block a user