diff --git a/FS25_ADSmartPickup/adSources.lua b/FS25_ADSmartPickup/adSources.lua index 5187298..2096201 100644 --- a/FS25_ADSmartPickup/adSources.lua +++ b/FS25_ADSmartPickup/adSources.lua @@ -587,6 +587,22 @@ end -- Stald: foder/halm/vand-rate × timer minus beholdning, højst fri plads (spec-felter som -- Distribution Redux læser dem); automatisk vandforsyning = intet behov. +-- Foder = varer i krybben ELLER i dyretypens foderdefinition (tom krybbe har ingen niveauer). +-- Mælk/gylle er staldens output og understøttes kun som lager. +local function isFoodFillType(placeable, fillType) + local food = placeable.spec_husbandryFood + if food == nil then return false end + if food.fillLevels ~= nil and food.fillLevels[fillType] ~= nil then return true end + local system = g_currentMission ~= nil and g_currentMission.animalFoodSystem or nil + local animalFood = system ~= nil and system.getAnimalFood ~= nil and system:getAnimalFood(food.animalTypeIndex) or nil + for _, group in pairs(animalFood ~= nil and animalFood.groups or {}) do + for _, candidate in pairs(group.fillTypes or {}) do + if candidate == fillType then return true end + end + end + return false +end + local function getHusbandryReserve(placeable, fillType) if placeable.getHusbandryIsFillTypeSupported == nil or placeable.getHusbandryFillLevel == nil then return 0 @@ -603,7 +619,8 @@ local function getHusbandryReserve(placeable, fillType) rate = water.litersPerHour or 0 elseif name == "STRAW" and straw ~= nil then rate = straw.inputLitersPerHour or 0 - elseif food ~= nil then + elseif food ~= nil and isFoodFillType(placeable, fillType) then + -- kun varer i foderkrybben er foder; mælk/gylle er staldens OUTPUT (understøttet som lager) rate = food.litersPerHour or 0 level = 0 for _, value in pairs(food.fillLevels or {}) do level = level + (value or 0) end diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 51f1315..4645a49 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.17.1.0 + 1.17.2.0 <en>AD Smart Pickup</en> diff --git a/docs/BRUGERMANUAL.md b/docs/BRUGERMANUAL.md index 5172251..f4472e8 100644 --- a/docs/BRUGERMANUAL.md +++ b/docs/BRUGERMANUAL.md @@ -1,6 +1,6 @@ # AD Smart Pickup — brugermanual -Version 1.17.1 · Farming Simulator 25 · tillæg til AutoDrive +Version 1.17.2 · 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 5b545c4..c650cd5 100644 --- a/docs/USER_MANUAL.md +++ b/docs/USER_MANUAL.md @@ -1,6 +1,6 @@ # AD Smart Pickup — user manual -Version 1.17.1 · Farming Simulator 25 · add-on for AutoDrive +Version 1.17.2 · Farming Simulator 25 · add-on for AutoDrive *Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)* diff --git a/tests/test_adSources.lua b/tests/test_adSources.lua index 97fb0a2..bee7fb7 100644 --- a/tests/test_adSources.lua +++ b/tests/test_adSources.lua @@ -287,6 +287,27 @@ tmrStorage.fillLevels[BEET] = 20000 tmrFactory.spec_productionPoint.productionPoint.getIsProductionEnabled = function() return false end check("S11 slukket produktion -> 0", ADSources.getFarmDemand(adEnv, BEET, 1, {}).liters, 0) +-- S11b: staldens OUTPUT (mælk, gylle) er aldrig et behov — kun varer i foderkrybben er foder +local MILK_OUT = 13 +local feedBarn = { + rootNode = {x = 960, z = 960}, ownerFarmId = 1, getOwnerFarmId = function() return 1 end, getName = function() return "Malkestald" end, + spec_husbandryFood = {litersPerHour = 2000, fillLevels = {[FORAGE] = 1000}}, + getHusbandryIsFillTypeSupported = function(self, ft) return ft == MILK_OUT or ft == FORAGE end, + getHusbandryFillLevel = function(self, ft) return ft == MILK_OUT and 200000 or ft == FORAGE and 1000 or 0 end, + getHusbandryFreeCapacity = function(self, ft) return 9999999 end, +} +table.insert(g_currentMission.placeableSystem.placeables, feedBarn) +check("S11b mælk er ikke behov", ADSources.getFarmDemand(adEnv, MILK_OUT, 1, {}).liters, 0) +check("S11b foder er behov (2000 l/t × 24 − 1000)", ADSources.getFarmDemand(adEnv, FORAGE, 1, {}).liters, 47000) +-- tom krybbe: foderet kendes fra dyretypens foderdefinition +feedBarn.spec_husbandryFood.fillLevels = {} +feedBarn.getHusbandryFillLevel = function(self, ft) return ft == MILK_OUT and 200000 or 0 end +g_currentMission.animalFoodSystem = {getAnimalFood = function() return {groups = {{fillTypes = {FORAGE}}}} end} +check("S11b tom krybbe: foder stadig behov", ADSources.getFarmDemand(adEnv, FORAGE, 1, {}).liters, 48000) +check("S11b tom krybbe: mælk stadig ikke behov", ADSources.getFarmDemand(adEnv, MILK_OUT, 1, {}).liters, 0) +g_currentMission.animalFoodSystem = nil +table.remove(g_currentMission.placeableSystem.placeables) + -- S12 (inventar): alt gården har liggende, pr. bygning, kun bygninger med indhold factory.ownerFarmId = 1; silo.ownerFarmId = 1; objectStorage.ownerFarmId = 1 local inventory = ADSources.getFarmInventory(adEnv, 1)