feat: bedste foder først — lavere foder kun når truget er nødlidende (≥75 % fri); forsynings-traktorer uden noget at hente holder ved Wait (v1.14.0.0)

This commit is contained in:
2026-09-24 00:56:01 +02:00
parent 75fd123213
commit 1b7b74ad2c
6 changed files with 112 additions and 5 deletions
+22
View File
@@ -191,6 +191,7 @@ function ADSupplyPlanner.rankNeeds(needs, loadCapacity)
fits = ADSupplyPlanner.fullLoadFits(freeSpace, loadCapacity),
score = need.scoreOverride or ADSupplyPlanner.scoreNeed(need.level, need.capacity, freeSpace, minutesToEmpty),
priority = need.priority or 0,
trough = need.scoreOverride ~= nil,
})
end
end
@@ -209,6 +210,27 @@ function ADSupplyPlanner.rankNeeds(needs, loadCapacity)
return ranked
end
-- ---- bedste foder først ----
-- Foder i et stald-trug deler plads. Lavere foder (ensilage/hø, vægt 0,8) må kun hentes når der er
-- bedre foder (TMR, 1,0) på listen, hvis truget er nødlidende: mindst så stor en andel fri.
ADSupplyPlanner.EMERGENCY_TROUGH_FREE = 0.75
-- need.trough = true for foder i et fælles trug; need.score = trugets fri andel; need.priority = fodervægt.
function ADSupplyPlanner.bestFoodPriority(needs)
local best = nil
for _, need in ipairs(needs or {}) do
if need.trough and (best == nil or (need.priority or 0) > best) then best = need.priority or 0 end
end
return best
end
function ADSupplyPlanner.isFoodAllowed(need, bestPriority)
if not need.trough or bestPriority == nil or (need.priority or 0) >= bestPriority then
return true
end
return (need.score or 0) >= ADSupplyPlanner.EMERGENCY_TROUGH_FREE
end
-- state: nil eller {ingredients, narrowedTo} fra forrige tur. selected: AD's aktuelle varevalg.
-- >1 valgt = (ny) ingrediensliste. Præcis den vare vi selv indsnævrede til = gemt liste.
-- Alt andet = brugeren har valgt noget andet -> nil (behovsstyring fra).