From a694d17a6741a5ac5186c39a982d83af23527e9d Mon Sep 17 00:00:00 2001 From: masterdraco Date: Tue, 29 Sep 2026 15:23:14 +0200 Subject: [PATCH] =?UTF-8?q?fix(udk=C3=B8rsel):=20'Wait=20at:=20All'=20v?= =?UTF-8?q?=C3=A6lger=20det=20ledige=20Wait-punkt=20n=C3=A6rmest=20flowets?= =?UTF-8?q?=20kilder,=20ikke=20n=C3=A6rmest=20traktoren=20(v1.57.1.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adOutbound.lua | 12 +++++++++++- FS25_ADSmartPickup/adWaitPool.lua | 12 +++++++++++- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adWaitPool.lua | 6 ++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/FS25_ADSmartPickup/adOutbound.lua b/FS25_ADSmartPickup/adOutbound.lua index 15cf4b6..ab9a1f8 100644 --- a/FS25_ADSmartPickup/adOutbound.lua +++ b/FS25_ADSmartPickup/adOutbound.lua @@ -493,7 +493,17 @@ local function startHold(adEnv, vehicle, run, reasons, sourcesById) local isReachable = function(candidate) return ADWaitPool.hasRouteTo(adEnv, vehicle, candidate.marker.id) end - local candidate = ADWaitPool.pickFree(adEnv, vehicle, run.waitPoolGroup, isReachable) + -- "All": nærmest flowets egne kilder, ikke nærmest traktoren (in-game 29/9: Milk Store ved sukkerroeknuseren) + local anchorX, anchorZ = nil, nil + if run.waitPoolGroup == nil then + local points = {} + for _, id in ipairs(run.sourceWayPointIds or {}) do + local wayPoint = adEnv.ADGraphManager:getWayPointById(id) + if wayPoint ~= nil then table.insert(points, {x = wayPoint.x, z = wayPoint.z}) end + end + anchorX, anchorZ = ADWaitPool.anchorOf(points) + end + local candidate = ADWaitPool.pickFree(adEnv, vehicle, run.waitPoolGroup, isReachable, anchorX, anchorZ) local marker, source = nil, nil if candidate ~= nil then ADWaitPool.claim(candidate.marker.id, vehicle) diff --git a/FS25_ADSmartPickup/adWaitPool.lua b/FS25_ADSmartPickup/adWaitPool.lua index d5c764e..fbb9afb 100644 --- a/FS25_ADSmartPickup/adWaitPool.lua +++ b/FS25_ADSmartPickup/adWaitPool.lua @@ -97,8 +97,18 @@ local function otherVehiclePositions(vehicle) return positions end -function ADWaitPool.pickFree(adEnv, vehicle, poolGroup, isReachable) +-- Midtpunkt af punkter {x, z} (fx flowets kilde-markører) -> x, z eller nil. +function ADWaitPool.anchorOf(points) + if points == nil or #points == 0 then return nil end + local sx, sz = 0, 0 + for _, point in ipairs(points) do sx, sz = sx + point.x, sz + point.z end + return sx / #points, sz / #points +end + +-- anchorX/anchorZ (valgfri): vælg nærmest dette punkt i stedet for traktoren (flow med "All": nærmest kilderne). +function ADWaitPool.pickFree(adEnv, vehicle, poolGroup, isReachable, anchorX, anchorZ) local x, z = getVehiclePosition(vehicle) + if anchorX ~= nil and anchorZ ~= nil then x, z = anchorX, anchorZ end if x == nil then return nil end diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 1baeac4..b015ed4 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.57.0.0 + 1.57.1.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adWaitPool.lua b/tests/test_adWaitPool.lua index 9ad70b4..788f6bc 100644 --- a/tests/test_adWaitPool.lua +++ b/tests/test_adWaitPool.lua @@ -156,5 +156,11 @@ do netGetTime = savedClock end +-- ankerpunkt for "All": midt mellem flowets kilder (in-game 29/9: Milk Store ventede ved sukkerroeknuseren) +local ax, az = ADWaitPool.anchorOf({{x = 0, z = 0}, {x = 100, z = 50}}) +check("anker: midtpunkt x", ax, 50) +check("anker: midtpunkt z", az, 25) +check("anker: ingen punkter", ADWaitPool.anchorOf({}), nil) +check("anker: nil", ADWaitPool.anchorOf(nil), nil) print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)