fix(ejerskab): jord-bundne kortanlæg (boughtWithFarmland / ejer 15) er gårdens når jorden under dem er købt — Dakotas BGA500kw på jordlod 69 (v1.17.7.0)
This commit is contained in:
@@ -50,7 +50,11 @@ local function getProductionPoint(placeable)
|
||||
return placeable.spec_productionPoint ~= nil and placeable.spec_productionPoint.productionPoint or nil
|
||||
end
|
||||
|
||||
-- Fælles ejerregel (ADPrices): egen ejer eller jord-bundet kortanlæg på gårdens jord.
|
||||
local function isOwnedBy(placeable, farmId)
|
||||
if ADPrices ~= nil and ADPrices.isOwnedBy ~= nil then
|
||||
return ADPrices.isOwnedBy(placeable, farmId)
|
||||
end
|
||||
if placeable.getOwnerFarmId ~= nil then
|
||||
local ok, owner = pcall(placeable.getOwnerFarmId, placeable)
|
||||
return ok and owner == farmId
|
||||
|
||||
@@ -84,19 +84,49 @@ function ADPrices.isSellingStation(station)
|
||||
return true
|
||||
end
|
||||
|
||||
function ADPrices.isOwnedByPlayer(placeable)
|
||||
local owner = nil
|
||||
-- Placeable-ejeren (nil = ukendt).
|
||||
local function getOwner(placeable)
|
||||
if placeable.getOwnerFarmId ~= nil then
|
||||
local ok, value = pcall(placeable.getOwnerFarmId, placeable)
|
||||
if ok then owner = value end
|
||||
elseif placeable.ownerFarmId ~= nil then
|
||||
owner = placeable.ownerFarmId
|
||||
if ok then return value end
|
||||
return nil
|
||||
end
|
||||
if owner == nil then
|
||||
return placeable.ownerFarmId
|
||||
end
|
||||
|
||||
-- Ejeren af jorden under en placeable (nil = ukendt).
|
||||
local function getLandOwner(placeable)
|
||||
local manager = g_farmlandManager
|
||||
if manager == nil or manager.getFarmlandIdAtWorldPosition == nil or manager.getFarmlandOwner == nil or placeable.rootNode == nil or getWorldTranslation == nil then
|
||||
return nil
|
||||
end
|
||||
local ok, x, _, z = pcall(getWorldTranslation, placeable.rootNode)
|
||||
if not ok or x == nil then return nil end
|
||||
local okId, farmlandId = pcall(manager.getFarmlandIdAtWorldPosition, manager, x, z)
|
||||
if not okId or farmlandId == nil then return nil end
|
||||
local okOwner, owner = pcall(manager.getFarmlandOwner, manager, farmlandId)
|
||||
return okOwner and owner or nil
|
||||
end
|
||||
|
||||
-- Gårdens bygning? Ejer = farmId, ELLER et kortanlæg der følger jorden (boughtWithFarmland / ejer 15)
|
||||
-- og jorden under det er gårdens — Dakotas BGA500kw står med ejer 15 selv på købt jord.
|
||||
function ADPrices.isOwnedBy(placeable, farmId)
|
||||
if placeable == nil then return false end
|
||||
local owner = getOwner(placeable)
|
||||
if owner == farmId then return true end
|
||||
if placeable.boughtWithFarmland == true or owner == 15 then
|
||||
return getLandOwner(placeable) == farmId
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Spillerens gård ejer placeablen; ukendt ejer = regnes som egen (afleveringer til egne anlæg er ikke salg).
|
||||
function ADPrices.isOwnedByPlayer(placeable)
|
||||
local farmId = g_currentMission ~= nil and g_currentMission.getFarmId ~= nil and g_currentMission:getFarmId() or 1
|
||||
if getOwner(placeable) == nil then
|
||||
return true
|
||||
end
|
||||
local farmId = g_currentMission ~= nil and g_currentMission.getFarmId ~= nil and g_currentMission:getFarmId() or 1
|
||||
return owner == farmId
|
||||
return ADPrices.isOwnedBy(placeable, farmId)
|
||||
end
|
||||
|
||||
local function getCurrentPeriod()
|
||||
|
||||
@@ -63,6 +63,16 @@ local function getAutoDriveEnv()
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Adgang til en station: spillets adgangstjek, eller stationens bygning er gårdens efter den fælles
|
||||
-- ejerregel (jord-bundne kortanlæg som Dakotas BGA står med ejer 15 selv på gårdens jord).
|
||||
function ADSmartPickup.canUseStation(farmId, station)
|
||||
local access = g_currentMission ~= nil and g_currentMission.accessHandler or nil
|
||||
if access == nil or access:canFarmAccess(farmId, station) then
|
||||
return true
|
||||
end
|
||||
return station.owningPlaceable ~= nil and ADPrices ~= nil and ADPrices.isOwnedBy ~= nil and ADPrices.isOwnedBy(station.owningPlaceable, farmId)
|
||||
end
|
||||
|
||||
function ADSmartPickup.getFarmId(vehicle)
|
||||
if vehicle.getOwnerFarmId ~= nil then
|
||||
local farmId = vehicle:getOwnerFarmId()
|
||||
@@ -140,7 +150,7 @@ local function getClosestStation(adEnv, candidateStations, triggersField, nodeFi
|
||||
local maxFallbackDistance = direction ~= nil and ADSmartPickup.MAX_FALLBACK_TRIGGER_DISTANCE or ADSmartPickup.MAX_MARKER_TO_TRIGGER_DISTANCE
|
||||
local best = {any = {distance = maxFallbackDistance}, behind = {distance = ADSmartPickup.MAX_MARKER_TO_TRIGGER_DISTANCE}}
|
||||
for _, station in pairs(candidateStations) do
|
||||
if g_currentMission.accessHandler:canFarmAccess(farmId, station) then
|
||||
if ADSmartPickup.canUseStation(farmId, station) then
|
||||
local closest, closestBehind = getDistancesToTriggers(station[triggersField], nodeFields, wayPoint, direction)
|
||||
if closest < best.any.distance then
|
||||
best.any = {distance = closest, station = station}
|
||||
@@ -182,7 +192,7 @@ function ADSmartPickup.getLoadStationNearWayPointId(adEnv, wayPointId, farmId, m
|
||||
end
|
||||
local best, bestDistance = nil, maxDistance or ADSmartPickup.MAX_MARKER_TO_TRIGGER_DISTANCE
|
||||
for _, station in pairs(g_currentMission.storageSystem:getLoadingStations()) do
|
||||
if g_currentMission.accessHandler:canFarmAccess(farmId, station) then
|
||||
if ADSmartPickup.canUseStation(farmId, station) then
|
||||
local closest = getDistancesToTriggers(station.loadTriggers, LOAD_TRIGGER_NODE_FIELDS, wayPoint, nil)
|
||||
if closest < bestDistance then
|
||||
best, bestDistance = station, closest
|
||||
|
||||
@@ -548,7 +548,11 @@ end
|
||||
|
||||
ADSources.RESERVE_HOURS = 24
|
||||
|
||||
-- Fælles ejerregel (ADPrices): egen ejer eller jord-bundet kortanlæg på gårdens jord.
|
||||
local function isOwnedBy(placeable, farmId)
|
||||
if ADPrices ~= nil and ADPrices.isOwnedBy ~= nil then
|
||||
return ADPrices.isOwnedBy(placeable, farmId)
|
||||
end
|
||||
if placeable.getOwnerFarmId ~= nil then
|
||||
local ok, owner = pcall(placeable.getOwnerFarmId, placeable)
|
||||
return ok and owner == farmId
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.17.6.0</version>
|
||||
<version>1.17.7.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# AD Smart Pickup — brugermanual
|
||||
|
||||
Version 1.17.6 · Farming Simulator 25 · tillæg til AutoDrive
|
||||
Version 1.17.7 · Farming Simulator 25 · tillæg til AutoDrive
|
||||
|
||||
*English version: [USER_MANUAL.md](USER_MANUAL.md)*
|
||||
|
||||
@@ -63,6 +63,8 @@ liste traktorer. Ældre versioner kaldte det et *run*, og ordet står stadig på
|
||||
|
||||
**Bygning.** En stald, fabrik, silo, et objektlager (palleskur) eller et salgssted. Du vælger
|
||||
bygninger, ikke markører. Moden finder selv den AutoDrive-markør, der hører til bygningens trigger.
|
||||
Kun gårdens egne bygninger vises. Kortets faste anlæg, der følger jorden, som Dakotas biogasanlæg,
|
||||
regnes som gårdens, når jorden under dem er købt.
|
||||
|
||||
**Markør.** En AutoDrive-destination. Hver bygning skal have en markør inden for 40 m af sin læsse-
|
||||
eller aflæsningstrigger. En stald har tit flere, fx én ved mælketanken og én ved gyllebeholderen.
|
||||
|
||||
+3
-1
@@ -1,6 +1,6 @@
|
||||
# AD Smart Pickup — user manual
|
||||
|
||||
Version 1.17.6 · Farming Simulator 25 · add-on for AutoDrive
|
||||
Version 1.17.7 · Farming Simulator 25 · add-on for AutoDrive
|
||||
|
||||
*Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)*
|
||||
|
||||
@@ -63,6 +63,8 @@ tractors. Older versions called it a *run*, and the word is still used on some b
|
||||
|
||||
**Building.** A barn, factory, silo, object storage (pallet shed) or selling point. You pick
|
||||
buildings, not markers. The mod finds the AutoDrive marker that belongs to the building's trigger.
|
||||
Only the farm's own buildings are listed. Fixed map buildings that come with the land, such as
|
||||
Dakota's biogas plant, count as the farm's once the land under them is bought.
|
||||
|
||||
**Marker.** An AutoDrive destination. Every building needs a marker within 40 m of its loading or
|
||||
unloading trigger. A barn often has several, such as one at the milk tank and one at the slurry tank.
|
||||
|
||||
@@ -83,5 +83,24 @@ check("P6 højeste procent", best.percent, 92)
|
||||
check("P6 ved lighed højeste pris", best.price, 3)
|
||||
check("P6 tom -> nil", ADPrices.bestQuote({}), nil)
|
||||
|
||||
-- P-land: kortanlæg der følger jorden (boughtWithFarmland) er gårdens, når jorden under dem er gårdens —
|
||||
-- selv om placeable-ejeren står som 15 (Dakotas BGA500kw på jordlod 69)
|
||||
getWorldTranslation = getWorldTranslation or function(node) return node.x, 0, node.z end
|
||||
g_currentMission = g_currentMission or {}
|
||||
g_currentMission.getFarmId = function() return 1 end
|
||||
g_farmlandManager = {
|
||||
getFarmlandIdAtWorldPosition = function(_, x, z) return x < 0 and 69 or 70 end,
|
||||
getFarmlandOwner = function(_, id) return id == 69 and 1 or 0 end,
|
||||
}
|
||||
local bga = {rootNode = {x = -1600, z = -89}, boughtWithFarmland = true, spec_productionPoint = {}, getOwnerFarmId = function() return 15 end}
|
||||
local bgaOther = {rootNode = {x = 1600, z = -89}, boughtWithFarmland = true, spec_productionPoint = {}, getOwnerFarmId = function() return 15 end}
|
||||
local dairy = {rootNode = {x = -3173, z = -4028}, spec_productionPoint = {}, getOwnerFarmId = function() return 0 end}
|
||||
check("P-land BGA på egen jord = egen", ADPrices.isOwnedBy(bga, 1), true)
|
||||
check("P-land BGA på fremmed jord = ikke egen", ADPrices.isOwnedBy(bgaOther, 1), false)
|
||||
check("P-land mejeri (ejer 0, ikke jord-bundet) = ikke egen", ADPrices.isOwnedBy(dairy, 1), false)
|
||||
check("P-land egen ejer", ADPrices.isOwnedBy({getOwnerFarmId = function() return 1 end}, 1), true)
|
||||
check("P-land BGA er ikke salgssted", ADPrices.isSellingStation({isa = function() return true end, isSellingPoint = true, owningPlaceable = bga}), false)
|
||||
g_farmlandManager = nil
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user