From 23c94b49df501b6bf0a9afd5fd9427e16cdeef14 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Thu, 24 Sep 2026 03:03:50 +0200 Subject: [PATCH] =?UTF-8?q?feat(diagnose):=20'intet=20at=20l=C3=A6sse'=20l?= =?UTF-8?q?ogger=20mark=C3=B8r,=20kildens=20m=C3=A6ngde,=20vognens=20afsta?= =?UTF-8?q?nd=20til=20triggeren=20og=20AD-vare=20(v1.16.2.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adOutbound.lua | 40 ++++++++++++++++++++++++++++++- FS25_ADSmartPickup/modDesc.xml | 2 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/FS25_ADSmartPickup/adOutbound.lua b/FS25_ADSmartPickup/adOutbound.lua index 2261eb2..758127d 100644 --- a/FS25_ADSmartPickup/adOutbound.lua +++ b/FS25_ADSmartPickup/adOutbound.lua @@ -599,6 +599,43 @@ local function updateSpawn(adEnv, state, task, source, dt) 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). function ADOutbound.beforeLoadUpdate(adEnv, task, dt) local vehicle = task.vehicle @@ -631,7 +668,8 @@ function ADOutbound.beforeLoadUpdate(adEnv, task, dt) for _, fillType in ipairs(state.trip.fillTypes) do emptyUntil[tostring(state.current) .. ":" .. tostring(fillType)] = expires 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 task:finished() return true diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index abd0484..a3257c3 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.16.1.0 + 1.16.2.0 <en>AD Smart Pickup</en>