fix(reserve): staldens output (mælk/gylle) er ikke foderbehov — kun krybbe-varer/foderdefinition; Milk Salg holdt med 784k 'reserveret' (v1.17.2.0)

This commit is contained in:
2026-09-24 03:29:47 +02:00
parent 0cbe663443
commit e7c482a3cb
5 changed files with 42 additions and 4 deletions
+18 -1
View File
@@ -587,6 +587,22 @@ end
-- Stald: foder/halm/vand-rate × timer minus beholdning, højst fri plads (spec-felter som -- Stald: foder/halm/vand-rate × timer minus beholdning, højst fri plads (spec-felter som
-- Distribution Redux læser dem); automatisk vandforsyning = intet behov. -- 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) local function getHusbandryReserve(placeable, fillType)
if placeable.getHusbandryIsFillTypeSupported == nil or placeable.getHusbandryFillLevel == nil then if placeable.getHusbandryIsFillTypeSupported == nil or placeable.getHusbandryFillLevel == nil then
return 0 return 0
@@ -603,7 +619,8 @@ local function getHusbandryReserve(placeable, fillType)
rate = water.litersPerHour or 0 rate = water.litersPerHour or 0
elseif name == "STRAW" and straw ~= nil then elseif name == "STRAW" and straw ~= nil then
rate = straw.inputLitersPerHour or 0 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 rate = food.litersPerHour or 0
level = 0 level = 0
for _, value in pairs(food.fillLevels or {}) do level = level + (value or 0) end for _, value in pairs(food.fillLevels or {}) do level = level + (value or 0) end
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml version="1.0" encoding="utf-8" standalone="no"?>
<modDesc descVersion="107"> <modDesc descVersion="107">
<author>masterdraco</author> <author>masterdraco</author>
<version>1.17.1.0</version> <version>1.17.2.0</version>
<title> <title>
<en>AD Smart Pickup</en> <en>AD Smart Pickup</en>
</title> </title>
+1 -1
View File
@@ -1,6 +1,6 @@
# AD Smart Pickup — brugermanual # 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)* *English version: [USER_MANUAL.md](USER_MANUAL.md)*
+1 -1
View File
@@ -1,6 +1,6 @@
# AD Smart Pickup — user manual # 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)* *Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)*
+21
View File
@@ -287,6 +287,27 @@ tmrStorage.fillLevels[BEET] = 20000
tmrFactory.spec_productionPoint.productionPoint.getIsProductionEnabled = function() return false end tmrFactory.spec_productionPoint.productionPoint.getIsProductionEnabled = function() return false end
check("S11 slukket produktion -> 0", ADSources.getFarmDemand(adEnv, BEET, 1, {}).liters, 0) 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 -- S12 (inventar): alt gården har liggende, pr. bygning, kun bygninger med indhold
factory.ownerFarmId = 1; silo.ownerFarmId = 1; objectStorage.ownerFarmId = 1 factory.ownerFarmId = 1; silo.ownerFarmId = 1; objectStorage.ownerFarmId = 1
local inventory = ADSources.getFarmInventory(adEnv, 1) local inventory = ADSources.getFarmInventory(adEnv, 1)