fix: pålæsningsdiagnose kun ved stationen (ikke Wait/mark)

This commit is contained in:
2026-09-30 23:28:58 +02:00
parent ba98cf83d3
commit e229a27624
3 changed files with 19 additions and 5 deletions
+17 -4
View File
@@ -2,11 +2,13 @@
-- Diagnose når AutoDrive står ved et LOAD-mål uden at fylde (in-game 30/9: Fendt + MEGA-sprøjte ved "Market Price
-- Liquid Fill Station"). AutoDrive fylder kun, når en fyldenhed står i triggerens boks (trigger.fillableObjects) og
-- triggeren har varen. Efter REPORT_MS ved målet uden fremgang skrives én linje: markør, vare, og for hver vogn den
-- nærmeste AD-læssetrigger (afstand, har varen?, står vognen i boksen?). Ingen indgreb — kun log.
-- nærmeste AD-læssetrigger (afstand, har varen?, står vognen i boksen?). Kun når en trigger med varen er inden for
-- NEAR_M (holder ved Wait-punkter logges ikke). Ingen indgreb — kun log.
ADLoadDiag = {}
ADLoadDiag.LOG_PREFIX = "ADSmartPickup: pålæsning: "
ADLoadDiag.REPORT_MS = 30000
ADLoadDiag.NEAR_M = 20 -- m: trigger med varen herinden for = køretøjet står ved stationen (ellers Wait/mark: ingen log)
-- ---- ren logik ----
@@ -27,6 +29,14 @@ function ADLoadDiag.tick(state, dt, reached, level)
return true
end
-- distances = afstande fra vognene til nærmeste AD-trigger med varen -> står ved stationen?
function ADLoadDiag.atStation(distances)
for _, d in ipairs(distances or {}) do
if d <= ADLoadDiag.NEAR_M then return true end
end
return false
end
-- ---- spil ----
local function fillTypeName(fillType)
@@ -65,20 +75,23 @@ local function describeTrailer(adEnv, trailer, fillType)
inBox(nearestOk.trigger, trailer) and "i boksen" or "ikke i boksen"))
end
if nearestOk == nil then table.insert(parts, "INGEN AD-læssetrigger med varen") end
return string.format("'%s': %s", tostring(name), table.concat(parts, ", "))
return string.format("'%s': %s", tostring(name), table.concat(parts, ", ")), nearestOk ~= nil and nearestOk.d or nil
end
local function report(adEnv, task)
local vehicle = task.vehicle
local fillType = vehicle.ad.stateModule.getFillType ~= nil and vehicle.ad.stateModule:getFillType() or nil
local marker = task.destinationID ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(task.destinationID) or nil
local lines = {}
local lines, distances = {}, {}
for _, trailer in ipairs(task.trailers or {}) do
if trailer.getFillUnits ~= nil and #trailer:getFillUnits() > 0 then
local ok, line = pcall(describeTrailer, adEnv, trailer, fillType)
local ok, line, distance = pcall(describeTrailer, adEnv, trailer, fillType)
if ok and line ~= nil then table.insert(lines, line) end
if ok and distance ~= nil then table.insert(distances, distance) end
end
end
-- holder ved Wait/mark (ingen trigger med varen tæt på): det er ikke en fejlet pålæsning
if not ADLoadDiag.atStation(distances) then return end
local maxDistance = adEnv.AutoDrive.getMaxTriggerDistance ~= nil and adEnv.AutoDrive.getMaxTriggerDistance(vehicle) or nil
Logging.warning(ADLoadDiag.LOG_PREFIX .. "'%s' står ved '%s' uden at fylde %s i %d s (AD-triggerafstand %s m): %s",
tostring(ADRuns.vehicleLabel(vehicle)), tostring(marker ~= nil and marker.name or task.destinationID), fillTypeName(fillType),