From df514fb6ec616c79639f041bef7f1c8d9cf0c05c Mon Sep 17 00:00:00 2001 From: masterdraco Date: Sun, 27 Sep 2026 16:51:39 +0200 Subject: [PATCH] =?UTF-8?q?fix(markarbejde):=20vent=20op=20til=205=20min?= =?UTF-8?q?=20mens=20Courseplay=20beregner=20kursus=20(store=20marker)=20i?= =?UTF-8?q?=20stedet=20for=20at=20opgive=20efter=2060=20s=20=E2=80=94=20F9?= =?UTF-8?q?0=20(140=20ha)=20blev=20opgivet=20midt=20i=20beregningen=20(v1.?= =?UTF-8?q?42.4.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adCpBridge.lua | 3 +++ FS25_ADSmartPickup/adFieldJobs.lua | 8 ++++++++ FS25_ADSmartPickup/adFieldWork.lua | 5 +++-- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adFieldJobs.lua | 7 +++++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/FS25_ADSmartPickup/adCpBridge.lua b/FS25_ADSmartPickup/adCpBridge.lua index 29c132b..6931946 100644 --- a/FS25_ADSmartPickup/adCpBridge.lua +++ b/FS25_ADSmartPickup/adCpBridge.lua @@ -550,7 +550,10 @@ function ADCpBridge.start(vehicle, fieldX, fieldZ, onDone, opts) Logging.warning("ADSmartPickup: kunne ikke kopiere kursus: %s — laver nyt", tostring(copyError)) end setMultiTools(vehicle, opts.multiTools or 1) + -- kursusberegningen kører over mange frames på store marker: moden venter længere imens + handle.generating = true job:onClickGenerateFieldWorkCourse(function(generated) + handle.generating = false if handle.cancelled then return end if not generated then return finish(false, "Courseplay kunne ikke lave kursus") end startWithCourse() diff --git a/FS25_ADSmartPickup/adFieldJobs.lua b/FS25_ADSmartPickup/adFieldJobs.lua index 80c5b59..708498f 100644 --- a/FS25_ADSmartPickup/adFieldJobs.lua +++ b/FS25_ADSmartPickup/adFieldJobs.lua @@ -108,6 +108,14 @@ function ADFieldJobs.assignmentCount() return count end +-- Har Courseplay-starten taget for lang tid? Mens CP beregner kursus (store marker), må det tage op til +-- COURSE_GENERATE_MS; ellers START_MS (in-game 27/9 F90: 140 ha tog over 60 s, og moden opgav midt i beregningen). +ADFieldJobs.START_MS = 60000 +ADFieldJobs.COURSE_GENERATE_MS = 300000 +function ADFieldJobs.startTimedOut(elapsed, generating) + return elapsed > (generating and ADFieldJobs.COURSE_GENERATE_MS or ADFieldJobs.START_MS) +end + -- Beslutning for én mark. assignments = sæt på marken ({phase, stage, helper}); kun sæt på det aktuelle -- trin tæller (en aflæsningsvogn på vej hjem fra høsten forstyrrer ikke kultiveringen). -- env = {raining = bool}: vejrfølsomme trin (høst/slå/vend/riv/hø) sendes ikke ud i regn. diff --git a/FS25_ADSmartPickup/adFieldWork.lua b/FS25_ADSmartPickup/adFieldWork.lua index 00696a0..0b6c8f4 100644 --- a/FS25_ADSmartPickup/adFieldWork.lua +++ b/FS25_ADSmartPickup/adFieldWork.lua @@ -1068,9 +1068,10 @@ function ADFieldWork.follow(adEnv, assignment) beginWork(adEnv, field, info, assignment) end elseif assignment.phase == "starting" then - if now() - assignment.since > ADFieldWork.START_TIMEOUT_MS then + local generating = assignment.handle ~= nil and assignment.handle.generating == true + if ADFieldJobs.startTimedOut(now() - assignment.since, generating) then ADFieldWork.release(assignment) - fail(assignment.fieldId, "Courseplay svarede ikke (60 s)") + fail(assignment.fieldId, generating and "Courseplay blev ikke færdig med kurset (5 min)" or "Courseplay svarede ikke (60 s)") end elseif assignment.phase == "working" then followWorking(adEnv, field, assignment) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index c4dc898..09a3885 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.42.3.0 + 1.42.4.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adFieldJobs.lua b/tests/test_adFieldJobs.lua index 96e06fb..0a448e7 100644 --- a/tests/test_adFieldJobs.lua +++ b/tests/test_adFieldJobs.lua @@ -170,5 +170,12 @@ do check("HH klargøring med halv mark stående -> spol tilbage", J.decide(cultivating, halfInfo, {}, 0).action, "rewind") end + +-- startTimedOut: CP må beregne kursus i op til 5 min (in-game 27/9 F90: 140 ha tog over 60 s, moden opgav midt i) +check("ST start uden beregning > 60 s -> opgiv", ADFieldJobs.startTimedOut(61000, false), true) +check("ST beregner stadig efter 90 s -> vent", ADFieldJobs.startTimedOut(90000, true), false) +check("ST beregner over 5 min -> opgiv", ADFieldJobs.startTimedOut(301000, true), true) +check("ST under 60 s -> vent", ADFieldJobs.startTimedOut(30000, false), false) + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)