diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 4f01827..d1de195 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -777,9 +777,17 @@ function ADRunsController.findWrongCargoDump(adEnv, run, vehicle, targetId) return nil end local farmId = ADSmartPickup.getFarmId(vehicle) - for _, entry in ipairs(getTargetStations(adEnv, run, farmId)) do - if ADSmartPickup.getStationLevelAndCapacity(entry.station, fillType, farmId) ~= nil then - return nil + -- Lasten hører til run'et: valgte varer ("Vælg"), eller alt målet tager ("Auto"). Kun så afleveres + -- den ved målet — ellers havnede fx gødning i en ensilage-DOB, fordi DOB'en også tager gødning. + if run.ingredientMode == "manual" then + for _, index in ipairs(ADRunsController.getRunIngredients(adEnv, run, vehicle)) do + if index == fillType then return nil end + end + else + for _, entry in ipairs(getTargetStations(adEnv, run, farmId)) do + if ADSmartPickup.getStationLevelAndCapacity(entry.station, fillType, farmId) ~= nil then + return nil + end end end local isReachable = function(markerId) diff --git a/FS25_ADSmartPickup/adSmartPickup.lua b/FS25_ADSmartPickup/adSmartPickup.lua index be6120a..3705a19 100644 --- a/FS25_ADSmartPickup/adSmartPickup.lua +++ b/FS25_ADSmartPickup/adSmartPickup.lua @@ -921,6 +921,16 @@ local function installLoadWaitHook(adEnv) local cargoName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType) local wantedName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(pickup.fillType) or tostring(pickup.fillType) Logging.info(ADSmartPickup.LOG_PREFIX .. "'%s' har %.0f l %s på vognen og skulle hente %s — leverer først det den har", tostring(ADRuns.vehicleLabel(loadTask.vehicle)), liters, tostring(cargoName), tostring(wantedName)) + -- hører lasten ikke til run'et (fx gødning i et ensilage-run), køres den til en silo der tager den + local run = ADRunsController ~= nil and ADRunsController.getRunForVehicle(loadTask.vehicle) or nil + if run ~= nil and ADRunsController.findWrongCargoDump ~= nil and ADUnloadWait.setDumpTarget ~= nil then + local stateModule = loadTask.vehicle.ad.stateModule + local current = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil + local ok, dump = pcall(ADRunsController.findWrongCargoDump, adEnv, run, loadTask.vehicle, current ~= nil and current.id or nil) + if ok and dump ~= nil then + ADUnloadWait.setDumpTarget(loadTask.vehicle, dump.marker.id) + end + end return true end diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 48282ed..5715e49 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.18.6.0 + 1.18.7.0 <en>AD Smart Pickup</en> diff --git a/docs/BRUGERMANUAL.md b/docs/BRUGERMANUAL.md index 9bfcadc..d87dbae 100644 --- a/docs/BRUGERMANUAL.md +++ b/docs/BRUGERMANUAL.md @@ -1,6 +1,6 @@ # AD Smart Pickup — brugermanual -Version 1.18.6 · Farming Simulator 25 · tillæg til AutoDrive +Version 1.18.7 · Farming Simulator 25 · tillæg til AutoDrive *English version: [USER_MANUAL.md](USER_MANUAL.md)* @@ -218,6 +218,12 @@ ensilage, hø, halm og mineralfoder af sig selv. Slukker du den, holder traktore som kortet selv har slukket på grund af manglende input, tæller som ønskede, for dem skal der netop fyldes på. +### Forkert last på vognen + +Har en traktor en vare på vognen, som ikke er en af flowets varer, køres den først til en silo, der +tager varen. Den afleveres ikke ved flowets mål, heller ikke når målet tager varen. Med **Vælg** tæller +kun de afkrydsede varer. Med **Auto** tæller alt, målet tager. + ### Bedste foder først Foder i et stald-trug deler plads. Står bedre foder som **TMR** på listen, hentes lavere foder som diff --git a/docs/USER_MANUAL.md b/docs/USER_MANUAL.md index c69d9d2..0717ceb 100644 --- a/docs/USER_MANUAL.md +++ b/docs/USER_MANUAL.md @@ -1,6 +1,6 @@ # AD Smart Pickup — user manual -Version 1.18.6 · Farming Simulator 25 · add-on for AutoDrive +Version 1.18.7 · Farming Simulator 25 · add-on for AutoDrive *Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)* @@ -220,6 +220,12 @@ silage, hay, straw and mineral feed by itself. Switch it off, and the tractor st the map switched off because an input ran out still count as wanted, because those are exactly the ones that need filling. +### Wrong cargo on the trailer + +If a tractor has a good on the trailer that is not one of the flow's goods, it first takes it to a +silo that accepts it. It is not unloaded at the flow's target, even when the target accepts the good. +With **Select**, only the ticked goods count. With **Auto**, everything the target accepts counts. + ### Best feed first Feed in a barn trough shares space. If better feed such as **TMR** is on the list, lower feed such diff --git a/tests/test_adRunsController.lua b/tests/test_adRunsController.lua index b05a6e7..407c2d7 100644 --- a/tests/test_adRunsController.lua +++ b/tests/test_adRunsController.lua @@ -440,6 +440,19 @@ sugarVehicle.loadType = TMR sugarVehicle.ad.stateModule.active = false ADRunsController.startRun(adEnv, sugar.id) check("C18 rigtig last -> målet", sugarVehicle.ad.stateModule.secondMarkerId, 77) +-- C18b: målet TAGER varen, men den er ikke en af run'ets valgte varer (gødning i en ensilage-DOB) +-- -> aflæs i en silo der tager den, ikke i målet +unloadAt[77].accepts = {[TMR] = 360000, [STRAW] = 360000} +ADRunsController.updateRun(sugar.id, {ingredientMode = "manual", ingredients = {"FORAGE"}}) +sugarVehicle.loadType = STRAW +sugarVehicle.ad.stateModule.active = false +ADRunsController.startRun(adEnv, sugar.id) +check("C18b forkert vare for run'et -> silo, ikke målet", sugarVehicle.ad.stateModule.secondMarkerId, 44) +-- auto-varer: alt målet tager hører til -> målet +ADRunsController.updateRun(sugar.id, {ingredientMode = "auto", ingredients = {}}) +sugarVehicle.ad.stateModule.active = false +ADRunsController.startRun(adEnv, sugar.id) +check("C18b auto: målet tager varen -> målet", sugarVehicle.ad.stateModule.secondMarkerId, 77) ADUnloadWait = nil; ADLoadSwap = nil -- C19: Wait-markører er aldrig mål — heller ikke når de står inden for 40 m af staldens trigger