fix: silo til forkert last kræver kun vejnet fra traktoren (ikke silo→mål); advarsel forklarer hvorfor ingen silo (v1.11.8.0)
This commit is contained in:
@@ -41,26 +41,32 @@ local function acceptsRest(station, fillType, rest, farmId)
|
||||
end
|
||||
|
||||
-- Nærmeste silo med plads til resten og vejnet til/fra; siloer der allerede har varen foretrækkes.
|
||||
-- Nærmeste silo med plads til resten og vejnet fra traktoren; siloer der allerede har varen
|
||||
-- foretrækkes. Returnerer marker — eller nil + en forklaring (til loggen).
|
||||
function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointId, isReachable)
|
||||
if vehicle.rootNode == nil then
|
||||
return nil
|
||||
return nil, "køretøjet har ingen position"
|
||||
end
|
||||
local farmId = ADSmartPickup.getFarmId(vehicle)
|
||||
local homeStation = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, homeWayPointId, farmId)
|
||||
local homeStation = homeWayPointId ~= nil and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, homeWayPointId, farmId) or nil
|
||||
local x, _, z = getWorldTranslation(vehicle.rootNode)
|
||||
local candidates = {}
|
||||
local silos, withSpace = 0, 0
|
||||
for _, marker in pairs(adEnv.ADGraphManager:getMapMarkers()) do
|
||||
local station = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, marker.id, farmId)
|
||||
if station ~= nil and isSilo(station, homeStation) and acceptsRest(station, fillType, rest, farmId) then
|
||||
local wayPoint = adEnv.ADGraphManager:getWayPointById(marker.id)
|
||||
-- En markør uden waypoint (stale AD-graf) skal springes over, ikke crashe hele opslaget.
|
||||
if wayPoint ~= nil then
|
||||
local dx, dz = wayPoint.x - x, wayPoint.z - z
|
||||
table.insert(candidates, {
|
||||
marker = marker,
|
||||
hasFillType = ADSmartPickup.getOwnStorageLevel(station, {fillType}) > 0,
|
||||
distance = dx * dx + dz * dz,
|
||||
})
|
||||
if station ~= nil and isSilo(station, homeStation) then
|
||||
silos = silos + 1
|
||||
if acceptsRest(station, fillType, rest, farmId) then
|
||||
withSpace = withSpace + 1
|
||||
local wayPoint = adEnv.ADGraphManager:getWayPointById(marker.id)
|
||||
if wayPoint ~= nil then
|
||||
local dx, dz = wayPoint.x - x, wayPoint.z - z
|
||||
table.insert(candidates, {
|
||||
marker = marker,
|
||||
hasFillType = ADSmartPickup.getOwnStorageLevel(station, {fillType}) > 0,
|
||||
distance = dx * dx + dz * dz,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -75,7 +81,12 @@ function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointI
|
||||
return candidate.marker
|
||||
end
|
||||
end
|
||||
return nil
|
||||
if silos == 0 then
|
||||
return nil, "ingen silo med aflæsningsmarkør fundet (siloen skal have en AD-markør ved aflæsningstriggeren)"
|
||||
elseif withSpace == 0 then
|
||||
return nil, string.format("%d silo(er) fundet, men ingen tager varen med plads til %.0f l", silos, rest)
|
||||
end
|
||||
return nil, string.format("%d silo(er) tager varen, men AutoDrive finder ingen rute fra traktoren til dem", withSpace)
|
||||
end
|
||||
|
||||
-- Kaldes fra Wait-logikken hvert tick; redirect(task, id) og release(vehicle) er dens egne.
|
||||
@@ -92,13 +103,13 @@ function ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirect, release, isReac
|
||||
if missing == nil and not wait.isRejected then
|
||||
return false
|
||||
end
|
||||
local marker = ADLoadSwap.findDumpMarker(adEnv, vehicle, wait.fillType, wait.rest, wait.homeDestinationID, isReachable)
|
||||
local marker, why = ADLoadSwap.findDumpMarker(adEnv, vehicle, wait.fillType, wait.rest, wait.homeDestinationID, isReachable)
|
||||
local restName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(wait.fillType) or tostring(wait.fillType)
|
||||
local missingName = missing ~= nil and (g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(missing.fillType) or tostring(missing.fillType)) or "-"
|
||||
if marker == nil then
|
||||
if not warnedNoSilo[vehicle] then
|
||||
warnedNoSilo[vehicle] = true
|
||||
Logging.warning(ADLoadSwap.LOG_PREFIX .. "'%s' venter med %.0f l %s, og målet mangler %s — ingen silo med plads og vejnet til/fra tager resten, så den bliver ved Wait-punktet", tostring(vehicle:getName()), wait.rest, tostring(restName), tostring(missingName))
|
||||
Logging.warning(ADLoadSwap.LOG_PREFIX .. "'%s' venter med %.0f l %s (%s) — %s; den bliver ved Wait-punktet", tostring(vehicle:getName()), wait.rest, tostring(restName), missing ~= nil and ("målet mangler " .. tostring(missingName)) or "målet tager ikke varen", tostring(why))
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user