From c0f523700e0c3d61421b8dcf6e6269d7d759ba92 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Thu, 24 Sep 2026 04:01:26 +0200 Subject: [PATCH] =?UTF-8?q?fix(silo):=20varer=20=3D=20l=C3=A6ssestationens?= =?UTF-8?q?=20pulje=20(tom=20m=C3=A6lketank=20med=20fuld=20pulje=20viste?= =?UTF-8?q?=20ingen=20m=C3=A6lk=20->=20noProducts);=20sammenl=C3=A6gning?= =?UTF-8?q?=20af=20kilder=20kun=20for=20siloer,=20ikke=20staldes=20m=C3=A6?= =?UTF-8?q?lke/gyllepunkter=20(v1.17.4.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adOutbound.lua | 6 +++++- FS25_ADSmartPickup/adSources.lua | 15 +++++++++++++++ FS25_ADSmartPickup/modDesc.xml | 2 +- docs/BRUGERMANUAL.md | 2 +- docs/USER_MANUAL.md | 2 +- tests/test_adOutbound.lua | 21 +++++++++++++++++++++ tests/test_adSources.lua | 7 +++++++ 7 files changed, 51 insertions(+), 4 deletions(-) diff --git a/FS25_ADSmartPickup/adOutbound.lua b/FS25_ADSmartPickup/adOutbound.lua index dde2738..a97a3ed 100644 --- a/FS25_ADSmartPickup/adOutbound.lua +++ b/FS25_ADSmartPickup/adOutbound.lua @@ -64,7 +64,11 @@ end -- Lagrene en kildes læssestation trækker fra (FS25: sourceStorages = {[storage] = storage}); nil = ukendt. local function sourceStorages(source) - local station = source ~= nil and source.station or nil + -- kun siloer: en stalds mælke- og gyllepunkt deler også lager, men er forskellige læssepunkter + if source == nil or source.kind ~= "silo" then + return nil + end + local station = source.station if station == nil or type(station.sourceStorages) ~= "table" then return nil end diff --git a/FS25_ADSmartPickup/adSources.lua b/FS25_ADSmartPickup/adSources.lua index 2096201..492bf28 100644 --- a/FS25_ADSmartPickup/adSources.lua +++ b/FS25_ADSmartPickup/adSources.lua @@ -286,6 +286,21 @@ local function getSiloProducts(source) end end end + -- Udvidelses-lagre (fx mælketanke med isExtension) deles af alle læssestationer inden for + -- storageRadius: tanken selv kan være tom mens puljen er fuld. Læssestationens tal er det man kan hente. + local station = source.station + if station ~= nil and station.getAllFillLevels ~= nil then + local farmId = g_currentMission ~= nil and g_currentMission.getFarmId ~= nil and g_currentMission:getFarmId() or 1 + local ok, pooled, pooledCapacity = pcall(station.getAllFillLevels, station, farmId) + if ok and type(pooled) == "table" then + for fillType, level in pairs(pooled) do + if (level or 0) > (levels[fillType] or 0) then + levels[fillType] = level + capacities[fillType] = math.max(capacities[fillType] or 0, tonumber(pooledCapacity) or 0, level) + end + end + end + end local products = {} for fillType, level in pairs(levels) do table.insert(products, newProduct(fillType, level, level, capacities[fillType] or 0, false)) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index a2beaf4..97b6f28 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.17.3.0 + 1.17.4.0 <en>AD Smart Pickup</en> diff --git a/docs/BRUGERMANUAL.md b/docs/BRUGERMANUAL.md index f73b1de..6f31cfa 100644 --- a/docs/BRUGERMANUAL.md +++ b/docs/BRUGERMANUAL.md @@ -1,6 +1,6 @@ # AD Smart Pickup — brugermanual -Version 1.17.3 · Farming Simulator 25 · tillæg til AutoDrive +Version 1.17.4 · Farming Simulator 25 · tillæg til AutoDrive *English version: [USER_MANUAL.md](USER_MANUAL.md)* diff --git a/docs/USER_MANUAL.md b/docs/USER_MANUAL.md index adf0334..7ab2347 100644 --- a/docs/USER_MANUAL.md +++ b/docs/USER_MANUAL.md @@ -1,6 +1,6 @@ # AD Smart Pickup — user manual -Version 1.17.3 · Farming Simulator 25 · add-on for AutoDrive +Version 1.17.4 · Farming Simulator 25 · add-on for AutoDrive *Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)* diff --git a/tests/test_adOutbound.lua b/tests/test_adOutbound.lua index 8f18aff..1af7729 100644 --- a/tests/test_adOutbound.lua +++ b/tests/test_adOutbound.lua @@ -549,6 +549,8 @@ do local st1, st2 = sources[1].station, sources[2].station sources[1].station = {name = "tankA", sourceStorages = {[pool] = pool}} sources[2].station = {name = "tankB", sourceStorages = {[pool] = pool}} + local k1, k2 = sources[1].kind, sources[2].kind + sources[1].kind, sources[2].kind = "silo", "silo" local vPool = newVehicle("Tank", 0, 0, 10000) runs[vPool] = outboundRun(77, {1, 2}, {{fillType = "SUGAR", policy = "sell"}}, {collectRound = true}) local inputPool = ADOutbound.buildPlanInput(adEnv, runs[vPool], vPool) @@ -559,6 +561,25 @@ do check("O-pool kun første kilde", table.concat(ids, ","), "1") check("O-pool logget", lastLog("deler lager") ~= nil, true) sources[1].station, sources[2].station = st1, st2 + sources[1].kind, sources[2].kind = k1, k2 +end + +-- O-pool-stald: mælke- og gyllemarkør ved samme stald deler lager, men er forskellige læssepunkter +do + local pool = {} + sources[31] = {kind = "husbandry", wayPointId = 31, station = {name = "barnSlurry", sourceStorages = {[pool] = pool}}, name = "Stald"} + sources[32] = {kind = "husbandry", wayPointId = 32, station = {name = "barnMilk", sourceStorages = {[pool] = pool}}, name = "Stald"} + products[31] = {{fillType = SUGAR_FT or 5, name = "SUGAR", title = "Sukker", available = 20000, level = 20000, capacity = 50000, isPallet = false}} + products[32] = {{fillType = SUGAR_FT or 5, name = "SUGAR", title = "Sukker", available = 20000, level = 20000, capacity = 50000, isPallet = false}} + local vBarn = newVehicle("Tank2", 0, 0, 10000) + runs[vBarn] = outboundRun(78, {31, 32}, {{fillType = "SUGAR", policy = "sell"}}, {collectRound = true}) + local inputBarn = ADOutbound.buildPlanInput(adEnv, runs[vBarn], vBarn) + local ids = {} + for _, product in ipairs(inputBarn.products) do + for _, source in ipairs(product.sources) do table.insert(ids, tostring(source.wayPointId)) end + end + check("O-pool-stald: stalde lægges ikke sammen", table.concat(ids, ","), "31,32") + sources[31], sources[32], products[31], products[32] = nil, nil, nil, nil end print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) diff --git a/tests/test_adSources.lua b/tests/test_adSources.lua index bee7fb7..96a1483 100644 --- a/tests/test_adSources.lua +++ b/tests/test_adSources.lua @@ -370,6 +370,13 @@ check("S14b stald + udvidelsestank", products14b[1].level, 138187) check("S14b tilgængeligt = samlet", products14b[1].available, 138187) milkStation.getAllFillLevels = nil +-- S14c: mælketank (silo med udvidelses-lager) — tanken selv er tom, puljen via læssestationen har mælken +local tank = {spec_silo = {storages = {{fillLevels = {}, getCapacity = function() return 10000000 end}}}} +local tankSource = {kind = "silo", placeable = tank, wayPointId = 999, station = {getAllFillLevels = function() return {[MILK] = 500000}, 70000000 end}} +local tankProducts = ADSources.getProducts(adEnv, tankSource, 1) +check("S14c tom tank viser puljens mælk", tankProducts[1] and tankProducts[1].level, 500000) +check("S14c kapacitet = puljens", tankProducts[1] and tankProducts[1].capacity, 70000000) + -- S15: forklaring af en markør til advarslen (hvad opslaget ser) check("S15 forklaring stald", ADSources.explainMarker(adEnv, 10, 1), "læssestation ved markøren hører til 'Kostald' (stald)") check("S15 forklaring ingen station", ADSources.explainMarker(adEnv, 4, 1), "ingen læssestation ved markøren, og ingen fabrik/objektlager inden for 40 m")