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)