diff --git a/FS25_ADSmartPickup/adFieldWork.lua b/FS25_ADSmartPickup/adFieldWork.lua index e97a5d0..85c6f21 100644 --- a/FS25_ADSmartPickup/adFieldWork.lua +++ b/FS25_ADSmartPickup/adFieldWork.lua @@ -288,6 +288,27 @@ local function preflight(field, role) return true end +ADFieldWork.REFILL_ROLES = {seeder = true, fertilizer = true, limer = true, weeder = true} + +local function fillTypeName(fillType) + return g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType) +end + +-- Før udsendelse: forkert vare af (kalk på, skal gøde), og er sættet tomt, findes påfyldningen. +-- Returnerer {fillType, empty, refillId} eller nil (sættet bruger intet fyld: strigle, plov ...). +local function refillPlan(adEnv, fieldId, vehicle, role, x, z) + if not ADFieldWork.REFILL_ROLES[role] then return nil end + local dumped, dumpedName = ADCpBridge.emptySprayerIfWrong(vehicle, role) + if dumped > 0 then + log(fieldId, "'%s' tømt for %.0f l %s (skal bruges til %s)", ADRuns.vehicleLabel(vehicle), dumped, tostring(dumpedName), tostring(role)) + end + local fillType = ADCpBridge.getRefillFillType(vehicle, role) + if fillType == nil then return nil end + local empty = ADCpBridge.getRefillLevel(vehicle, fillType) <= 0 + local refillId = empty and ADFieldWork.findRefillMarker(adEnv, vehicle, fillType, x, z) or nil + return {fillType = fillType, empty = empty, refillId = refillId} +end + function ADFieldWork.dispatch(adEnv, field, info, decision) local role = decision.role local ok, reason = preflight(field, role) @@ -319,10 +340,24 @@ function ADFieldWork.dispatch(adEnv, field, info, decision) groupSize = decision.helper and 1 or count, lane = count > 1 and lanes[index] or nil, leader = index == 1, fillType = decision.helper and info.harvestFillType or nil, } + local refill = refillPlan(adEnv, field.id, rig.vehicle, role, info.x, info.z) + if refill ~= nil and refill.empty and refill.refillId == nil then + -- tom og intet sted at fylde op: ud på marken ville den bare køre kurset uden at sprede + fail(field.id, string.format("'%s' er tom for %s og der er ingen påfyldning med AutoDrive-markør — fyld den op", rig.label, fillTypeName(refill.fillType))) + return + end ADFieldJobs.state.assignments[rig.id] = assignment - startAd(adEnv, rig.vehicle, adEnv.AutoDrive.MODE_DRIVETO, info.markerId, nil) - 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 "") + 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) + 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) + 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 end note(field.id, {reason = false}) end @@ -379,11 +414,6 @@ end -- og genstarter CP. Findes ingen påfyldning, stopper sættet når det er tomt ("tom for …", se finish). local function prepareRefill(adEnv, field, info, assignment) local vehicle = assignment.vehicle - -- forkert vare på (kalk, skal gøde): tøm først, så AutoDrive fylder den rigtige på - local dumped, dumpedName = ADCpBridge.emptySprayerIfWrong(vehicle, assignment.role) - if dumped > 0 then - log(field.id, "'%s' tømt for %.0f l %s (skal bruges til %s)", ADRuns.vehicleLabel(vehicle), dumped, tostring(dumpedName), tostring(assignment.role)) - end local fillType = ADCpBridge.getRefillFillType(vehicle, assignment.role) if fillType == nil then return end assignment.refillFillType = fillType @@ -514,6 +544,15 @@ end local function beginWork(adEnv, field, info, assignment) local vehicle = assignment.vehicle + -- aldrig Courseplay med tom tank (den kører kurset uden at sprede/så) + if ADFieldWork.REFILL_ROLES[assignment.role] then + local fillType = ADCpBridge.getRefillFillType(vehicle, assignment.role) + if fillType ~= nil and ADCpBridge.getRefillLevel(vehicle, fillType) <= 0 then + ADFieldWork.release(assignment) + fail(field.id, string.format("'%s' er stadig tom for %s ved marken — fyld den op", ADRuns.vehicleLabel(vehicle), fillTypeName(fillType))) + return + end + end if assignment.role == "unloader" then return beginUnloader(adEnv, field, info, assignment) end if assignment.role == "baleCollector" then return beginBaleCollector(adEnv, field, info, assignment) end -- høsteren: halmskår efter planen (hakkes = fra; samles op/presses = skår) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index f085a5f..eaa4ca7 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.29.1.0 + 1.29.2.0 <en>AD Smart Pickup</en> diff --git a/docs/TESTPLAN-markarbejde.md b/docs/TESTPLAN-markarbejde.md index 8c7c1f0..91ea81a 100644 --- a/docs/TESTPLAN-markarbejde.md +++ b/docs/TESTPLAN-markarbejde.md @@ -119,9 +119,10 @@ Afgrøde "Samme som høstet", Tromle Ja. Kalk Ja. (stort ukrudt, > 4). Græs ukrudtsbehandles ikke. - [ ] **6.4 Kalk.** Jord der trænger til kalk → kalkspreder. - [ ] **6.5 Påfyldning.** Sprøjte/spreder der løber tør → AutoDrive fylder op og kører tilbage. -- [ ] **6.6 Tom spreder (v1.28.8).** Tom Bredal-spreder bag en traktor vises i markflåden og sendes til - gødskning (F109) → Courseplay melder tom med det samme → AutoDrive fylder gødning og kører tilbage. - ⚠ Usikkert: starter Courseplay overhovedet med en tom spreder? Hvis ikke, skriv loggen. +- [ ] **6.6 Tom sprøjte/spreder (v1.29.2).** Tom sættes i gang → log `er tom — fyldes med X ved og + kører så til F` → AutoDrive (LOAD) fylder op og kører til marken → Courseplay starter med fyld. + Ingen påfyldning med AD-markør → sendes IKKE ud; marken viser "er tom for X … fyld den op". + Sikkerhedsnet: Courseplay startes aldrig med tom tank ("er stadig tom … ved marken"). - [ ] **6.7 Forkert vare (v1.28.8).** Spreder med kalk sendes til gødskning kun hvis ingen tom/gødet spreder findes → log `tømt for N l LIME (skal bruges til fertilizer)` → fyldes med gødning.