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>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# AD Smart Pickup — brugermanual
|
||||
|
||||
Version 1.18.1 · Farming Simulator 25 · tillæg til AutoDrive
|
||||
Version 1.18.2 · Farming Simulator 25 · tillæg til AutoDrive
|
||||
|
||||
*English version: [USER_MANUAL.md](USER_MANUAL.md)*
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# AD Smart Pickup — user manual
|
||||
|
||||
Version 1.18.1 · Farming Simulator 25 · add-on for AutoDrive
|
||||
Version 1.18.2 · Farming Simulator 25 · add-on for AutoDrive
|
||||
|
||||
*Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)*
|
||||
|
||||
|
||||
@@ -988,6 +988,27 @@ check("I6 næste tur: halm til stald 2", manager:getNextPickup(i6, false), 21)
|
||||
check("I6 mål skiftet til stald 2", i6.ad.stateModule.secondMarkerId, 31)
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
|
||||
-- I7: det valgte mål har intet der kan hentes (TMR-kilden er tom) -> prøv run'ets ANDRE mål før Wait
|
||||
-- (in-game 24/9: to traktorer fik begge 'Biogas Drop 1'; nr. 2 holdt selv om 4 DOB'er var tomme)
|
||||
buildCowWorld()
|
||||
addMarker(31, "Cow 2 Food", "Cow Food", 6000, 0)
|
||||
local cow2LevelsI7 = {[STRAW] = 10000, [TMR] = 100000}
|
||||
table.insert(unloadStations, makeUnloadStation(131, 6000, 10, cow2LevelsI7, {[STRAW] = 100000, [TMR] = 100000}, {name = "kostald 2"}))
|
||||
cowLevels[STRAW], cowLevels[TMR] = 100000, 0 -- stald 1 mangler KUN TMR (mest trængende)
|
||||
stations[1].getFillLevel = function(_, fillType) return fillType == STRAW and 5000 or 0 end -- TMR-kilden tom
|
||||
local i7 = makeSupplyDriver(markerByIndex(21), markerByIndex(30), {TMR, STRAW})
|
||||
i7.uniqueId = "vehicleI7"; i7.carriable = {TMR, STRAW}; i7.trailers = {level = 0, capacity = 8000}
|
||||
i7.ad.stateModule.setSecondMarkerByWayPointId = function(self, id) self.secondMarkerId = id end
|
||||
i7.ad.stateModule.getSecondMarker = function(self) return markerByIndex(self.secondMarkerId or 30) end
|
||||
testVehicles = {i7}
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
local twoBarnsI7 = ADRunsController.createRun("Kvæg2")
|
||||
ADRunsController.updateRun(twoBarnsI7.id, {targetWayPointIds = {30, 31}})
|
||||
ADRunsController.assignVehicle(twoBarnsI7.id, i7)
|
||||
check("I7 henter halm til det andet mål", manager:getNextPickup(i7, false), 21)
|
||||
check("I7 AD's mål skiftet til stald 2", i7.ad.stateModule.secondMarkerId, 31)
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
|
||||
-- ==== V: forkert last på vognen ====
|
||||
-- V1: pålæsning starter med anden vare på vognen -> opgaven afsluttes straks (AD leverer det den har)
|
||||
buildCowWorld()
|
||||
|
||||
Reference in New Issue
Block a user