fix: marker uden jordstykke-kobling findes via jordstykket under midtpunktet (v1.62.8)
This commit is contained in:
@@ -178,15 +178,29 @@ local function missionSettings()
|
||||
}
|
||||
end
|
||||
|
||||
local function fieldOwner(field)
|
||||
local farmland = field.farmland or (field.getFarmland ~= nil and field:getFarmland()) or nil
|
||||
if farmland == nil then return nil end
|
||||
if farmland.id ~= nil and g_farmlandManager ~= nil and g_farmlandManager.getFarmlandOwner ~= nil then
|
||||
return g_farmlandManager:getFarmlandOwner(farmland.id)
|
||||
end
|
||||
return farmland.farmId
|
||||
-- Jordstykket under markens midtpunkt (reserve når marken ikke er koblet til et jordstykke).
|
||||
local function farmlandIdAtCenter(field)
|
||||
if g_farmlandManager == nil or g_farmlandManager.getFarmlandIdAtWorldPosition == nil then return nil end
|
||||
local verts = ADFields.readPolygon(field)
|
||||
if #verts == 0 then return nil end
|
||||
local sx, sz = 0, 0
|
||||
for _, v in ipairs(verts) do sx, sz = sx + v.x, sz + v.z end
|
||||
local ok, id = pcall(g_farmlandManager.getFarmlandIdAtWorldPosition, g_farmlandManager, sx / #verts, sz / #verts)
|
||||
return ok and type(id) == "number" and id > 0 and id or nil
|
||||
end
|
||||
|
||||
-- Gården der ejer marken. Nogle kort kobler ikke markerne til et jordstykke (Chipping Norton, in-game 2/10:
|
||||
-- fanen Marker stod på "0 af 0") — så bruges jordstykket under markens midtpunkt.
|
||||
function ADFields.fieldOwner(field)
|
||||
local farmland = field.farmland or (field.getFarmland ~= nil and field:getFarmland()) or nil
|
||||
local farmlandId = farmland ~= nil and farmland.id or farmlandIdAtCenter(field)
|
||||
if farmlandId ~= nil and g_farmlandManager ~= nil and g_farmlandManager.getFarmlandOwner ~= nil then
|
||||
return g_farmlandManager:getFarmlandOwner(farmlandId)
|
||||
end
|
||||
return farmland ~= nil and farmland.farmId or nil
|
||||
end
|
||||
local fieldOwner = ADFields.fieldOwner
|
||||
|
||||
local function isOnField(x, z)
|
||||
local y = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, x, 1, z)
|
||||
return FSDensityMapUtil.getFieldDataAtWorldPosition(x, y, z) and true or false
|
||||
@@ -546,12 +560,15 @@ local function newOwnedScan(farmId)
|
||||
for _, field in pairs(g_fieldManager ~= nil and (g_fieldManager:getFields() or g_fieldManager.fields) or {}) do
|
||||
table.insert(all, field)
|
||||
end
|
||||
local scan = {owned = true, queue = {}, head = 1, tail = 0, result = {}}
|
||||
local scan = {owned = true, queue = {}, head = 1, tail = 0, result = {}, total = #all, unlinked = 0, farmId = farmId}
|
||||
for start = 1, #all, 25 do
|
||||
push(scan, function()
|
||||
for index = start, math.min(start + 24, #all) do
|
||||
local field = all[index]
|
||||
local id = field.getId ~= nil and field:getId() or field.fieldId
|
||||
if field.farmland == nil and (field.getFarmland == nil or field:getFarmland() == nil) then
|
||||
scan.unlinked = scan.unlinked + 1
|
||||
end
|
||||
if id ~= nil and fieldOwner(field) == farmId then
|
||||
table.insert(scan.result, {id = id, field = field})
|
||||
end
|
||||
@@ -568,6 +585,13 @@ local function finishOwnedScan(scan)
|
||||
for id in pairs(ADFields.cache) do
|
||||
if not ids[id] then ADFields.cache[id] = nil end
|
||||
end
|
||||
-- diagnose: kun når tællingen ændrer sig (scanningen kører hvert OWNED_REFRESH_MS)
|
||||
local summary = string.format("marker: %d i alt, %d ejet af gård %s, %d uden jordstykke-kobling",
|
||||
scan.total or 0, #scan.result, tostring(scan.farmId), scan.unlinked or 0)
|
||||
if summary ~= ADFields.lastOwnedSummary then
|
||||
ADFields.lastOwnedSummary = summary
|
||||
Logging.info("ADSmartPickup: " .. summary)
|
||||
end
|
||||
ADFields.order = scan.result
|
||||
ADFields.ownedDone = true
|
||||
ADFields.listCache = nil
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.62.7.0</version>
|
||||
<version>1.62.8.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
Reference in New Issue
Block a user