fix(marksilo): høsten først — tømmevogne holdes tilbage til høstere der kører (planlagt antal minus udsendte); fabrik kun med plads til hele læsset (v1.45.1.0)
This commit is contained in:
@@ -251,7 +251,8 @@ function ADFieldSilos.collectVehicles(adEnv)
|
||||
local vehicles, byId = {}, {}
|
||||
-- hvorfor tømmevogne ikke kan lånes (til fanens statuslinje)
|
||||
local why = {notEnabled = 0, busy = 0, controlled = 0, noPark = 0}
|
||||
for _, rig in ipairs(ADFieldWork.getRigs(adEnv)) do
|
||||
local rigs = ADFieldWork.getRigs(adEnv)
|
||||
for _, rig in ipairs(rigs) do
|
||||
-- uden AD-parkeringspunkt bliver vognen holdende på lagerets markør og spærrer for de næste
|
||||
local canPark = ADFieldWork.parkMarkerId == nil or ADFieldWork.parkMarkerId(adEnv, rig.vehicle) ~= nil
|
||||
if rig.role == "unloader" then
|
||||
@@ -266,11 +267,54 @@ function ADFieldSilos.collectVehicles(adEnv)
|
||||
byId[rig.id] = rig.vehicle
|
||||
end
|
||||
end
|
||||
local ok, needs = pcall(ADFieldSilos.harvestNeeds, adEnv, rigs)
|
||||
if ok and #needs > 0 then
|
||||
local before = #vehicles
|
||||
vehicles = ADFieldSiloPlanner.withoutHarvestReserve(vehicles, needs)
|
||||
why.harvest = before - #vehicles
|
||||
elseif not ok then
|
||||
Logging.warning(ADFieldSilos.LOG_PREFIX .. "høstreserve kunne ikke beregnes: %s", tostring(needs))
|
||||
end
|
||||
why.eligible = #vehicles
|
||||
ADFieldSilos.lastVehicleReasons = why
|
||||
return vehicles, byId
|
||||
end
|
||||
|
||||
-- Høsten først: pr. høster der arbejder (CP kører) holdes dens planlagte antal tømmevogne tilbage, minus dem
|
||||
-- markarbejdet allerede har sendt til marken. (in-game 28/9: marksilo-flowet havde lånt begge kartoffelvogne,
|
||||
-- og ingen kom til roeoptagerne.)
|
||||
function ADFieldSilos.harvestNeeds(adEnv, rigs)
|
||||
local assignments = ADFieldJobs ~= nil and ADFieldJobs.state ~= nil and ADFieldJobs.state.assignments or {}
|
||||
local sent = {}
|
||||
for _, assignment in pairs(assignments) do
|
||||
if assignment.role == "unloader" and assignment.fieldId ~= nil then sent[assignment.fieldId] = (sent[assignment.fieldId] or 0) + 1 end
|
||||
end
|
||||
local needs = {}
|
||||
for _, rig in ipairs(rigs) do
|
||||
if rig.role == "harvester" and ADCpBridge.isWorking(rig.vehicle) then
|
||||
local assignment = assignments[rig.id]
|
||||
local fieldId = assignment ~= nil and assignment.fieldId or nil
|
||||
local field = fieldId ~= nil and ADFieldJobs.getField(fieldId) or nil
|
||||
local info = fieldId ~= nil and ADFields.getInfo(fieldId) or nil
|
||||
local count = field ~= nil and ADFieldModel.maxHelpers("harvesting", field.plan) or 1
|
||||
count = count - (fieldId ~= nil and (sent[fieldId] or 0) or 0)
|
||||
local fillTypes = {}
|
||||
if info ~= nil and info.harvestFillType ~= nil then
|
||||
fillTypes[info.harvestFillType] = true
|
||||
else
|
||||
for fruitIndex in pairs(rig.fruits or {}) do
|
||||
local fruit = g_fruitTypeManager ~= nil and g_fruitTypeManager:getFruitTypeByIndex(fruitIndex) or nil
|
||||
if fruit ~= nil and fruit.fillType ~= nil then fillTypes[fruit.fillType.index] = true end
|
||||
end
|
||||
end
|
||||
for fillType in pairs(fillTypes) do
|
||||
if count > 0 then table.insert(needs, {fillType = fillType, count = count}) end
|
||||
end
|
||||
end
|
||||
end
|
||||
return needs
|
||||
end
|
||||
|
||||
-- ---- lån ----
|
||||
|
||||
local function fillTypeName(fillType)
|
||||
|
||||
Reference in New Issue
Block a user