fix(kobling): Connect kobler kun på; i en tur sættes vognen af ved sin egen AD-parkering (advd.parkDestination) — kun i turen, så almindelig AD-parkering ikke afkobler (v1.47.3.0)

This commit is contained in:
2026-09-28 17:18:14 +02:00
parent f2ebc54b25
commit b8704f1f95
3 changed files with 25 additions and 19 deletions
+19 -14
View File
@@ -68,10 +68,9 @@ function ADHitch.stepAction(name)
return ADHitch.parseMarker(name) or "arrive" return ADHitch.parseMarker(name) or "arrive"
end end
-- Connect-markøren virker begge veje: ankommer traktoren med et redskab bag sig, kobles det af igen — markøren -- I en tur: en almindelig markør, der er AD-parkeringen for redskabet bag traktoren, er stedet vognen sættes af.
-- ligger under trækøjet, så vognen står da præcis på sin parkeringsplads. function ADHitch.resolveAction(action, isImplementPark)
function ADHitch.resolveAction(action, hasRearImplement) if action == "arrive" and isImplementPark then return "detach" end
if action == "attach" and hasRearImplement then return "detach" end
return action return action
end end
@@ -188,8 +187,15 @@ local function attachedImplements(vehicle)
return list return list
end end
local function hasRearImplement(vehicle) -- Er markøren (waypoint-id) AD-parkeringen for et af redskaberne bag traktoren?
return #ADHitch.rearImplements(attachedImplements(vehicle)) > 0 local function isImplementPark(adEnv, vehicle, markerId)
for _, implement in ipairs(ADHitch.rearImplements(attachedImplements(vehicle))) do
local advd = implement.object.advd
local index = advd ~= nil and advd.parkDestination or nil
local marker = type(index) == "number" and index >= 1 and adEnv.ADGraphManager:getMapMarkerById(index) or nil
if marker ~= nil and marker.id == markerId then return true end
end
return false
end end
-- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag -- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag
@@ -228,7 +234,8 @@ function ADHitch.drop(adEnv, vehicle, markerId, onDone)
return start(adEnv, vehicle, markerId, "detach", onDone) return start(adEnv, vehicle, markerId, "detach", onDone)
end end
-- Tur: markørerne køres i rækkefølge. Connect = kobl på, Afkobl = kobl af, andre = kør dertil (og hold -- Tur: markørerne køres i rækkefølge. Connect = kobl på, Afkobl eller vognens egen AD-parkering = kobl af,
-- andre = kør dertil (og hold
-- ROUTE_WAIT_MS, hvis det ikke er sidste trin). Stopper ved første fejl. onDone(vehicle, ok, årsag) til sidst. -- ROUTE_WAIT_MS, hvis det ikke er sidste trin). Stopper ved første fejl. onDone(vehicle, ok, årsag) til sidst.
local waits = {} -- {vehicle, leftMs, continue} local waits = {} -- {vehicle, leftMs, continue}
@@ -241,7 +248,7 @@ function ADHitch.route(adEnv, vehicle, markerIds, onDone)
end end
local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(markerIds[index]) local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(markerIds[index])
local action = ADHitch.resolveAction(ADHitch.stepAction(marker ~= nil and marker.name or nil), local action = ADHitch.resolveAction(ADHitch.stepAction(marker ~= nil and marker.name or nil),
hasRearImplement(vehicle)) isImplementPark(adEnv, vehicle, markerIds[index]))
start(adEnv, vehicle, markerIds[index], action, function(_, ok, detail) start(adEnv, vehicle, markerIds[index], action, function(_, ok, detail)
if not ok then if not ok then
Logging.warning(ADHitch.LOG_PREFIX .. "'%s' stopper turen ved trin %d", vehicleName(vehicle), index) Logging.warning(ADHitch.LOG_PREFIX .. "'%s' stopper turen ved trin %d", vehicleName(vehicle), index)
@@ -280,9 +287,7 @@ local function watchManualTrips(adEnv)
and module:getMode() == adEnv.AutoDrive.MODE_DRIVETO then and module:getMode() == adEnv.AutoDrive.MODE_DRIVETO then
local marker = module:getFirstMarker() local marker = module:getFirstMarker()
local action = marker ~= nil and ADHitch.parseMarker(marker.name) or nil local action = marker ~= nil and ADHitch.parseMarker(marker.name) or nil
if action ~= nil then if action ~= nil then jobs[vehicle] = ADHitch.newJob(marker.id, marker.name, action) end
jobs[vehicle] = ADHitch.newJob(marker.id, marker.name, ADHitch.resolveAction(action, hasRearImplement(vehicle)))
end
end end
end end
end end
@@ -351,7 +356,7 @@ function ADHitch:consoleDetach()
return "spuDetach: intet koblet af (" .. tostring(detail) .. ")" return "spuDetach: intet koblet af (" .. tostring(detail) .. ")"
end end
-- "spuTrip Connect Bredal > Start > Connect Bredal > Start": maskinen spilleren sidder i kører turen -- "spuTrip Connect Bredal > Start > Bredal > Start": maskinen spilleren sidder i kører turen
-- (spilleren kan blive siddende; AD kører også med spilleren i førerhuset). -- (spilleren kan blive siddende; AD kører også med spilleren i førerhuset).
function ADHitch:consoleTrip(...) function ADHitch:consoleTrip(...)
local vehicle = currentVehicle() local vehicle = currentVehicle()
@@ -359,7 +364,7 @@ function ADHitch:consoleTrip(...)
local adEnv = ADFieldSilos ~= nil and ADFieldSilos.adEnv or nil local adEnv = ADFieldSilos ~= nil and ADFieldSilos.adEnv or nil
if adEnv == nil then return "spuTrip: AutoDrive er ikke klar endnu" end if adEnv == nil then return "spuTrip: AutoDrive er ikke klar endnu" end
local names = ADHitch.parseTrip(...) local names = ADHitch.parseTrip(...)
if #names == 0 then return "spuTrip: brug fx spuTrip Connect Bredal > Start > Connect Bredal > Start" end if #names == 0 then return "spuTrip: brug fx spuTrip Connect Bredal > Start > Bredal > Start" end
local markers, ids = adEnv.ADGraphManager:getMapMarkers(), {} local markers, ids = adEnv.ADGraphManager:getMapMarkers(), {}
for _, name in ipairs(names) do for _, name in ipairs(names) do
local marker = ADHitch.findMarker(markers, name) local marker = ADHitch.findMarker(markers, name)
@@ -372,6 +377,6 @@ end
if addConsoleCommand ~= nil then if addConsoleCommand ~= nil then
addConsoleCommand("spuConnect", "Kobler nærmeste redskab på den maskine du sidder i", "consoleConnect", ADHitch) addConsoleCommand("spuConnect", "Kobler nærmeste redskab på den maskine du sidder i", "consoleConnect", ADHitch)
addConsoleCommand("spuTrip", "Kør en tur: spuTrip Connect Bredal > Start > Connect Bredal > Start", "consoleTrip", ADHitch) addConsoleCommand("spuTrip", "Kør en tur: spuTrip Connect Bredal > Start > Bredal > Start", "consoleTrip", ADHitch)
addConsoleCommand("spuDetach", "Kobler redskaberne bag den maskine du sidder i af", "consoleDetach", ADHitch) addConsoleCommand("spuDetach", "Kobler redskaberne bag den maskine du sidder i af", "consoleDetach", ADHitch)
end end
+1 -1
View File
@@ -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.47.2.0</version> <version>1.47.3.0</version>
<title> <title>
<en>AD Smart Pickup</en> <en>AD Smart Pickup</en>
</title> </title>
+5 -4
View File
@@ -77,10 +77,11 @@ check("trin: ankom er færdig", arriveJob.state, "done")
local markers = {{name = "Start", id = 1}, {name = "Connect Bredal", id = 9}} local markers = {{name = "Start", id = 1}, {name = "Connect Bredal", id = 9}}
check("markør: navn uden hensyn til store/små", H.findMarker(markers, "connect bredal").id, 9) check("markør: navn uden hensyn til store/små", H.findMarker(markers, "connect bredal").id, 9)
check("markør: ukendt", H.findMarker(markers, "Stald"), nil) check("markør: ukendt", H.findMarker(markers, "Stald"), nil)
-- Connect-markøren virker begge veje: med redskab bag sig kobles det af (vognen står så på sin plads) -- Connect = kun kobl på; i en tur kobles vognen af ved sin egen AD-parkering
check("connect uden vogn: kobl på", H.resolveAction("attach", false), "attach") check("connect: kobl på", H.resolveAction("attach", false), "attach")
check("connect med vogn: kobl af", H.resolveAction("attach", true), "detach") check("connect med vogn: stadig kobl på (ingen vending)", H.resolveAction("attach", false), "attach")
check("vognens parkering: kobl af", H.resolveAction("arrive", true), "detach")
check("almindelig markør", H.resolveAction("arrive", false), "arrive")
check("afkobl forbliver afkobl", H.resolveAction("detach", false), "detach") check("afkobl forbliver afkobl", H.resolveAction("detach", false), "detach")
check("almindelig markør", H.resolveAction("arrive", true), "arrive")
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
os.exit(failures == 0 and 0 or 1) os.exit(failures == 0 and 0 or 1)