From 196c2cd847b4901a11f305698610e8df6b5d7082 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Wed, 23 Sep 2026 11:49:33 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20autoload-k=C3=B8ret=C3=B8jer=20m=C3=A5le?= =?UTF-8?q?s=20i=20paller,=20ikke=20liter=20=E2=80=94=20en=20tom=20pallebi?= =?UTF-8?q?l=20er=20ikke=20'ingen=20vogn'=20(v1.12.8.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adOutbound.lua | 4 ++++ FS25_ADSmartPickup/adRunsController.lua | 9 ++++++--- FS25_ADSmartPickup/gui/SmartPickupFrame.lua | 4 +++- FS25_ADSmartPickup/l10n/l10n_da.xml | 1 + FS25_ADSmartPickup/l10n/l10n_en.xml | 1 + FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adOutbound.lua | 9 +++++++++ tests/test_adRunsController.lua | 9 +++++++++ 8 files changed, 34 insertions(+), 5 deletions(-) diff --git a/FS25_ADSmartPickup/adOutbound.lua b/FS25_ADSmartPickup/adOutbound.lua index 3636f7b..a38defb 100644 --- a/FS25_ADSmartPickup/adOutbound.lua +++ b/FS25_ADSmartPickup/adOutbound.lua @@ -102,6 +102,10 @@ local function getVehicleCapacity(adEnv, vehicle) hasAutoload = true end end + -- UAL opgiver antal paller (læssede + 1), ikke liter: liter-kapaciteten er ukendt for en pallebil + if hasAutoload and (capacity == nil or capacity < 100) then + capacity = nil + end return capacity, hasAutoload, trailers end diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 0c78f06..026a080 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -260,6 +260,8 @@ end -- ---- validering ---- +-- Liter-kapacitet for vognen; nil uden vogn. Universal Autoload opgiver ikke liter men ANTAL paller +-- (læssede + 1), så et autoload-køretøj får nil her og markeres via isAutoload i valideringen. local function getLoadCapacity(adEnv, vehicle) local trailers = adEnv.AutoDrive.getAllUnits(vehicle) if trailers == nil then @@ -402,7 +404,7 @@ local function validateOutboundVehicle(adEnv, run, vehicle, result) result.reason = "noSource" return result end - if result.capacity == nil then + if result.capacity == nil and not result.isAutoload then result.reason = "noTrailer" return result end @@ -458,7 +460,7 @@ end -- udkørsel desuden "noSource" | "noProducts" | "needsAutoload". function ADRunsController.validateVehicle(adEnv, run, vehicle) local carriable = ADRunsController.getCarriableFillTypes(adEnv, vehicle) - local result = {ok = false, carriable = carriable, capacity = getLoadCapacity(adEnv, vehicle)} + local result = {ok = false, carriable = carriable, capacity = getLoadCapacity(adEnv, vehicle), isAutoload = hasAutoload(adEnv, vehicle)} if run.kind == "outbound" then return validateOutboundVehicle(adEnv, run, vehicle, result) end @@ -472,7 +474,8 @@ function ADRunsController.validateVehicle(adEnv, run, vehicle) result.reason = "noTarget" return result end - if result.capacity == nil then + -- en pallebil har ingen liter-kapacitet, men er ikke "uden vogn" — den falder på cannotCarry nedenfor + if result.capacity == nil and not result.isAutoload then result.reason = "noTrailer" return result end diff --git a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua index 30a0af5..e55d80f 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua @@ -476,7 +476,9 @@ function SmartPickupFrame:describeVehicle(adEnv, run, vehicle, isInRun) local label = ADRunsController.getVehicleLabel(adEnv, vehicle) local validation = ADRunsController.validateVehicle(adEnv, run, vehicle) local parts = {label} - if validation.capacity ~= nil then + if validation.isAutoload and validation.capacity == nil then + table.insert(parts, self.i18n:getText("spu_capacity_pallets")) + elseif validation.capacity ~= nil then table.insert(parts, string.format(self.i18n:getText("spu_capacity"), g_i18n:formatNumber(validation.capacity, 0))) local carriable = self:describeCarriable(adEnv, run, vehicle, validation.carriable) if carriable ~= nil then diff --git a/FS25_ADSmartPickup/l10n/l10n_da.xml b/FS25_ADSmartPickup/l10n/l10n_da.xml index 7a13968..d963cfb 100644 --- a/FS25_ADSmartPickup/l10n/l10n_da.xml +++ b/FS25_ADSmartPickup/l10n/l10n_da.xml @@ -42,6 +42,7 @@ + diff --git a/FS25_ADSmartPickup/l10n/l10n_en.xml b/FS25_ADSmartPickup/l10n/l10n_en.xml index f93a22e..791cfb6 100644 --- a/FS25_ADSmartPickup/l10n/l10n_en.xml +++ b/FS25_ADSmartPickup/l10n/l10n_en.xml @@ -42,6 +42,7 @@ + diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 17049b0..ae55452 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.12.7.0 + 1.12.8.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adOutbound.lua b/tests/test_adOutbound.lua index 90ecbc3..cb1a72a 100644 --- a/tests/test_adOutbound.lua +++ b/tests/test_adOutbound.lua @@ -429,6 +429,15 @@ check("O19 tipvogn tager bulk", input19b.products[1].isPallet, false) check("O19 bulk-mængde", input19b.products[1].sources[1].available, 150000) products[1] = {{fillType = SUGAR, name = "SUGAR", available = 5000, level = 5000, capacity = 180000, isPallet = false}} +-- O20: UAL-bil: AD's "kapacitet" er antal paller (læssede + 1) -> liter-kapacitet ukendt i planen +local v20 = newVehicle("Dragon2", 100, 0, 1, true) +v20.carriable = {} +runs[v20] = outboundRun(21, {3}, {{fillType = "STRAW_BASKET", policy = "sell"}}) +local input20 = ADOutbound.buildPlanInput(adEnv, runs[v20], v20) +check("O20 kapacitet ukendt for pallebil", input20.capacity, nil) +check("O20 har autoload", input20.hasAutoload, true) +check("O20 turen planlægges alligevel", ADOutboundPlanner.plan(input20) ~= nil, true) + -- O10: install wrapper: fejl i hook stopper ikke AD local calls = {} adEnv.LoadAtDestinationTask.update = function(self, dt) calls.update = (calls.update or 0) + 1 end diff --git a/tests/test_adRunsController.lua b/tests/test_adRunsController.lua index f913870..6dd12a2 100644 --- a/tests/test_adRunsController.lua +++ b/tests/test_adRunsController.lua @@ -248,6 +248,15 @@ check("C7 sprunget over logges med årsag", skippedLogged, true) -- kapacitet under 100 l (kun trækkerens egne tanke) = ingen vogn local tinyCapacity = makeVehicle("vehicleTiny", "T255", {STRAW, TMR}, 1, 100, 0) check("C7 1 l kapacitet -> noTrailer", ADRunsController.validateVehicle(adEnv, ADRuns.getRun(ADRunsController.store, cow.id), tinyCapacity).reason, "noTrailer") +-- UAL-køretøj: AutoDrive melder kapacitet i PALLER (læssede + 1), så en tom pallebil har "1" — det er ikke "ingen vogn" +adEnv.AutoDrive.hasAL = function(_, unit) return unit.ual == true end +local palletTruck = makeVehicle("vehicleDragon", "Dragon", {}, 1, 100, 0) +palletTruck.trailers[1] = {ual = true} +local truckValidation = ADRunsController.validateVehicle(adEnv, ADRuns.getRun(ADRunsController.store, cow.id), palletTruck) +check("C7 pallebil: ikke noTrailer", truckValidation.reason ~= "noTrailer", true) +check("C7 pallebil: kapacitet i paller markeret", truckValidation.isAutoload, true) +check("C7 pallebil: liter-kapacitet ukendt", truckValidation.capacity, nil) +adEnv.AutoDrive.hasAL = nil -- C8: mål-markører (kun stalde og fabrikker — siloer tager alt og er ikke mål; stalde først, -- så fabrikker, så navn) og Wait-puljer til dropdowns