feat(diagnose): 'intet at læsse' logger markør, kildens mængde, vognens afstand til triggeren og AD-vare (v1.16.2.0)

This commit is contained in:
2026-09-24 03:03:50 +02:00
parent ac9dfe0d62
commit 23c94b49df
2 changed files with 40 additions and 2 deletions
+39 -1
View File
@@ -599,6 +599,43 @@ local function updateSpawn(adEnv, state, task, source, dt)
end end
end end
-- Diagnose når intet bliver læsset: markørens navn, kildens mængde af turens varer og afstanden fra
-- vognen til nærmeste læssetrigger der udleverer varen (> ~10 m = vognen holder uden for triggeren).
local function describeLoadFailure(adEnv, vehicle, task, state, source)
local parts = {}
local marker = adEnv.ADGraphManager.getMapMarkerByWayPointId ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(state.current) or nil
table.insert(parts, string.format("markør '%s' (%s)", marker ~= nil and tostring(marker.name) or "?", tostring(state.current)))
local ok, products = pcall(ADSources.getProducts, adEnv, source, g_currentMission:getFarmId())
local wanted = {}
for _, fillType in ipairs(state.trip.fillTypes) do wanted[fillType] = true end
for _, item in ipairs(ok and products or {}) do
if wanted[item.fillType] then
table.insert(parts, string.format("%s i kilden %.0f l", fillTypeName(item.fillType), item.available or item.level or 0))
end
end
local trailer = task.trailers ~= nil and task.trailers[1] or vehicle
local station = source ~= nil and source.station or nil
if trailer ~= nil and trailer.rootNode ~= nil and station ~= nil and station.loadTriggers ~= nil then
local tx, _, tz = getWorldTranslation(trailer.rootNode)
local best = nil
for _, trigger in pairs(station.loadTriggers) do
local supplies = type(trigger.fillTypes) ~= "table" or next(trigger.fillTypes) == nil
for fillType in pairs(wanted) do
if type(trigger.fillTypes) == "table" and trigger.fillTypes[fillType] then supplies = true end
end
if supplies and trigger.triggerNode ~= nil then
local x, _, z = getWorldTranslation(trigger.triggerNode)
local d = math.sqrt((x - tx) ^ 2 + (z - tz) ^ 2)
if best == nil or d < best then best = d end
end
end
table.insert(parts, best ~= nil and string.format("vogn %.0f m fra triggeren", best) or "ingen trigger med varen")
end
local selected = vehicle.ad ~= nil and vehicle.ad.stateModule ~= nil and vehicle.ad.stateModule.getFillType ~= nil and vehicle.ad.stateModule:getFillType() or nil
table.insert(parts, "AD-vare " .. fillTypeName(selected))
return table.concat(parts, ", ")
end
-- true = håndteret (original update springes over: traktoren holder ved Wait). -- true = håndteret (original update springes over: traktoren holder ved Wait).
function ADOutbound.beforeLoadUpdate(adEnv, task, dt) function ADOutbound.beforeLoadUpdate(adEnv, task, dt)
local vehicle = task.vehicle local vehicle = task.vehicle
@@ -631,7 +668,8 @@ function ADOutbound.beforeLoadUpdate(adEnv, task, dt)
for _, fillType in ipairs(state.trip.fillTypes) do for _, fillType in ipairs(state.trip.fillTypes) do
emptyUntil[tostring(state.current) .. ":" .. tostring(fillType)] = expires emptyUntil[tostring(state.current) .. ":" .. tostring(fillType)] = expires
end end
Logging.warning(ADOutbound.LOG_PREFIX .. "'%s': intet at læsse ved %s efter %d s; kilden springes over i %d min", tostring(vehicle:getName()), tostring(source ~= nil and source.name or state.current), math.floor(ADOutbound.EMPTY_SOURCE_MS / 1000), math.floor(ADOutbound.EMPTY_SOURCE_TTL_MS / 60000)) local okDiag, diagnosis = pcall(describeLoadFailure, adEnv, vehicle, task, state, source)
Logging.warning(ADOutbound.LOG_PREFIX .. "'%s': intet at læsse ved %s efter %d s; kilden springes over i %d min (%s)", tostring(vehicle:getName()), tostring(source ~= nil and source.name or state.current), math.floor(ADOutbound.EMPTY_SOURCE_MS / 1000), math.floor(ADOutbound.EMPTY_SOURCE_TTL_MS / 60000), okDiag and diagnosis or tostring(diagnosis))
state.noProgressMs, state.completed = 0, true state.noProgressMs, state.completed = 0, true
task:finished() task:finished()
return true return true
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?> <?xml version="1.0" encoding="utf-8" standalone="no"?>
<modDesc descVersion="107"> <modDesc descVersion="107">
<author>masterdraco</author> <author>masterdraco</author>
<version>1.16.1.0</version> <version>1.16.2.0</version>
<title> <title>
<en>AD Smart Pickup</en> <en>AD Smart Pickup</en>
</title> </title>