From ef69347c55d6d841045ca38c11862818da49c6da Mon Sep 17 00:00:00 2001 From: masterdraco Date: Wed, 23 Sep 2026 01:43:53 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Wait=20udl=C3=B8ses=20ogs=C3=A5=20n?= =?UTF-8?q?=C3=A5r=20AD=20stadig=20regner=20vognen=20som=20afl=C3=A6ssende?= =?UTF-8?q?=20ved=20fuldt=20trug;=20AD's=20afl=C3=A6sning=20stoppes=20f?= =?UTF-8?q?=C3=B8r=20omdirigering=20(v1.10.1.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adUnloadWait.lua | 12 +++++++++++- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adSmartPickup.lua | 11 +++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/FS25_ADSmartPickup/adUnloadWait.lua b/FS25_ADSmartPickup/adUnloadWait.lua index 8872f0a..8331eb8 100644 --- a/FS25_ADSmartPickup/adUnloadWait.lua +++ b/FS25_ADSmartPickup/adUnloadWait.lua @@ -84,7 +84,14 @@ local function hasRouteBothWays(adEnv, vehicle, waitWayPointId, homeWayPointId) and pathReaches(graph:pathFromTo(waitWayPointId, homeWayPointId), homeWayPointId) end +-- Står AD midt i en (blokeret) aflæsning, stoppes den pænt først — ellers kører traktoren +-- væk med tippet vogn. local function redirect(task, destinationID) + local trailerModule = task.vehicle.ad.trailerModule + if trailerModule ~= nil and trailerModule.isActiveAtTrigger ~= nil and trailerModule:isActiveAtTrigger() then + if trailerModule.stopUnloading ~= nil then trailerModule:stopUnloading() end + if trailerModule.stopLoading ~= nil then trailerModule:stopLoading() end + end task.destinationID = destinationID task.state = ADUnloadWait.STATE_DRIVING task.vehicle.ad.drivePathModule:setPathTo(destinationID) @@ -104,7 +111,10 @@ end -- Står køretøjet ved målet med rest-læs, som målet ikke kan tage? Så find et Wait-punkt. local function startWaiting(adEnv, task) local vehicle = task.vehicle - if not vehicle.ad.drivePathModule:isTargetReached() or vehicle.ad.trailerModule:isActiveAtTrigger() then + -- Kun "fremme ved målet". At AD stadig regner vognen som aflæssende (isActiveAtTrigger) + -- tæller IKKE med: ved et fuldt fodertrug bliver isUnloading stående for evigt, selv om + -- intet løber — og så blokerede traktoren stalden i stedet for at køre til Wait. + if not vehicle.ad.drivePathModule:isTargetReached() then return end -- Efter et bytte er opgavens mål en silo, ikke AD's rigtige aflæsningsmål (anden markør); diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 7d3b5c1..a689e0d 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.10.0.0 + 1.10.1.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adSmartPickup.lua b/tests/test_adSmartPickup.lua index 51fa14f..ec28d88 100644 --- a/tests/test_adSmartPickup.lua +++ b/tests/test_adSmartPickup.lua @@ -720,6 +720,17 @@ check("W11 én reservation", #claims, 1) check("W11 markør", claims[1].marker.id, 40) check("W11 køretøj", claims[1].vehicle, vc1) + +-- W12: AD regner vognen som "aflæssende" ved et fuldt trug (isUnloading bliver hængende) — +-- omdirigeres alligevel, og AD's aflæsning stoppes først +buildWaitWorld() +local vs, ts = makeUnloadingVehicle("Fastrac Tippet", 541, 5000, 35000) +local stopped = false +vs.ad.trailerModule = {isActiveAtTrigger = function() return true end, stopUnloading = function() stopped = true end, stopLoading = function() end} +UnloadTask.update(ts, 16) +check("W12 omdirigeret trods isActiveAtTrigger", ts.destinationID, 40) +check("W12 AD's aflæsning stoppet før kørsel", stopped, true) + -- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ==== -- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste) local runDriver = buildCowWorld()