feat: fyldeste kilde først for mælk/gylle/digestat (v1.5.0.0)

Lagervarer tømmes stadig mindst-fyldte-først; varer hvis tanke løber fulde og
stopper produktionen hentes fyldest-først (ADSupplyPlanner.FULLEST_FIRST_FILL_TYPES).
Strategien vises i loggen.

fix: en trigger foran næsen tæller aldrig som markørens egen (tolerance 2 -> 0).
Markør-drift i ensilage-rækken lod næste tanks rør (1,9 m foran) vinde.
Verificeret mod savegame: 40/40 siloer, 7/7 ensilage-tanke, 0 dropof.
This commit is contained in:
2026-09-21 16:34:19 +02:00
parent e6412d78e4
commit 8c76790ece
6 changed files with 97 additions and 11 deletions
+33
View File
@@ -7,6 +7,39 @@ ADSupplyPlanner = {}
-- Mindre fri plads end dette i målet regnes som "fuldt" (undgår ture med læs der ikke kan komme af).
ADSupplyPlanner.MIN_FREE_LITERS = 1000
-- Varer hvis kilder LØBER FULDE (dyr/produktion fylder tanken løbende og går i stå
-- når den er fuld): her hentes den fyldeste kilde først. Alt andet er lagervarer,
-- hvor den mindst fyldte silo tømmes først så rester ryddes og siloer frigives.
ADSupplyPlanner.FULLEST_FIRST_FILL_TYPES = {
MILK = true, GOATMILK = true, BUFFALOMILK = true, SHEEPMILK = true,
LIQUIDMANURE = true, DIGESTATE = true,
}
-- fillTypeNames: navnene på de varer der hentes på turen. Kun når ALLE er
-- "løber fuld"-varer vendes strategien; blandet eller ukendt valg = mindst først.
function ADSupplyPlanner.prefersFullestSource(fillTypeNames)
if #fillTypeNames == 0 then
return false
end
for _, name in ipairs(fillTypeNames) do
if not ADSupplyPlanner.FULLEST_FIRST_FILL_TYPES[name] then
return false
end
end
return true
end
-- Er en kilde med dette niveau bedre end den hidtil bedste (nil = ingen endnu)?
function ADSupplyPlanner.isBetterSource(level, bestLevel, prefersFullest)
if bestLevel == nil then
return true
end
if prefersFullest then
return level > bestLevel
end
return level < bestLevel
end
function ADSupplyPlanner.copyList(list)
local copy = {}
for index, value in ipairs(list) do