feat(markarbejde): faste maskiner pr. mark (bruges kun dér; marken venter på sin egen); fix: AD-påfyldning får varen sat (kom tom tilbage); AD der stopper undervejs startes igen 2x, ellers hjem til parkering (v1.30.0.0)
This commit is contained in:
@@ -15,6 +15,8 @@ ADFieldWork.PLAYER_DRIVING_KMH = 3
|
||||
ADFieldWork.WINDROW_MEASURE_MS = 10000
|
||||
-- mangler der sæt, prøves igen efter så lang tid (ikke hvert sekund over hele flåden)
|
||||
ADFieldWork.NO_RIG_RETRY_MS = 30000
|
||||
-- AutoDrive der stopper før markøren startes igen så mange gange, før turen opgives
|
||||
ADFieldWork.DRIVE_RETRIES = 2
|
||||
ADFieldWork.REFILL_ROLES = {seeder = true, fertilizer = true, limer = true, weeder = true}
|
||||
|
||||
local function log(...) ADFieldJobs.log(...) end
|
||||
@@ -57,12 +59,18 @@ local function helperCp(adEnv)
|
||||
return adEnv.ADStateModule ~= nil and adEnv.ADStateModule.HELPER_CP or 1
|
||||
end
|
||||
|
||||
local function startAd(adEnv, vehicle, mode, firstId, secondId)
|
||||
-- fillType (valgfri, LOAD): varen AutoDrive skal læsse — uden den kører AD til påfyldningen og hjem tom
|
||||
-- (in-game 26/9: sprøjten kom tom tilbage fra Buying Station Multifruit)
|
||||
local function startAd(adEnv, vehicle, mode, firstId, secondId, fillType)
|
||||
local module = stateModule(vehicle)
|
||||
stopAd(vehicle)
|
||||
module:setMode(mode)
|
||||
module:setFirstMarkerByWayPointId(firstId)
|
||||
if secondId ~= nil then module:setSecondMarkerByWayPointId(secondId) end
|
||||
if fillType ~= nil then
|
||||
module:setFillType(fillType)
|
||||
module.selectedFillTypes = {fillType}
|
||||
end
|
||||
module:setStartHelper(false)
|
||||
if module.setActualFarmId ~= nil then module:setActualFarmId(vehicle:getOwnerFarmId()) end
|
||||
module:raiseDirtyFlag()
|
||||
@@ -316,7 +324,10 @@ function ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
note(field.id, {retryAt = now() + ADFieldModel.RETRY_MS, reason = reason})
|
||||
return
|
||||
end
|
||||
local candidates = ADFieldWork.getRigs(adEnv)
|
||||
-- faste maskiner: andre markers faste bruges ikke; har marken selv faste med rollen, kun dem
|
||||
local rigIdsByField = {}
|
||||
for fieldId, other in pairs(ADFieldJobs.state.fields) do rigIdsByField[fieldId] = other.plan ~= nil and other.plan.rigIds or nil end
|
||||
local candidates = ADFieldFleet.filterDedicated(ADFieldWork.getRigs(adEnv), field.id, role, rigIdsByField)
|
||||
local required = ADFieldModel.requiredWidth(field, role)
|
||||
local accept = acceptFor(field, info, role)
|
||||
local rigs, why, args
|
||||
@@ -349,12 +360,14 @@ function ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||
ADFieldJobs.state.assignments[rig.id] = assignment
|
||||
if refill ~= nil and refill.empty then
|
||||
-- AutoDrive LOAD: påfyldningen (2. markør), fyld op, videre til F-markøren (1.) — så Courseplay
|
||||
startAd(adEnv, rig.vehicle, adEnv.AutoDrive.MODE_LOAD, info.markerId, refill.refillId)
|
||||
startAd(adEnv, rig.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}
|
||||
local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(refill.refillId)
|
||||
log(field.id, "%s '%s' er tom — fyldes med %s ved %s og kører så til %s", role, rig.label, fillTypeName(refill.fillType),
|
||||
tostring(marker ~= nil and marker.name or refill.refillId), tostring(info.markerName))
|
||||
else
|
||||
startAd(adEnv, rig.vehicle, adEnv.AutoDrive.MODE_DRIVETO, info.markerId, nil)
|
||||
assignment.drive = {mode = adEnv.AutoDrive.MODE_DRIVETO, first = info.markerId}
|
||||
log(field.id, "%s '%s' sendt til %s (%.1f m%s)", role, rig.label, tostring(info.markerName), rig.width or 0,
|
||||
assignment.lane ~= nil and string.format(", bane %d", assignment.lane) or "")
|
||||
end
|
||||
@@ -751,9 +764,20 @@ function ADFieldWork.follow(adEnv, assignment)
|
||||
local distance = wayPoint ~= nil and math.sqrt((wayPoint.x - x) ^ 2 + (wayPoint.z - z) ^ 2) or math.huge
|
||||
if distance <= ADFieldWork.ARRIVE_DISTANCE then
|
||||
beginWork(adEnv, field, info, assignment)
|
||||
elseif assignment.drive ~= nil and (assignment.driveRetries or 0) < ADFieldWork.DRIVE_RETRIES then
|
||||
-- AutoDrive stoppede undervejs (spilleren byggede, trafik, ...): kør videre i stedet for at opgive
|
||||
assignment.driveRetries = (assignment.driveRetries or 0) + 1
|
||||
assignment.since = now()
|
||||
local d = assignment.drive
|
||||
startAd(adEnv, vehicle, d.mode, d.first, d.second, d.fillType)
|
||||
log(assignment.fieldId, "'%s' stoppede %.0f m fra %s — AutoDrive startes igen (%d/%d)", ADRuns.vehicleLabel(vehicle), distance,
|
||||
tostring(info ~= nil and info.markerName or "?"), assignment.driveRetries, ADFieldWork.DRIVE_RETRIES)
|
||||
else
|
||||
ADFieldWork.release(assignment)
|
||||
fail(assignment.fieldId, string.format("%s nåede ikke %s (%.0f m væk)", ADRuns.vehicleLabel(vehicle), tostring(info ~= nil and info.markerName or "?"), distance))
|
||||
-- ikke efterladt midt på vejen/ved en mark: hjem til parkeringen
|
||||
local park = parkMarkerId(adEnv, vehicle)
|
||||
if park ~= nil then startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
||||
end
|
||||
end
|
||||
elseif assignment.phase == "waitingCourse" then
|
||||
|
||||
Reference in New Issue
Block a user