fix(pulje): review v1.50 — egne tømmevogne virkede ikke under høst (global 'implement'), hentning kan afbrydes (høst slut/Stop/spiller), hjemtur ved tømmevogns-fejl, marksilo-lån kan ikke hænge i 'henter' (tidsgrænse, spiller, fejl i start), ingen ekstra parkeringstur med puljevogn, Stop holder en bar mark; regressionstest for fejlagtige globale (v1.50.1.0)
This commit is contained in:
@@ -287,6 +287,10 @@ end
|
||||
function ADFieldWork.release(assignment, phase)
|
||||
restoreToolOffset(assignment)
|
||||
if assignment.handle ~= nil then assignment.handle.cancelled = true end
|
||||
-- henter stadig puljeredskabet: afbryd koblingen, så det ikke kobles på uden en opgave
|
||||
if assignment.phase == "fetching" and assignment.hitch ~= nil and not assignment.hitch.done and ADHitch ~= nil then
|
||||
ADHitch.cancel(assignment.vehicle)
|
||||
end
|
||||
assignment.phase = phase or "released"
|
||||
if ADPool ~= nil and assignment.pool ~= nil then ADPool.release(assignment) end
|
||||
ADFieldJobs.state.assignments[assignment.vehicleId] = nil
|
||||
@@ -447,8 +451,6 @@ function ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
local offNetwork = {}
|
||||
local accept = function(candidate)
|
||||
if roleAccept ~= nil and not roleAccept(candidate) then return false end
|
||||
-- tømmevogn: skal kunne bære høstens vare
|
||||
if role == "unloader" and not ADPool.canCarry(implement, info.harvestFillType) then return false end
|
||||
-- manuel transport: spilleren kører den — afstand til AutoDrive-vejnettet er ligegyldig
|
||||
if role == "harvester" and candidate.manual then return true end
|
||||
local d = candidate.x ~= nil and ADFieldWork.distanceToNetwork(adEnv, candidate.x, candidate.z) or nil
|
||||
@@ -697,6 +699,7 @@ local function beginUnloader(adEnv, field, info, assignment)
|
||||
local store, why = ADFieldWork.chooseStore(adEnv, field, info, vehicle, fillType)
|
||||
if store == nil then
|
||||
ADFieldWork.release(assignment)
|
||||
ADHitch.returnHome(adEnv, vehicle)
|
||||
fail(field.id, "intet lager til høsten: " .. tostring(why))
|
||||
return
|
||||
end
|
||||
@@ -716,11 +719,13 @@ local function beginUnloader(adEnv, field, info, assignment)
|
||||
log(field.id, "aflæsningsvogn '%s' følger høsteren -> %s", ADRuns.vehicleLabel(vehicle), tostring(store.name))
|
||||
else
|
||||
ADFieldWork.release(assignment)
|
||||
ADHitch.returnHome(adEnv, vehicle)
|
||||
fail(field.id, "aflæsningsvogn: " .. tostring(reason))
|
||||
end
|
||||
end)
|
||||
if handle == nil then
|
||||
ADFieldWork.release(assignment)
|
||||
ADHitch.returnHome(adEnv, vehicle)
|
||||
fail(field.id, "aflæsningsvogn: " .. tostring(err))
|
||||
return
|
||||
end
|
||||
@@ -1284,7 +1289,16 @@ end
|
||||
-- Høsten er færdig: aflæsningsvognene stoppes; har de rest, kører den til lager, ellers parkering.
|
||||
function ADFieldWork.windDownHelpers(adEnv, fieldId, stage)
|
||||
for _, assignment in ipairs(ADFieldJobs.assignmentsFor(fieldId)) do
|
||||
if assignment.helper and assignment.stage == stage then
|
||||
if assignment.helper and assignment.stage == stage and assignment.phase == "fetching" then
|
||||
-- høsten sluttede mens puljevognen blev hentet: afbryd, vognen tilbage hvis den nåede at komme på
|
||||
local vehicle = assignment.vehicle
|
||||
ADFieldWork.release(assignment)
|
||||
if not ADHitch.returnHome(adEnv, vehicle) then
|
||||
local park = parkMarkerId(adEnv, vehicle)
|
||||
if park ~= nil then startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
||||
end
|
||||
log(fieldId, "tømmevogn '%s' afbrudt under hentning — høsten er færdig", ADRuns.vehicleLabel(vehicle))
|
||||
elseif assignment.helper and assignment.stage == stage then
|
||||
if assignment.handle ~= nil then assignment.handle.cancelled = true end
|
||||
ADCpBridge.stop(assignment.vehicle)
|
||||
assignment.phase = "working"
|
||||
@@ -1315,7 +1329,12 @@ function ADFieldWork.stopAll(adEnv, fieldId)
|
||||
for _, assignment in ipairs(ADFieldJobs.assignmentsFor(fieldId)) do
|
||||
pcall(stopAd, assignment.vehicle)
|
||||
ADCpBridge.stop(assignment.vehicle)
|
||||
local wasFetching = assignment.phase == "fetching"
|
||||
ADFieldWork.release(assignment)
|
||||
pcall(ADHitch.returnHome, adEnv, assignment.vehicle)
|
||||
local okHome, pooled = pcall(ADHitch.returnHome, adEnv, assignment.vehicle)
|
||||
if wasFetching and not (okHome and pooled) then
|
||||
local park = parkMarkerId(adEnv, assignment.vehicle)
|
||||
if park ~= nil then pcall(startAd, adEnv, assignment.vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user