fix(kæde): ingen markskift eller forslag før markscanningen har set alle marker
This commit is contained in:
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user