fix(markarbejde): vent op til 5 min mens Courseplay beregner kursus (store marker) i stedet for at opgive efter 60 s — F90 (140 ha) blev opgivet midt i beregningen (v1.42.4.0)

This commit is contained in:
2026-09-27 16:51:39 +02:00
parent 3ec4aaa179
commit df514fb6ec
5 changed files with 22 additions and 3 deletions
+3
View File
@@ -550,7 +550,10 @@ function ADCpBridge.start(vehicle, fieldX, fieldZ, onDone, opts)
Logging.warning("ADSmartPickup: kunne ikke kopiere kursus: %s — laver nyt", tostring(copyError)) Logging.warning("ADSmartPickup: kunne ikke kopiere kursus: %s — laver nyt", tostring(copyError))
end end
setMultiTools(vehicle, opts.multiTools or 1) 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) job:onClickGenerateFieldWorkCourse(function(generated)
handle.generating = false
if handle.cancelled then return end if handle.cancelled then return end
if not generated then return finish(false, "Courseplay kunne ikke lave kursus") end if not generated then return finish(false, "Courseplay kunne ikke lave kursus") end
startWithCourse() startWithCourse()
+8
View File
@@ -108,6 +108,14 @@ function ADFieldJobs.assignmentCount()
return count return count
end 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 -- 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). -- 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. -- env = {raining = bool}: vejrfølsomme trin (høst/slå/vend/riv/hø) sendes ikke ud i regn.
+3 -2
View File
@@ -1068,9 +1068,10 @@ function ADFieldWork.follow(adEnv, assignment)
beginWork(adEnv, field, info, assignment) beginWork(adEnv, field, info, assignment)
end end
elseif assignment.phase == "starting" then 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) 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 end
elseif assignment.phase == "working" then elseif assignment.phase == "working" then
followWorking(adEnv, field, assignment) followWorking(adEnv, field, assignment)
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml version="1.0" encoding="utf-8" standalone="no"?>
<modDesc descVersion="107"> <modDesc descVersion="107">
<author>masterdraco</author> <author>masterdraco</author>
<version>1.42.3.0</version> <version>1.42.4.0</version>
<title> <title>
<en>AD Smart Pickup</en> <en>AD Smart Pickup</en>
</title> </title>
+7
View File
@@ -170,5 +170,12 @@ do
check("HH klargøring med halv mark stående -> spol tilbage", J.decide(cultivating, halfInfo, {}, 0).action, "rewind") check("HH klargøring med halv mark stående -> spol tilbage", J.decide(cultivating, halfInfo, {}, 0).action, "rewind")
end 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")) print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
os.exit(failures == 0 and 0 or 1) os.exit(failures == 0 and 0 or 1)