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:
@@ -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,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>
|
||||||
|
|||||||
Reference in New Issue
Block a user