feat: læs-bytte fra Wait — rest afleveres i silo når målet mangler en anden vare
This commit is contained in:
@@ -31,10 +31,13 @@ local function makeStation(node, x, z, levels, isBroken, ownLevels)
|
||||
return {
|
||||
owningPlaceable = placeable,
|
||||
loadTriggers = {{triggerNode = node}},
|
||||
unloadTriggers = {{exactFillRootNode = node}},
|
||||
getFillLevel = function(_, fillType)
|
||||
if isBroken then error("boom") end
|
||||
return levels[fillType] or 0
|
||||
end,
|
||||
getIsFillTypeSupported = function(_, fillType) return levels[fillType] ~= nil or (ownLevels ~= nil and ownLevels[fillType] ~= nil) end,
|
||||
getFreeCapacity = function(_, fillType) return (levels.capacity or 200000) - (levels[fillType] or 0) end,
|
||||
}
|
||||
end
|
||||
|
||||
@@ -163,6 +166,7 @@ end
|
||||
dofile("FS25_ADSmartPickup/adSupplyPlanner.lua")
|
||||
dofile("FS25_ADSmartPickup/adRuns.lua")
|
||||
dofile("FS25_ADSmartPickup/adRunsController.lua")
|
||||
dofile("FS25_ADSmartPickup/adLoadSwap.lua")
|
||||
dofile("FS25_ADSmartPickup/adUnloadWait.lua")
|
||||
dofile("FS25_ADSmartPickup/adSmartPickup.lua")
|
||||
listener:update(16) -- installerer hook'en
|
||||
@@ -758,6 +762,63 @@ UnloadTask.update(tp, 16)
|
||||
check("I4 kun run'ets pulje", tp.destinationID, 40)
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
|
||||
-- ==== S: læs-bytte fra Wait — halm-rest ved Wait, målet mangler TMR -> aflæs halm i silo ====
|
||||
local function buildSwapWorld()
|
||||
buildWaitWorld() -- stald: halm FULD (50000/50000), TMR 10000/100000
|
||||
-- halmladen (markør 21) er også et aflæsningssted med plads
|
||||
table.insert(unloadStations, stations[2])
|
||||
stations[2].unloadTriggers = {{exactFillRootNode = 121}}
|
||||
stations[2].getIsFillTypeSupported = function(_, fillType) return fillType == STRAW end
|
||||
stations[2].getFreeCapacity = function() return 100000 end
|
||||
stations[2].owningPlaceable = {spec_silo = {storages = {{getFillLevel = function(_, fillType) return fillType == STRAW and 50000 or 0 end}}}}
|
||||
end
|
||||
|
||||
-- S1: ventende traktor med halm-rest -> TMR mangler et fuldt læs (40000 l vogn, 90000 l fri) -> til halmladen
|
||||
buildSwapWorld()
|
||||
local sv, st = makeUnloadingVehicle("Fastrac Bytte", 521, 5000, 35000)
|
||||
UnloadTask.update(st, 16)
|
||||
check("S1 venter først ved Wait", st.destinationID, 40)
|
||||
UnloadTask.update(st, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
||||
check("S1 omdirigeret til halmladen", st.destinationID, 21)
|
||||
check("S1 logget bytte", countLogsSince(1, "bytter læs") >= 1, true)
|
||||
check("S1 Wait-punkt frigivet", FS25_AutoDrive.AutoDrive.getSetting("rotateTargets", sv), RT_ONLYPICKUP)
|
||||
|
||||
-- S2: målet mangler IKKE et fuldt læs af TMR -> bliv ved Wait
|
||||
buildSwapWorld()
|
||||
waitBarnLevels[TMR] = 75000 -- 25000 fri < 40000 vogn
|
||||
local sv2, st2 = makeUnloadingVehicle("Fastrac Bliv", 522, 5000, 35000)
|
||||
UnloadTask.update(st2, 16)
|
||||
UnloadTask.update(st2, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
||||
check("S2 bliver ved Wait", st2.destinationID, 40)
|
||||
|
||||
-- S3: ingen silo med plads/vare -> bliv ved Wait, én WARN
|
||||
buildSwapWorld()
|
||||
stations[2].getFreeCapacity = function() return 1000 end
|
||||
local sv3, st3 = makeUnloadingVehicle("Fastrac Ingen", 523, 5000, 35000)
|
||||
UnloadTask.update(st3, 16)
|
||||
local mark3 = #logLines
|
||||
UnloadTask.update(st3, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
||||
UnloadTask.update(st3, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
||||
check("S3 bliver ved Wait", st3.destinationID, 40)
|
||||
check("S3 én advarsel", countLogsSince(mark3, "ingen silo"), 1)
|
||||
|
||||
-- S4: silo uden vejnet hjem springes over
|
||||
buildSwapWorld()
|
||||
FS25_AutoDrive.ADGraphManager.unreachable[21] = true
|
||||
local sv4, st4 = makeUnloadingVehicle("Fastrac Vej", 524, 5000, 35000)
|
||||
UnloadTask.update(st4, 16)
|
||||
UnloadTask.update(st4, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
||||
check("S4 unåelig silo -> bliv", st4.destinationID, 40)
|
||||
FS25_AutoDrive.ADGraphManager.unreachable = {}
|
||||
|
||||
-- S5: traktor med kun én vare i listen bytter aldrig
|
||||
buildSwapWorld()
|
||||
local sv5, st5 = makeUnloadingVehicle("Fastrac Solo", 525, 5000, 35000)
|
||||
sv5.ad.stateModule.selectedFillTypes = {STRAW}
|
||||
UnloadTask.update(st5, 16)
|
||||
UnloadTask.update(st5, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
||||
check("S5 én vare -> bliver", st5.destinationID, 40)
|
||||
|
||||
-- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ====
|
||||
local eDriver = buildCowWorld()
|
||||
check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1])
|
||||
|
||||
Reference in New Issue
Block a user