fix(review): palle/bulk pr. kilde, pallefabrikker uden læssestation, hold-omdirigering, last ved Start, tomme kilder udelukkes, færre rutetjek, advarsler huskes, paller kun Fra/Salg
This commit is contained in:
@@ -300,6 +300,100 @@ ADOutbound.releaseInactive()
|
||||
check("O9 frigivet", ADWaitPool.getOwner(20), nil)
|
||||
check("O9 hold væk", ADOutbound.getHoldFor(v9), nil)
|
||||
|
||||
-- O11 (I2): hold-markøren skifter (Wait-punkt bliver ledigt) -> opgaven omdirigeres
|
||||
ADWaitPool.releaseVehicle(v9)
|
||||
local v11 = newVehicle("Hold", 25, 0, 20000)
|
||||
runs[v11] = outboundRun(11, {1}, {{fillType = "FORAGE", policy = "sell"}}) -- FORAGE findes ikke ved kilden -> aldrig tur
|
||||
local blocker = newVehicle("Blocker", 0, 0, 1)
|
||||
ADWaitPool.claim(20, blocker)
|
||||
local choice11 = ADOutbound.choosePickup(adEnv, v11)
|
||||
check("O11 uden ledigt Wait: holder ved kilden", choice11.markerIndex, mSugar.markerIndex)
|
||||
local task11 = newTask(v11, 1)
|
||||
v11.atTarget = true
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task11, 100)
|
||||
ADWaitPool.releaseVehicle(blocker)
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task11, 5000)
|
||||
check("O11 Wait-punkt ledigt -> omdirigeret", task11.destinationID, 20)
|
||||
check("O11 hold peger på Wait", ADOutbound.getHoldFor(v11).markerName, "Wait 3")
|
||||
ADWaitPool.releaseVehicle(v11)
|
||||
|
||||
-- O12 (I3): mål for last der allerede er på vognen ved Start
|
||||
local v12 = newVehicle("Loaded", 0, 0, 20000)
|
||||
runs[v12] = outboundRun(12, {1}, {{fillType = "SUGAR", policy = "sell"}})
|
||||
quotes["selling station"][SUGAR].percent = 92
|
||||
check("O12 salgsmål for sukker-last", ADOutbound.planCargoTarget(adEnv, runs[v12], v12, SUGAR), 10)
|
||||
quotes["selling station"][SUGAR].percent = 50
|
||||
check("O12 pris lav, ingen lager-politik -> nil", ADOutbound.planCargoTarget(adEnv, runs[v12], v12, SUGAR), nil)
|
||||
runs[v12].products = {{fillType = "SUGAR", policy = "sellElseStore"}}
|
||||
check("O12 pris lav -> silo", ADOutbound.planCargoTarget(adEnv, runs[v12], v12, SUGAR), 30)
|
||||
check("O12 last der ikke er i run'et -> nil", ADOutbound.planCargoTarget(adEnv, runs[v12], v12, FORAGE), nil)
|
||||
quotes["selling station"][SUGAR].percent = 92
|
||||
|
||||
-- O13 (I4): tom vogn 30 s ved kilden -> kilden udelukkes for varen og turen afsluttes
|
||||
local v13 = newVehicle("Empty", 0, 0, 20000)
|
||||
runs[v13] = outboundRun(13, {1, 2}, {{fillType = "SUGAR", policy = "sell"}}, {collectRound = false})
|
||||
local choice13 = ADOutbound.choosePickup(adEnv, v13)
|
||||
check("O13 første kilde = silo 4 (mest)", choice13.markerIndex, mSilo.markerIndex)
|
||||
local task13 = newTask(v13, 2)
|
||||
v13.atTarget = true
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task13, 100)
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task13, 31000)
|
||||
check("O13 finished efter 30 s uden last", task13.finishedCalls, 1)
|
||||
check("O13 WARN", lastLog("intet at læsse") ~= nil, true)
|
||||
local choice13b = ADOutbound.choosePickup(adEnv, v13)
|
||||
check("O13 næste plan udelukker den tomme kilde", choice13b.markerIndex, mSugar.markerIndex)
|
||||
|
||||
-- O14 (I6): rutetjek kun for salgssteder over tærsklen, bedste først, stop ved første nåelige
|
||||
local routeChecks = 0
|
||||
local originalGetPathTo = adEnv.ADGraphManager.getPathTo
|
||||
adEnv.ADGraphManager.getPathTo = function(_, vehicle, id) routeChecks = routeChecks + 1 return originalGetPathTo(_, vehicle, id) end
|
||||
local v14 = newVehicle("Routes", 0, 0, 20000)
|
||||
runs[v14] = outboundRun(14, {1}, {{fillType = "SUGAR", policy = "sell"}})
|
||||
quotes["Far station"][SUGAR].percent = 99
|
||||
quotes["selling station"][SUGAR].percent = 92
|
||||
ADOutbound.choosePickup(adEnv, v14)
|
||||
check("O14 bedste nåelig først: én rute tjekket", routeChecks, 1)
|
||||
check("O14 mål = bedst betalende", v14.ad.stateModule.secondMarkerId, 11)
|
||||
routeChecks = 0
|
||||
quotes["Far station"][SUGAR].percent = 60
|
||||
ADOutbound.choosePickup(adEnv, v14)
|
||||
check("O14 under tærsklen tjekkes ikke", routeChecks, 1)
|
||||
adEnv.ADGraphManager.getPathTo = originalGetPathTo
|
||||
|
||||
-- O15 (M1): advarsel for vare A gentages ikke efter en tur med vare B
|
||||
notifications = {}
|
||||
local v15 = newVehicle("Two", 0, 0, 20000)
|
||||
runs[v15] = outboundRun(15, {1, 2}, {{fillType = "SUGAR", policy = "sell"}, {fillType = "FORAGE", policy = "sell"}})
|
||||
products[1] = {{fillType = SUGAR, name = "SUGAR", available = 5000, level = 5000, capacity = 180000, isPallet = false}, {fillType = FORAGE, name = "FORAGE", available = 5000, level = 5000, capacity = 180000, isPallet = false}}
|
||||
quotes["selling station"][FORAGE] = {percent = 95, price = 1}
|
||||
quotes["Far station"][SUGAR].percent = 99 -- (O14 satte den til 60)
|
||||
unreachable[10] = true; unreachable[11] = true
|
||||
ADOutbound.choosePickup(adEnv, v15) -- SUGAR uopnåelig -> advarsel, FORAGE uopnåelig -> advarsel
|
||||
local firstCount = #notifications
|
||||
unreachable[11] = nil -- Far station kan nås for SUGAR (FORAGE sælges kun på selling station)
|
||||
ADOutbound.choosePickup(adEnv, v15) -- tur med SUGAR
|
||||
check("O15 tur", ADOutbound.getTripFor(v15).kind, "sell")
|
||||
ADOutbound.choosePickup(adEnv, v15) -- igen: FORAGE stadig uopnåelig, men allerede advaret
|
||||
check("O15 FORAGE-advarsel gentages ikke", #notifications, firstCount)
|
||||
unreachable[10] = nil
|
||||
products[1] = {{fillType = SUGAR, name = "SUGAR", available = 5000, level = 5000, capacity = 180000, isPallet = false}}
|
||||
|
||||
-- O16 (M6): pallens ankomst ses også på fyldniveau når UAL's interne liste mangler
|
||||
local v16 = newVehicle("NoList", 100, 0, 8000, true)
|
||||
v16.trailers[1].spec_universalAutoload = {}
|
||||
runs[v16] = outboundRun(16, {3}, {{fillType = "STRAW_BASKET", policy = "sell"}})
|
||||
sources[3].stored[BASKET] = 3; sources[3].spawnCalls = 0
|
||||
ADOutbound.choosePickup(adEnv, v16)
|
||||
local task16 = newTask(v16, 3)
|
||||
v16.atTarget, task16.activatedUALLoading = true, true
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task16, 100)
|
||||
check("O16 første spawn", sources[3].spawnCalls, 1)
|
||||
sources[3].stored[BASKET] = 2
|
||||
v16.trailers.level = 1000
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task16, 100)
|
||||
ADOutbound.beforeLoadUpdate(adEnv, task16, 100)
|
||||
check("O16 næste spawn via fyldniveau", sources[3].spawnCalls, 2)
|
||||
|
||||
-- O10: install wrapper: fejl i hook stopper ikke AD
|
||||
local calls = {}
|
||||
adEnv.LoadAtDestinationTask.update = function(self, dt) calls.update = (calls.update or 0) + 1 end
|
||||
|
||||
Reference in New Issue
Block a user