From 2a5236a52acb21b18a7a9963cca279d5fbf20f73 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Wed, 23 Sep 2026 01:25:45 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Start=20run=20starter=20via=20AD's=20mod?= =?UTF-8?q?e:start(USER=5FPLAYER)=20som=20HUD'en=20=E2=80=94=20startAutoDr?= =?UTF-8?q?ive=20alene=20lod=20traktoren=20st=C3=A5=20(v1.9.6.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adRunsController.lua | 20 +++++++++++++++++++- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adRunsController.lua | 16 ++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 021f7f8..6e20e87 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -320,11 +320,29 @@ end -- Anvend run-tilstand OG start traktoren i ét pcall'et kald: kaster vehicle:startAutoDrive() -- (fx AD's egen validering), skal den ene traktor fejle uden at hele startRun-loopet -- afbrydes — ellers når de øvrige tildelte traktorer aldrig at blive startet. +-- Start præcis som AD's HUD (ADInputManager:input_start_stop): det er MODE'ens start(), +-- der opretter køreopgaverne og selv kalder startAutoDrive — startAutoDrive alene sætter +-- kun "aktiv", og traktoren bliver holdende. local function applyAndStart(adEnv, run, vehicle, ingredients) applyRunToVehicle(adEnv, run, vehicle, ingredients) - if not isVehicleActive(vehicle) then + if isVehicleActive(vehicle) then + return + end + local stateModule = vehicle.ad.stateModule + local farmId = ADSmartPickup.getFarmId(vehicle) + if stateModule.setActualFarmId ~= nil and farmId ~= nil then + stateModule:setActualFarmId(farmId) + end + stateModule:setLoopsDone(0) + local mode = stateModule.getCurrentMode ~= nil and stateModule:getCurrentMode() or nil + if mode ~= nil and mode.start ~= nil then + mode:start(adEnv.AutoDrive.USER_PLAYER or 1) + else vehicle:startAutoDrive() end + if vehicle.isServer and SpecializationUtil ~= nil and SpecializationUtil.raiseEvent ~= nil then + SpecializationUtil.raiseEvent(vehicle, "onUpdate", 16, false, false, false) + end end -- Pr. tildelt traktor: validér, skriv AD-tilstand, start. ✖-traktorer springes over. diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 192fc56..8dd97ce 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.9.5.0 + 1.9.6.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adRunsController.lua b/tests/test_adRunsController.lua index bca8adb..5fc6425 100644 --- a/tests/test_adRunsController.lua +++ b/tests/test_adRunsController.lua @@ -310,5 +310,21 @@ check("C10 sorteret på titel", accepted[1].title .. "," .. accepted[2].title .. check("C10 navn med", accepted[1].name, "STRAW") check("C10 label", ADRunsController.getVehicleLabel(adEnv, labelB), "Fastrac B (#2)") +-- C14: Start går gennem AD's mode:start(USER_PLAYER) (som HUD'en), ikke kun startAutoDrive +buildWorld() +local modeVehicle = makeVehicle("vehicleM", "Mode-traktor", {STRAW, TMR}, 1000000, 100, 0) +local modeStarts = {} +modeVehicle.ad.stateModule.getCurrentMode = function() return {start = function(_, user) table.insert(modeStarts, user); modeVehicle:startAutoDrive() end} end +modeVehicle.ad.stateModule.setActualFarmId = function(self, farmId) self.actualFarmId = farmId end +adEnv.AutoDrive.USER_PLAYER = 1 +local modeRun = ADRunsController.createRun("Mode") +ADRunsController.updateRun(modeRun.id, {targetWayPointId = 94}) +ADRunsController.assignVehicle(modeRun.id, modeVehicle) +ADRunsController.startRun(adEnv, modeRun.id) +check("C14 mode:start kaldt med USER_PLAYER", modeStarts[1], 1) +check("C14 traktor aktiv", modeVehicle.started, 1) +check("C14 farm-id sat", modeVehicle.ad.stateModule.actualFarmId, 1) +check("C14 loopsDone nulstillet", modeVehicle.ad.stateModule.loopsDone, 0) + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)