fix(kæde): ingen markskift eller forslag før markscanningen har set alle marker

This commit is contained in:
2026-09-30 14:25:14 +02:00
parent 605c4e8d45
commit d2453f78fb
6 changed files with 39 additions and 8 deletions
+19 -1
View File
@@ -10,6 +10,9 @@ ADFields.MARKER_MAX_DISTANCE = 400
ADFields.cache = {}
ADFields.order = {}
ADFields.scanIndex = 0
-- {[markId] = true}: marker hvis scanning er afsluttet (med resultat) eller fejlede — til isScanComplete
ADFields.scanFailed = {}
ADFields.ownedDone = false
ADFields.mowable = nil
-- markliste og F-markører ændrer sig sjældent: slås op igen efter så lang tid (ikke hvert scan)
ADFields.OWNED_REFRESH_MS = 30000
@@ -566,9 +569,20 @@ local function finishOwnedScan(scan)
if not ids[id] then ADFields.cache[id] = nil end
end
ADFields.order = scan.result
ADFields.ownedDone = true
ADFields.listCache = nil
end
-- Har scanningen nået alle ejede marker mindst én gang (resultat i cachen, eller scanningen fejlede)?
-- Indtil da er marklisten ufuldstændig (efter indlæsning fyldes den ~én mark pr. SCAN_INTERVAL_MS).
function ADFields.isScanComplete()
if not ADFields.ownedDone then return false end
for _, entry in ipairs(ADFields.order) do
if ADFields.cache[entry.id] == nil and not ADFields.scanFailed[entry.id] then return false end
end
return true
end
-- Kaldes HVERT frame: kører én opgave af den aktuelle scanning. En ny mark påbegyndes højst hvert
-- SCAN_INTERVAL_MS; marklisten opdateres hvert OWNED_REFRESH_MS.
ADFields.SCAN_INTERVAL_MS = 2000
@@ -612,6 +626,7 @@ function ADFields.scanStep(adEnv, farmId, now)
local ok, err = pcall(task)
if not ok then
Logging.warning("ADSmartPickup: F%s kunne ikke scannes: %s", tostring(scan.id or "-"), tostring(err))
if scan.id ~= nil then ADFields.scanFailed[scan.id] = true end
ADFields.activeScan = nil
return
end
@@ -628,7 +643,10 @@ function ADFields.scanStep(adEnv, farmId, now)
else
ok, err = pcall(finishScan, adEnv, scan)
end
if not ok then Logging.warning("ADSmartPickup: F%s scanning kunne ikke afsluttes: %s", tostring(scan.id or "-"), tostring(err)) end
if not ok then
Logging.warning("ADSmartPickup: F%s scanning kunne ikke afsluttes: %s", tostring(scan.id or "-"), tostring(err))
if scan.id ~= nil then ADFields.scanFailed[scan.id] = true end
end
end
-- Samme liste indtil næste scanning (list() kaldes hvert sekund; ingen ny tabel hver gang).