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
+20
View File
@@ -3,6 +3,9 @@
local SUGARBEET, WHEAT = 10, 11
local HAY, GRASS, SILAGE = 20, 21, 22
local MILK = 30
local FILL_TYPE_NAMES = {[SUGARBEET] = "SUGARBEET", [WHEAT] = "WHEAT", [HAY] = "DRYGRASS_WINDROW", [GRASS] = "GRASS_WINDROW", [SILAGE] = "SILAGE", [MILK] = "MILK"}
g_fillTypeManager = {getFillTypeNameByIndex = function(_, index) return FILL_TYPE_NAMES[index] end}
local logLines = {}
-- ---- FS25-mocks ----
@@ -357,6 +360,15 @@ addMarker(2, "1 Silage Pickup", "Ensilage", 1247, -2278, 1247, -2266) -- køre
table.insert(stations, makeStation(101, 1247, -2271, {[SILAGE] = 4000}))
check("G3 pickup-markøren vælges, ikke dropoff", manager:getNextPickup(makeDriver(markers[1], {SILAGE}), false), 2)
-- G5: markør-drift i en tank-række — næste tanks rør ligger 2 m FORAN næsen og er
-- nærmest, men vognen holder under røret 11 m bagved
resetWorld()
addMarker(1, "5 Silage Pickup", "Ensilage", 1246, -2218, 1246, -2230) -- kører +z
table.insert(stations, makeStation(101, 1246, -2216, {[SILAGE] = 9000})) -- 2 m foran næsen
table.insert(stations, makeStation(102, 1246, -2229, {[HAY] = 4000})) -- 11 m bag næsen: kun den har hø
addMarker(2, "6 Silage Pickup", "Ensilage", 1246, -2208, 1246, -2218)
check("G5 markør 5 hører til tanken bag næsen", manager:getNextPickup(makeDriver(markers[1], {HAY}), false), 1)
-- G4: kurve ind til markøren -> retningen snyder og røret ligger "foran"; tæt på = ok
resetWorld()
addMarker(1, "7 Silage Pickup", "Ensilage", 100, 0, 100, 20) -- kører -z
@@ -380,6 +392,14 @@ check("L9 sluppet greb logges som advarsel", logLines[#logLines]:sub(1, 4), "WAR
FS25_AutoDrive.LoadAtDestinationTask.update(stuckTask, 16)
check("L9 grebet tages ikke igen på samme tur", stuckTask.seenRotate, RT_ONLYPICKUP)
-- M1: mælketanke løber fulde -> den FYLDESTE hentes først (siloer: mindst fyldte)
resetWorld()
addMarker(1, "Kostald 1", "Mælk", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[MILK] = 2000}))
addMarker(2, "Kostald 2", "Mælk", 500, 0); table.insert(stations, makeStation(102, 500, 15, {[MILK] = 48000}))
addMarker(3, "Kostald 3", "Mælk", 1000, 0); table.insert(stations, makeStation(103, 1000, 15, {[MILK] = 30000}))
check("M1 fyldeste mælketank først", manager:getNextPickup(makeDriver(markers[1], {MILK}), false), 2)
check("M1 loggen nævner strategien", logLines[#logLines]:find("fyldeste først", 1, true) ~= nil, true)
-- L7: AD stopper -> grebet ryddes, næste opgave venter ikke på en gammel silo
resetWorld()
addMarker(1, "Silo 1", "Andet", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[HAY] = 5000}))