feat: bedste foder først — lavere foder kun når truget er nødlidende (≥75 % fri); forsynings-traktorer uden noget at hente holder ved Wait (v1.14.0.0)
This commit is contained in:
@@ -770,6 +770,31 @@ check("E5 uden TMR-kilde: hø før græs", manager:getNextPickup(e5Driver, false
|
||||
-- trug 70 % fuldt (30 % trang) vs. halm 80 % tomt -> halm
|
||||
e5Food[HAY] = 21000
|
||||
check("E5 halmlager tommere end truget -> halm", manager:getNextPickup(e5Driver, false), 21)
|
||||
-- E6 (bedste foder først): TMR-kilden er tom, truget halvfuldt, halm fuld -> INGEN ensilage/hø; en traktor
|
||||
-- i et forsynings-run holder ved Wait i stedet (in-game 24/9: Fastrac'erne fyldte truget med ensilage)
|
||||
e5Straw.level = 100000
|
||||
e5Food[TMR], e5Food[HAY], e5Food[GRASS] = 0, 15000, 0 -- 50 % fri
|
||||
e5Driver.uniqueId = "vehicleE6"
|
||||
testVehicles = {e5Driver}
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
local e6Run = ADRunsController.createRun("Cow Food")
|
||||
ADRunsController.updateRun(e6Run.id, {targetWayPointId = 30, ingredientMode = "manual", ingredients = {"FORAGE", "DRYGRASS_WINDROW", "GRASS_WINDROW", "STRAW"}})
|
||||
ADRunsController.assignVehicle(e6Run.id, e5Driver)
|
||||
local holdCalls = {}
|
||||
ADOutbound = {
|
||||
isOutboundVehicle = function() return false end,
|
||||
holdSupplyVehicle = function(adEnv, vehicle, run, reasons, replan) table.insert(holdCalls, {reasons = reasons, replan = replan}) return {markerIndex = 99, markerName = "Cow Wait", group = "Cow Wait", fillTypes = {}} end,
|
||||
releaseInactive = function() end, install = function() end,
|
||||
}
|
||||
check("E6 halvfuldt trug uden TMR: hold ved Wait", manager:getNextPickup(e5Driver, false), 99)
|
||||
check("E6 hold kaldt én gang", #holdCalls, 1)
|
||||
check("E6 replan finder intet endnu", holdCalls[1].replan(), nil)
|
||||
e5Food[HAY] = 3000 -- 90 % fri: nødlidende -> hø tilladt
|
||||
check("E6 replan: nødlidende trug -> hø", holdCalls[1].replan(), 23)
|
||||
check("E6 nødlidende trug: hø direkte", manager:getNextPickup(e5Driver, false), 23)
|
||||
ADOutbound = nil
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
testVehicles = {}
|
||||
g_currentMission.animalFoodSystem = nil
|
||||
|
||||
-- W13: AD stopper vognen i triggeren FØR markøren (isTargetReached=false) — Wait udløses alligevel
|
||||
|
||||
@@ -193,5 +193,18 @@ check("så hø (0.8)", trough[3].fillType, HAYX)
|
||||
check("så græs (0.4)", trough[4].fillType, GRASS)
|
||||
check("scoreOverride bruges som score", trough[2].score, 0.3)
|
||||
|
||||
-- Bedste foder først: lavere foder (ensilage 0,8) må kun hentes når truget er nødlidende
|
||||
-- (fri ≥ EMERGENCY_TROUGH_FREE af kapaciteten), hvis der er bedre foder (TMR 1,0) i samme trug
|
||||
local tmrNeed = {fillType = 116, priority = 1.0, score = 0.6, trough = true}
|
||||
local silageNeed = {fillType = 7, priority = 0.8, score = 0.6, trough = true}
|
||||
local strawNeed = {fillType = 31, priority = 0, score = 0.9}
|
||||
check("NF1 bedste foder tillades altid", ADSupplyPlanner.isFoodAllowed(tmrNeed, 1.0), true)
|
||||
check("NF1 ensilage afvist ved halvfuldt trug", ADSupplyPlanner.isFoodAllowed(silageNeed, 1.0), false)
|
||||
silageNeed.score = 0.8
|
||||
check("NF1 ensilage tilladt når truget er næsten tomt", ADSupplyPlanner.isFoodAllowed(silageNeed, 1.0), true)
|
||||
check("NF1 ikke-foder (halm) påvirkes ikke", ADSupplyPlanner.isFoodAllowed(strawNeed, 1.0), true)
|
||||
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)
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user