fix(pulje): review — puljeredskab sættes altid af (også påfyldte sæt), kun rolleløse traktorer henter, traktor uden vejnet springes over og får skylden ved stoppedAway, påfyldning efter koblingen, faste maskiner respekteres
This commit is contained in:
@@ -461,7 +461,13 @@ function ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
end
|
||||
if rigs == nil then
|
||||
-- ingen færdig kombination: en ledig solo-traktor henter et puljeredskab (kun hovedopgaver, ikke tømmevogne)
|
||||
if not decision.helper and (decision.count or 1) == 1 and ADPool ~= nil
|
||||
-- marken har egne faste maskiner til rollen: den venter på dem (som uden puljen)
|
||||
local ownIds, hasOwnForRole = {}, false
|
||||
for _, id in ipairs(field.plan ~= nil and field.plan.rigIds or {}) do ownIds[id] = true end
|
||||
for _, candidate in ipairs(candidates) do
|
||||
if ownIds[candidate.id] and (candidate.role == role or (candidate.roles ~= nil and candidate.roles[role])) then hasOwnForRole = true end
|
||||
end
|
||||
if ADPool ~= nil and ADPool.mayUsePool(decision, hasOwnForRole)
|
||||
and (why == "noRig" or why == "allBusy" or why == "cannotDo") then
|
||||
local pooled, poolWhy, poolArgs = ADFieldWork.dispatchPool(adEnv, field, info, role, roleAccept)
|
||||
if pooled then return end
|
||||
@@ -913,7 +919,7 @@ local function finishAssignment(adEnv, assignment)
|
||||
-- manuel transport: ALDRIG ud på vejen med AutoDrive (skærebordet sidder på) — spilleren henter den
|
||||
-- puljeredskab bag traktoren: sæt det af på sin parkering, traktoren hjem (afhænger kun af hvad der hænger
|
||||
-- bag, så det virker også efter genindlæsning); ellers som før
|
||||
local pooled = not assignment.adHandlesEnd and not assignment.manual and ADHitch ~= nil
|
||||
local pooled = ADPool ~= nil and ADPool.shouldReturnHome(assignment) and ADHitch ~= nil
|
||||
and ADHitch.returnHome(adEnv, vehicle, function(_, ok, detail)
|
||||
if not ok then log(assignment.fieldId, "'%s' kom ikke hjem fra puljen: %s", ADRuns.vehicleLabel(vehicle), tostring(detail)) end
|
||||
end)
|
||||
@@ -1166,8 +1172,9 @@ function ADFieldWork.follow(adEnv, assignment)
|
||||
if not hitch.done then return end
|
||||
ADPool.release(assignment)
|
||||
if not hitch.ok then
|
||||
-- koblingen fejlede: redskabet i karantæne, traktoren hjem, marken prøver igen
|
||||
ADPool.quarantine(assignment.pool.implementId, now())
|
||||
-- koblingen fejlede: den skyldige i karantæne (kom traktoren ikke frem, er det traktoren), hjem, prøv igen
|
||||
local blamed = ADPool.failureBlames(hitch.detail) == "tractor" and assignment.vehicleId or assignment.pool.implementId
|
||||
ADPool.quarantine(blamed, now())
|
||||
ADFieldWork.release(assignment)
|
||||
note(assignment.fieldId, {retryAt = now() + ADFieldWork.NO_RIG_RETRY_MS,
|
||||
reason = {text = string.format("kunne ikke koble '%s' på (%s) — prøver et andet om lidt",
|
||||
@@ -1185,10 +1192,25 @@ function ADFieldWork.follow(adEnv, assignment)
|
||||
ADHitch.returnHome(adEnv, vehicle)
|
||||
return
|
||||
end
|
||||
-- som almindelig udsendelse: tom såmaskine/sprøjte fyldes op på vejen, uden påfyldning køres den hjem igen
|
||||
local refill = refillPlan(adEnv, assignment.fieldId, vehicle, assignment.role, info.x, info.z)
|
||||
local nextDrive = ADPool.nextDrive(refill)
|
||||
if nextDrive == "empty" then
|
||||
ADFieldWork.release(assignment)
|
||||
ADHitch.returnHome(adEnv, vehicle)
|
||||
fail(assignment.fieldId, string.format("'%s' er tom for %s og der er ingen påfyldning med AutoDrive-markør — fyld den op",
|
||||
tostring(assignment.pool.implementName), fillTypeName(refill.fillType)))
|
||||
return
|
||||
end
|
||||
assignment.width, assignment.phase, assignment.since = width, "driving", now()
|
||||
assignment.startX, assignment.startZ = vehiclePosition(vehicle)
|
||||
startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, info.markerId, nil)
|
||||
assignment.drive = {mode = adEnv.AutoDrive.MODE_DRIVETO, first = info.markerId}
|
||||
if nextDrive == "load" then
|
||||
startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_LOAD, info.markerId, refill.refillId, refill.fillType)
|
||||
assignment.drive = {mode = adEnv.AutoDrive.MODE_LOAD, first = info.markerId, second = refill.refillId, fillType = refill.fillType}
|
||||
else
|
||||
startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, info.markerId, nil)
|
||||
assignment.drive = {mode = adEnv.AutoDrive.MODE_DRIVETO, first = info.markerId}
|
||||
end
|
||||
note(assignment.fieldId, {reason = false})
|
||||
log(assignment.fieldId, "%s '%s' har '%s' på — kører til %s (%.1f m)", assignment.role, ADRuns.vehicleLabel(vehicle),
|
||||
tostring(assignment.pool.implementName), tostring(info.markerName), width or 0)
|
||||
|
||||
Reference in New Issue
Block a user