fix(marker): ensilage går til gæringssilo (produktion skår -> SILAGE) før almindelig silo; hø aldrig i gæringssilo (v1.25.0.0)
In-game 25/9: læssevognen aflæssede græs i en Farma-silo i stedet for en ensilage-silo.
This commit is contained in:
@@ -213,9 +213,48 @@ end
|
||||
|
||||
-- ---- silo ----
|
||||
|
||||
-- Gårdens gæringssiloer for markens skår, nærmest marken først (produktioner skår -> SILAGE).
|
||||
function ADFieldJobs.getFermenters(adEnv, farmId, windrowFillType, x, z)
|
||||
local silage = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeIndexByName("SILAGE") or nil
|
||||
local result = {}
|
||||
for _, building in ipairs(ADBuildings.list(adEnv, farmId)) do
|
||||
local spec = building.kind == "factory" and building.placeable ~= nil and building.placeable.spec_productionPoint or nil
|
||||
local point = spec ~= nil and spec.productionPoint or nil
|
||||
if point ~= nil and ADFieldModel.isFermenter(point.productions, windrowFillType, silage) then
|
||||
local bx, _, bz = getWorldTranslation(building.placeable.rootNode)
|
||||
table.insert(result, {building = building, distance = (bx - (x or bx)) ^ 2 + (bz - (z or bz)) ^ 2})
|
||||
end
|
||||
end
|
||||
table.sort(result, function(a, b) return a.distance < b.distance end)
|
||||
local buildings = {}
|
||||
for _, entry in ipairs(result) do table.insert(buildings, entry.building) end
|
||||
return buildings
|
||||
end
|
||||
|
||||
local function unloadMarkerIds(buildings)
|
||||
local markerIds = {}
|
||||
for _, building in ipairs(buildings) do
|
||||
for _, marker in ipairs(ADBuildings.getMarkers(building, "unload") or {}) do
|
||||
table.insert(markerIds, marker.id)
|
||||
end
|
||||
end
|
||||
return markerIds
|
||||
end
|
||||
|
||||
-- Tvunget lager -> de valgte; ensilage -> gæringssiloer (produktion skår -> ensilage) før almindelige
|
||||
-- siloer (in-game 25/9: græs endte i en Farma-silo); hø -> kun siloer, aldrig gæringssiloer (flere af dem
|
||||
-- laver også hø om til ensilage).
|
||||
local function chooseStore(adEnv, field, info, vehicle)
|
||||
local fillType = field.plan.product == "hay" and info.hay or info.windrow
|
||||
local isReachable = function(markerId) return ADUnloadWait.hasRouteTo(adEnv, vehicle, markerId) end
|
||||
if #field.plan.storeBuildingIds == 0 and field.plan.product ~= "hay" then
|
||||
local fermenters = ADFieldJobs.getFermenters(adEnv, vehicle:getOwnerFarmId(), fillType, info.x, info.z)
|
||||
if #fermenters > 0 then
|
||||
local store, why = ADLoadSwap.findForcedDumpMarker(adEnv, vehicle, fillType, 1, unloadMarkerIds(fermenters), isReachable)
|
||||
if store ~= nil then return store end
|
||||
log(field.id, "ingen gæringssilo kan tage græsset (%s) — bruger almindelig silo", tostring(why))
|
||||
end
|
||||
end
|
||||
if #field.plan.storeBuildingIds > 0 then
|
||||
local markerIds = {}
|
||||
for _, buildingId in ipairs(field.plan.storeBuildingIds) do
|
||||
|
||||
Reference in New Issue
Block a user