From 5414371f7269686d3eeebfc9c5991c3ef0a5a291 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Tue, 22 Sep 2026 23:20:49 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20l=C3=A6s-bytte=20=E2=80=94=20Wait-logik?= =?UTF-8?q?=20kun=20ved=20AD's=20afl=C3=A6sningsm=C3=A5l;=20frisk=20rest?= =?UTF-8?q?=20ved=20bytte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adLoadSwap.lua | 3 +++ FS25_ADSmartPickup/adUnloadWait.lua | 8 ++++++++ tests/test_adSmartPickup.lua | 12 ++++++++++++ 3 files changed, 23 insertions(+) diff --git a/FS25_ADSmartPickup/adLoadSwap.lua b/FS25_ADSmartPickup/adLoadSwap.lua index 3ccd5db..899372b 100644 --- a/FS25_ADSmartPickup/adLoadSwap.lua +++ b/FS25_ADSmartPickup/adLoadSwap.lua @@ -42,6 +42,9 @@ end -- Nærmeste silo med plads til resten og vejnet til/fra; siloer der allerede har varen foretrækkes. function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointId, isReachable) + if vehicle.rootNode == nil then + return nil + end local farmId = ADSmartPickup.getFarmId(vehicle) local homeStation = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, homeWayPointId, farmId) local x, _, z = getWorldTranslation(vehicle.rootNode) diff --git a/FS25_ADSmartPickup/adUnloadWait.lua b/FS25_ADSmartPickup/adUnloadWait.lua index cb54087..c723a6e 100644 --- a/FS25_ADSmartPickup/adUnloadWait.lua +++ b/FS25_ADSmartPickup/adUnloadWait.lua @@ -107,6 +107,12 @@ local function startWaiting(adEnv, task) if not vehicle.ad.drivePathModule:isTargetReached() or vehicle.ad.trailerModule:isActiveAtTrigger() then return end + -- Efter et bytte er opgavens mål en silo, ikke AD's rigtige aflæsningsmål (anden markør); + -- der skal AD bare læsse af som normalt, uden Wait-logik. + local target = vehicle.ad.stateModule.getSecondMarker ~= nil and vehicle.ad.stateModule:getSecondMarker() or nil + if target == nil or task.destinationID ~= target.id then + return + end local fillType, rest = getRestLoad(adEnv, vehicle) if fillType == nil or rest < ADUnloadWait.MIN_REST_LITERS then return @@ -150,6 +156,8 @@ local function updateWaiting(adEnv, task, wait, dt) release(vehicle) return end + -- Friske tal til evt. bytte og til tilbage-loggen — ikke dem fra da ventningen startede. + wait.fillType, wait.rest = fillType, rest local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType) if free == nil or not ADSupplyPlanner.canUnloadRest(free, rest, capacity) then if ADLoadSwap ~= nil then diff --git a/tests/test_adSmartPickup.lua b/tests/test_adSmartPickup.lua index 6d26360..0be8ef1 100644 --- a/tests/test_adSmartPickup.lua +++ b/tests/test_adSmartPickup.lua @@ -819,6 +819,18 @@ UnloadTask.update(st5, 16) UnloadTask.update(st5, ADLoadSwap.CHECK_INTERVAL_MS + 1) check("S5 én vare -> bliver", st5.destinationID, 40) +-- S6: efter bytte til siloen skal traktoren blive der (ikke sendes til et nyt Wait-punkt, +-- fordi siloen fejlagtigt tolkes som "målet er fuldt") +buildSwapWorld() +local sv6, st6 = makeUnloadingVehicle("Fastrac Silo", 526, 5000, 35000) +UnloadTask.update(st6, 16) +UnloadTask.update(st6, ADLoadSwap.CHECK_INTERVAL_MS + 1) +local mark6 = #logLines +UnloadTask.update(st6, 16) +UnloadTask.update(st6, 16) +check("S6 bliver ved siloen efter bytte", st6.destinationID, 21) +check("S6 ingen ny Wait-omdirigering", countLogsSince(mark6, "venter ved"), 0) + -- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ==== local eDriver = buildCowWorld() check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1])