fix: forsyning med flere mål vælger målet med færrest andre vogne på vej før mindst fyldte (3 biogas-vogne i kø ved samme drop) (v1.28.3.0)

This commit is contained in:
2026-09-26 11:54:14 +02:00
parent 725ad7b459
commit 41e50ccec8
4 changed files with 27 additions and 5 deletions
+8 -4
View File
@@ -372,18 +372,22 @@ function ADRunsController.chooseTarget(adEnv, run, vehicle)
end
local farmId = ADSmartPickup.getFarmId(vehicle)
local ingredients = ADRunsController.getRunIngredients(adEnv, run, vehicle)
local bestId, bestNeed = nil, nil
local bestId, bestNeed, bestInbound = nil, nil, 0
for _, entry in ipairs(getTargetStations(adEnv, run, farmId)) do
-- læs andre traktorer er på vej med til stalden, tæller med — så fordeler de sig på staldene
local pending = ADSmartPickup.getPending ~= nil and ADSmartPickup.getPending(entry.wayPointId, vehicle) or nil
local ranked = ADSmartPickup.getTargetNeedsRanked(entry.station, ingredients, farmId, pending)
local need = ranked[1]
if need ~= nil and need.freeSpace >= (ADSupplyPlanner.MIN_FREE_LITERS or 1000) then
-- færrest andre vogne på vej først: et drop (drive-on-bunker, trug) tager én ad gangen, så tre
-- vogne mod det mindst fyldte mål holder i kø mens de andre mål står tomme (in-game 26/9)
local inbound = ADSmartPickup.countEnRoute ~= nil and ADSmartPickup.countEnRoute(entry.wayPointId, vehicle) or 0
local isBetter = bestNeed == nil
or (need.fits == true and bestNeed.fits ~= true)
or (need.fits == bestNeed.fits and need.score > bestNeed.score)
or inbound < bestInbound
or (inbound == bestInbound and need.fits == true and bestNeed.fits ~= true)
or (inbound == bestInbound and need.fits == bestNeed.fits and need.score > bestNeed.score)
if isBetter then
bestId, bestNeed = entry.wayPointId, need
bestId, bestNeed, bestInbound = entry.wayPointId, need, inbound
end
end
end
+9
View File
@@ -672,6 +672,15 @@ function ADSmartPickup.getPending(wayPointId, excludeVehicle)
return pending
end
-- Antal ANDRE traktorer på vej til målet (målvalget fordeler vognene på flere drops).
function ADSmartPickup.countEnRoute(wayPointId, excludeVehicle)
local count = 0
for vehicle, entry in pairs(enRoute) do
if vehicle ~= excludeVehicle and entry.wayPointId == wayPointId then count = count + 1 end
end
return count
end
-- pending (valgfri): læs på vej til målet, lægges oven i (fanen og mål-valget mellem stalde).
function ADSmartPickup.getTargetNeedsRanked(station, fillTypes, farmId, pending)
local needs = getTargetNeeds(station, fillTypes, farmId, {})
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<modDesc descVersion="107">
<author>masterdraco</author>
<version>1.28.2.0</version>
<version>1.28.3.0</version>
<title>
<en>AD Smart Pickup</en>
</title>