feat: læs på vej tælles med — flere traktorer til samme stald fordeler sig på varer og stalde (v1.14.1.0)

This commit is contained in:
2026-09-24 01:36:29 +02:00
parent 1b7b74ad2c
commit 8ec0853fae
7 changed files with 124 additions and 7 deletions
+15
View File
@@ -82,6 +82,7 @@ local function addMarker(index, name, group, x, z, fromX, fromZ)
end
local function resetWorld()
if ADSmartPickup ~= nil and ADSmartPickup.resetEnRoute ~= nil then ADSmartPickup.resetEnRoute() end
stations, unloadStations, markers, wayPoints, nodePositions, logLines = {}, {}, {}, {}, {}, {}
FS25_AutoDrive.ADMultipleTargetsManager.pickups = {}
end
@@ -1140,6 +1141,20 @@ check("N1 strengt opslag finder intet", ADSmartPickup.getLoadStationAtWayPointId
check("N1 løst opslag finder tanken", ADSmartPickup.getLoadStationNearWayPointId(FS25_AutoDrive, 1, 1, 40), stations[1])
check("N1 uden for afstanden -> nil", ADSmartPickup.getLoadStationNearWayPointId(FS25_AutoDrive, 1, 1, 20), nil)
-- V: flere traktorer til samme mål fordeler sig — læs på vej tælles med (in-game 24/9: alle 4 Fastrac'er
-- hentede det samme). Græs mangler mest (20000/100000), ensilage næst (50000/100000).
buildFeedWorld()
local feederA = makeSupplyDriver(markerByIndex(1), markerByIndex(10), {HAY, GRASS, SILAGE})
feederA.trailers = {level = 0, capacity = 70000}
local feederB = makeSupplyDriver(markerByIndex(1), markerByIndex(10), {HAY, GRASS, SILAGE})
feederB.trailers = {level = 0, capacity = 70000}
check("V1 A henter græs (mangler mest)", manager:getNextPickup(feederA, false), 3)
check("V1 B henter ensilage (græs er på vej med A)", manager:getNextPickup(feederB, false), 4)
check("V1 A's læs registreret på vej", ADSmartPickup.getPending(10, feederB)[GRASS], 40000)
ADSmartPickup.clearEnRoute(feederA)
check("V2 A læsset af -> intet på vej", ADSmartPickup.getPending(10, feederB)[GRASS], nil)
check("V2 egne læs tæller ikke", ADSmartPickup.getPending(10, feederB)[SILAGE], nil)
-- X: udkørsel koblet på getNextPickup-wrap'en og Wait-logikken
resetWorld()
addMarker(1, "Suger Load", "Pickup points", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[WHEAT] = 1000}))
+17
View File
@@ -206,5 +206,22 @@ check("NF1 ikke-foder (halm) påvirkes ikke", ADSupplyPlanner.isFoodAllowed(stra
check("NF1 intet bedre foder på listen -> tilladt", ADSupplyPlanner.isFoodAllowed({fillType = 7, priority = 0.8, score = 0.1, trough = true}, 0.8), true)
check("NF1 bedste foderprioritet", ADSupplyPlanner.bestFoodPriority({tmrNeed, silageNeed, strawNeed}), 1.0)
-- Læs på vej (andre traktorer): lægges oven i målets niveau; foder deler trug -> hele trugets fri plads falder
local pendingNeeds = {
{fillType = 31, level = 5000, capacity = 20000}, -- halm
{fillType = 116, level = 0, capacity = 30000, scoreOverride = 1.0, troughCapacity = 30000}, -- TMR, tomt trug
{fillType = 7, level = 0, capacity = 30000, scoreOverride = 1.0, troughCapacity = 30000}, -- ensilage
}
local adjusted = ADSupplyPlanner.applyPending(pendingNeeds, {[116] = 20000, [31] = 20000})
check("AP halm: niveau + på vej, højst kapacitet", adjusted[1].level, 20000)
check("AP TMR: niveau + på vej", adjusted[2].level, 20000)
check("AP TMR: kapacitet = niveau + resterende fri", adjusted[2].capacity, 30000)
check("AP ensilage: truget har kun 10000 fri tilbage", adjusted[3].capacity - adjusted[3].level, 10000)
check("AP trug-score falder", math.floor(adjusted[3].scoreOverride * 100 + 0.5), 33)
check("AP input urørt", pendingNeeds[2].level, 0)
check("AP intet på vej -> samme værdier", ADSupplyPlanner.applyPending(pendingNeeds, {})[1].level, 5000)
local ranked = ADSupplyPlanner.rankNeeds(adjusted, 8000)
check("AP halm fuld (på vej) -> kun trug-varer tilbage", #ranked, 2)
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
os.exit(failures == 0 and 0 or 1)