From c60510ae0ef587b65bcfd3590c88fbe489fdcbe4 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Thu, 24 Sep 2026 00:41:19 +0200 Subject: [PATCH] =?UTF-8?q?fix(flows):=20gamle=20r=C3=A5=20mark=C3=B8rer?= =?UTF-8?q?=20ryddes=20n=C3=A5r=20de=20ikke=20er=20kilde=20eller=20dublere?= =?UTF-8?q?r=20en=20valgt=20bygning=20(v1.13.5.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adRunsController.lua | 22 +++++++++++++++++++++- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adRunsController.lua | 15 +++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 7e87c9d..a98c950 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -314,12 +314,32 @@ function ADRunsController.resolveMarkers(adEnv, run) table.insert(missing, building ~= nil and building.name or (tostring(buildingId) .. " (mangler)")) end end + -- Rå markører (fra før flow-tavlen): beholdes kun hvis de er en genkendelig kilde og ikke hører til + -- en bygning der allerede er valgt (så ville de dublere bygningens egne markører). + local chosenPlaceables = {} + for _, buildingId in ipairs(buildingIds or {}) do + local building = ADBuildings.find(adEnv, farmId, buildingId) + if building ~= nil and building.placeable ~= nil then chosenPlaceables[building.placeable] = true end + end + local pruned = {} for _, wayPointId in ipairs(existing or {}) do if not seen[wayPointId] and ADBuildings.byMarker(adEnv, farmId, wayPointId, role) == nil then + local keep = true + if role == "load" and ADSources ~= nil and ADSources.identify ~= nil then + local source = ADSources.identify(adEnv, wayPointId, farmId) + keep = source ~= nil and not (source.placeable ~= nil and chosenPlaceables[source.placeable]) + end seen[wayPointId] = true - table.insert(resolved, wayPointId) + if keep then + table.insert(resolved, wayPointId) + else + table.insert(pruned, tostring(wayPointId)) + end end end + if #pruned > 0 then + Logging.info(ADRunsController.LOG_PREFIX .. "run '%s': gamle markører fjernet (ingen kilde eller dublet af valgt bygning): %s", tostring(run.name), table.concat(pruned, " ")) + end if not listEquals(resolved, existing or {}) then local changes = run.kind == "outbound" and {sourceWayPointIds = resolved} or {targetWayPointIds = resolved} ADRunsController.store = ADRuns.updateRun(ADRunsController.store, run.id, changes) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index e98ba85..d804fc4 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.13.4.0 + 1.13.5.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adRunsController.lua b/tests/test_adRunsController.lua index 552494d..bd83dfe 100644 --- a/tests/test_adRunsController.lua +++ b/tests/test_adRunsController.lua @@ -619,6 +619,21 @@ check("CF1 manglende markør", resolved.missing[1], "Palleskur") ADRunsController.updateRun(flowOut.id, {sourceWayPointIds = {12694, 555}}) ADRunsController.resolveMarkers(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id)) check("CF1 fravalgt bygnings markør fjernes", table.concat(ADRuns.getRun(ADRunsController.store, flowOut.id).sourceWayPointIds, ","), "10,11,555") +-- CF1b: gamle rå markører ryddes: ikke-kilde (identify = nil) og markør der hører til en valgt bygning +ADSources.identify = function(_, id) + if id == 10 or id == 12694 or id == 555 then return {kind = "x", wayPointId = id, name = "k"} end + if id == 556 then return {kind = "husbandry", wayPointId = id, name = "Kostald 1", placeable = "barn1-placeable"} end + return nil +end +buildings[1].placeable = "barn1-placeable" +ADRunsController.updateRun(flowOut.id, {sourceBuildingIds = {"barn1"}, sourceWayPointIds = {10, 11, 555, 556, 999}}) +logLines = {} +ADRunsController.resolveMarkers(adEnv, ADRuns.getRun(ADRunsController.store, flowOut.id)) +check("CF1b rå ikke-kilde og dublet-bygning fjernet", table.concat(ADRuns.getRun(ADRunsController.store, flowOut.id).sourceWayPointIds, ","), "10,11,555") +local pruneLogged = false +for _, line in ipairs(logLines) do if line:find("gamle markører fjernet", 1, true) then pruneLogged = true end end +check("CF1b logget", pruneLogged, true) + -- CF2: forsyning: mål-bygninger -> targetWayPointIds + targetWayPointId local flowIn = ADRunsController.createRun("Foder", "supply") ADRunsController.updateRun(flowIn.id, {targetBuildingIds = {"barn1", "mill"}})