fix(markarbejde): CP startes ved sidste punkt (eget kursus + husket waypoint) eller nærmeste punkt (påbegyndt høst/slåning) i stedet for CP's standard 'first' — F111 blev høstet forfra (v1.38.4.0)
This commit is contained in:
@@ -513,6 +513,12 @@ function ADCpBridge.start(vehicle, fieldX, fieldZ, onDone, opts)
|
||||
local params = job.cpJobParameters
|
||||
if params ~= nil and params.fieldPosition ~= nil then params.fieldPosition:setPosition(fieldX, fieldZ) end
|
||||
if params ~= nil and params.startPosition ~= nil then params.startPosition:setPosition(vx, vz) end
|
||||
-- startpunkt i kurset: CP's standard er "first" (forfra) — "nearest"/"last" på en påbegyndt mark
|
||||
local startAtValues = CpFieldWorkJobParameters ~= nil and {first = CpFieldWorkJobParameters.START_AT_FIRST_POINT,
|
||||
nearest = CpFieldWorkJobParameters.START_AT_NEAREST_POINT, last = CpFieldWorkJobParameters.START_AT_LAST_POINT} or {}
|
||||
if opts.startAt ~= nil and startAtValues[opts.startAt] ~= nil and params ~= nil and params.startAt ~= nil then
|
||||
pcall(function() params.startAt:setValue(startAtValues[opts.startAt]) end)
|
||||
end
|
||||
job:setValues()
|
||||
local handle = {cancelled = false, fired = false, finished = false}
|
||||
local function finish(ok, reason)
|
||||
|
||||
@@ -68,6 +68,18 @@ function ADFieldJobs.resumeField(x, z, role, fields)
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Hvor Courseplay skal starte i kurset: "last" (eget kursus + husket waypoint = fortsæt præcis), "nearest"
|
||||
-- (marken er allerede delvist høstet/slået), ellers "first". CP's eget standardvalg er "first" — også på en
|
||||
-- halvt høstet mark (in-game 27/9: mejetærskeren startede F111 forfra).
|
||||
-- s = {reuse, remembered, stage, standingRatio}
|
||||
ADFieldJobs.PARTLY_DONE_RATIO = 0.95
|
||||
function ADFieldJobs.startAtFor(s)
|
||||
if s.reuse and s.remembered then return "last" end
|
||||
local cropStage = s.stage == "harvesting" or s.stage == "mowing"
|
||||
if cropStage and type(s.standingRatio) == "number" and s.standingRatio < ADFieldJobs.PARTLY_DONE_RATIO then return "nearest" end
|
||||
return "first"
|
||||
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.
|
||||
|
||||
@@ -773,6 +773,12 @@ local function beginWork(adEnv, field, info, assignment)
|
||||
-- genbrug af Courseplay-kurser: maskinens eget / en andens matchende kursus frem for ny beregning
|
||||
local cacheContext
|
||||
opts, cacheContext = ADCourseCache.prepare(adEnv, field, info, assignment, opts)
|
||||
-- påbegyndt mark: fortsæt/start nærmest i stedet for forfra (CP's standard)
|
||||
opts = opts or {}
|
||||
local remembered = vehicle.getCpLastRememberedWaypointIx ~= nil and vehicle:getCpLastRememberedWaypointIx() ~= nil
|
||||
opts.startAt = ADFieldJobs.startAtFor({reuse = opts.reuse == true, remembered = remembered, stage = field.stage,
|
||||
standingRatio = info.standingRatio})
|
||||
if opts.startAt ~= "first" then log(field.id, "'%s' starter kurset ved %s punkt (marken er påbegyndt)", ADRuns.vehicleLabel(vehicle), opts.startAt == "last" and "sidste" or "nærmeste") end
|
||||
assignment.phase = "starting"
|
||||
assignment.since = now()
|
||||
local handle, err = ADCpBridge.start(vehicle, point.x, point.z, function(ok, reason)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.38.3.0</version>
|
||||
<version>1.38.4.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
Reference in New Issue
Block a user