From a305de25a5a9d8c3d6d604e0b0b9bba1623f16ec Mon Sep 17 00:00:00 2001 From: masterdraco Date: Tue, 29 Sep 2026 13:37:47 +0200 Subject: [PATCH] =?UTF-8?q?fix(flows):=20flow=20startet=20igen=20under=20t?= =?UTF-8?q?=C3=B8mning/hjemtur=20afbryder=20hjemturen=20og=20k=C3=B8rer=20?= =?UTF-8?q?videre=20med=20vognen=20=E2=80=94=20f=C3=B8r=20t=C3=B8mte=20den?= =?UTF-8?q?=20i=20op=20til=2010=20min=20ved=20forkert=20m=C3=A5l,=20satte?= =?UTF-8?q?=20vognen=20af=20og=20k=C3=B8rte=20i=20garage=20(v1.52.1.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adFlowWagons.lua | 23 +++++++++++++++++++++-- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adFlowWagons.lua | 6 ++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/FS25_ADSmartPickup/adFlowWagons.lua b/FS25_ADSmartPickup/adFlowWagons.lua index e9de3d1..ca84931 100644 --- a/FS25_ADSmartPickup/adFlowWagons.lua +++ b/FS25_ADSmartPickup/adFlowWagons.lua @@ -111,6 +111,8 @@ end local waiting = setmetatable({}, {__mode = "k"}) -- traktor -> runId (venter på sin vogn) local fetching = setmetatable({}, {__mode = "k"}) -- traktor -> runId (henter sin vogn) +local emptying = setmetatable({}, {__mode = "k"}) -- traktor -> {stage, since, fillType, runName} +local homing = setmetatable({}, {__mode = "k"}) -- traktor -> true (flowets hjemtur: vogn af, traktor hjem) local missingCount = {} -- runId -> tjek i træk local seenBuildings = {} -- bygnings-id'er set i denne session local rememberTimer, buildingTimer = 0, 0 @@ -190,6 +192,13 @@ local function guessFor(adEnv, run, vehicle, tractorId) return wagonId end +-- Flowet startes igen mens traktoren tømmer/kører hjem efter et stop: afbryd, så den kører videre med sin vogn. +-- Puljens egen hjemtur (fra markarbejde) røres ikke — der sidder et andet redskab bagpå. +-- s = {emptying, flowHoming, poolReturning} -> true = afbryd +function ADFlowWagons.abortHomeTripOnStart(s) + return s.emptying == true or s.flowHoming == true +end + -- Lånt ud af puljen: markarbejde, marksilo-lån, på hjemtur eller Courseplay kører den. function ADFlowWagons.isPoolBusy(vehicle, tractorId) return (ADFieldJobs ~= nil and ADFieldJobs.state.assignments[tractorId] ~= nil) @@ -203,6 +212,15 @@ end function ADFlowWagons.beforeStart(adEnv, run, vehicle) local tractorId = ADRunsController.getVehicleId(vehicle) if fetching[vehicle] ~= nil then return true, {vehicle = vehicle, ok = true, reason = "fetchingWagon"} end + if ADFlowWagons.abortHomeTripOnStart({emptying = emptying[vehicle] ~= nil, flowHoming = homing[vehicle] ~= nil}) then + Logging.info(ADFlowWagons.LOG_PREFIX .. "flow '%s': '%s' startet igen — tømning/hjemtur afbrudt, kører videre med vognen", + tostring(run.name), tostring(ADRuns.vehicleLabel(vehicle))) + emptying[vehicle] = nil + if homing[vehicle] ~= nil then + homing[vehicle] = nil + ADHitch.cancel(vehicle) + end + end local wagonId = (run.wagons or {})[tractorId] if wagonId == nil and #ADHitch.rearImplementsOf(vehicle) == 0 then wagonId = guessFor(adEnv, run, vehicle, tractorId) @@ -259,7 +277,6 @@ function ADFlowWagons.beforeStart(adEnv, run, vehicle) end -- Stop/slet/bygning væk: vognen tømmes (flowets mål, ellers silo/egen fabrik), sættes på plads, traktoren hjem. -local emptying = setmetatable({}, {__mode = "k"}) -- traktor -> {stage, since, fillType, runName} local nowMs = 0 local function cargoOf(adEnv, vehicle) @@ -280,8 +297,10 @@ end local function goHome(adEnv, vehicle) emptying[vehicle] = nil - local okHome, pooled = pcall(ADHitch.returnHome, adEnv, vehicle) + homing[vehicle] = true + local okHome, pooled = pcall(ADHitch.returnHome, adEnv, vehicle, function(tractor) homing[tractor] = nil end) if not (okHome and pooled) then + homing[vehicle] = nil local park = ADFieldWork.parkMarkerId(adEnv, vehicle) if park ~= nil then pcall(ADFieldWork.startAd, adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end end diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index ff94579..b9049d3 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.52.0.0 + 1.52.1.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adFlowWagons.lua b/tests/test_adFlowWagons.lua index c2590d1..dbf0e05 100644 --- a/tests/test_adFlowWagons.lua +++ b/tests/test_adFlowWagons.lua @@ -76,5 +76,11 @@ check("tøm: målet tog det hele -> hjem", W.emptyStep("target", {cargo = 0}), " check("tøm: silo tog det -> hjem", W.emptyStep("dump", {cargo = 0}), "home") check("tøm: silo kunne ikke -> giv op, hjem", W.emptyStep("dump", {cargo = 2000}), "giveUp") check("tøm: for længe -> giv op", W.emptyStep("target", {cargo = 5000, adActive = true, elapsedMs = W.EMPTY_TIMEOUT_MS}), "giveUp") +-- flowet startes igen mens traktoren tømmer/kører hjem fra et stop: hjemturen afbrydes, den kører videre med vognen +-- (in-game 29/9: Stop+Start med 1 s mellemrum -> tømning ved forkert mål i 10 min, vogn sat af, traktor i garage) +check("genstart: tømmer -> afbryd", W.abortHomeTripOnStart({emptying = true}), true) +check("genstart: flowets hjemtur -> afbryd", W.abortHomeTripOnStart({flowHoming = true}), true) +check("genstart: puljens hjemtur (markarbejde) -> rør ikke", W.abortHomeTripOnStart({poolReturning = true}), false) +check("genstart: intet i gang", W.abortHomeTripOnStart({}), false) print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)