fix: marker uden jordstykke-kobling findes via jordstykket under midtpunktet (v1.62.8)
This commit is contained in:
@@ -8,6 +8,7 @@ står i [docs/BRUGERMANUAL.md](docs/BRUGERMANUAL.md) (dansk) og [docs/USER_MANUA
|
|||||||
|
|
||||||
## 1.62 — Kæder slås selv til
|
## 1.62 — Kæder slås selv til
|
||||||
|
|
||||||
|
- **1.62.8** Rettet: fanen Marker viste "0 af 0" på kort, hvor markerne ikke er koblet til et jordstykke (Chipping Norton). Ejeren findes nu via jordstykket under markens midtpunkt. Loggen skriver én linje med antal marker, ejede og ukoblede.
|
||||||
- **1.62.7** Nyt: konsolkommandoen `spuSellBlock` slår salgssteder fra og til (pr. savegame). Et salgssted, der er slået fra, bruges hverken til udkørsel eller i priserne. Til stationer, hvor aflæsningen går i stå, fx "Market Price Liquid Fill Station".
|
- **1.62.7** Nyt: konsolkommandoen `spuSellBlock` slår salgssteder fra og til (pr. savegame). Et salgssted, der er slået fra, bruges hverken til udkørsel eller i priserne. Til stationer, hvor aflæsningen går i stå, fx "Market Price Liquid Fill Station".
|
||||||
- **1.62.6** Pålæsningsdiagnosen logger kun, når en trigger med varen er inden for 20 m (køretøjer der holder ved Wait-punkter eller marker gav falske meldinger).
|
- **1.62.6** Pålæsningsdiagnosen logger kun, når en trigger med varen er inden for 20 m (køretøjer der holder ved Wait-punkter eller marker gav falske meldinger).
|
||||||
- Manualerne understreger nu, at parkering og hentning af redskaber kun virker ved at bakke: ruten til `P <navn>` og `Connect P <navn>` skal slutte som en bakrute.
|
- Manualerne understreger nu, at parkering og hentning af redskaber kun virker ved at bakke: ruten til `P <navn>` og `Connect P <navn>` skal slutte som en bakrute.
|
||||||
|
|||||||
@@ -178,14 +178,28 @@ local function missionSettings()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local function fieldOwner(field)
|
-- 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 farmland = field.farmland or (field.getFarmland ~= nil and field:getFarmland()) or nil
|
||||||
if farmland == nil then return nil end
|
local farmlandId = farmland ~= nil and farmland.id or farmlandIdAtCenter(field)
|
||||||
if farmland.id ~= nil and g_farmlandManager ~= nil and g_farmlandManager.getFarmlandOwner ~= nil then
|
if farmlandId ~= nil and g_farmlandManager ~= nil and g_farmlandManager.getFarmlandOwner ~= nil then
|
||||||
return g_farmlandManager:getFarmlandOwner(farmland.id)
|
return g_farmlandManager:getFarmlandOwner(farmlandId)
|
||||||
end
|
end
|
||||||
return farmland.farmId
|
return farmland ~= nil and farmland.farmId or nil
|
||||||
end
|
end
|
||||||
|
local fieldOwner = ADFields.fieldOwner
|
||||||
|
|
||||||
local function isOnField(x, z)
|
local function isOnField(x, z)
|
||||||
local y = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, x, 1, z)
|
local y = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, x, 1, z)
|
||||||
@@ -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
|
for _, field in pairs(g_fieldManager ~= nil and (g_fieldManager:getFields() or g_fieldManager.fields) or {}) do
|
||||||
table.insert(all, field)
|
table.insert(all, field)
|
||||||
end
|
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
|
for start = 1, #all, 25 do
|
||||||
push(scan, function()
|
push(scan, function()
|
||||||
for index = start, math.min(start + 24, #all) do
|
for index = start, math.min(start + 24, #all) do
|
||||||
local field = all[index]
|
local field = all[index]
|
||||||
local id = field.getId ~= nil and field:getId() or field.fieldId
|
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
|
if id ~= nil and fieldOwner(field) == farmId then
|
||||||
table.insert(scan.result, {id = id, field = field})
|
table.insert(scan.result, {id = id, field = field})
|
||||||
end
|
end
|
||||||
@@ -568,6 +585,13 @@ local function finishOwnedScan(scan)
|
|||||||
for id in pairs(ADFields.cache) do
|
for id in pairs(ADFields.cache) do
|
||||||
if not ids[id] then ADFields.cache[id] = nil end
|
if not ids[id] then ADFields.cache[id] = nil end
|
||||||
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.order = scan.result
|
||||||
ADFields.ownedDone = true
|
ADFields.ownedDone = true
|
||||||
ADFields.listCache = nil
|
ADFields.listCache = nil
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.62.7.0</version>
|
<version>1.62.8.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
Reference in New Issue
Block a user