From 10838779bc2bde9539901bf9d02ef5935bec1a85 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Sat, 26 Sep 2026 21:33:27 +0200 Subject: [PATCH] =?UTF-8?q?fix(markarbejde):=20vinmark=20=E2=80=94=20Cours?= =?UTF-8?q?eplays=20vinkursus=20l=C3=A6gges=20til=20venstre=20for=20vinen?= =?UTF-8?q?=20(i=20gangen)=20for=20spr=C3=B8jte/spreder/harve,=20p=C3=A5?= =?UTF-8?q?=20vinen=20for=20h=C3=B8steren=20(spr=C3=B8jten=20k=C3=B8rte=20?= =?UTF-8?q?ind=20i=20stolperne)=20(v1.32.5.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adCpBridge.lua | 15 +++++++++++++++ FS25_ADSmartPickup/adFieldWork.lua | 5 +++++ FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adCpBridge.lua | 6 ++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/FS25_ADSmartPickup/adCpBridge.lua b/FS25_ADSmartPickup/adCpBridge.lua index 6c1571a..77b96f6 100644 --- a/FS25_ADSmartPickup/adCpBridge.lua +++ b/FS25_ADSmartPickup/adCpBridge.lua @@ -471,6 +471,21 @@ end -- multiTools = antal sæt når kurset laves her (multi-tool-leder) -- lane = køretøjets bane på et multi-tool-kursus (laneOffset -2..2) -- onDone(ok, reason) kaldes én gang; reason "copied" ved succes med kopieret kursus. +-- Vinmarker (druer/oliven): Courseplays kursus ligger som standard PÅ vinen — en sprøjte/spreder/harve kører +-- så ind i stolperne ("Blocked by an object", in-game 26/9 F22). Alt der arbejder i gangene køres til +-- venstre for vinen; høsteren kører hen over rækken. nil = ikke en vinmark (rør intet). +ADCpBridge.VINE_FRUITS = {GRAPE = true, GRAPEB = true, OLIVE = true, OLIVEB = true} +function ADCpBridge.vineOffsetFor(fruitName, role) + if fruitName == nil or not ADCpBridge.VINE_FRUITS[string.upper(tostring(fruitName))] then return nil end + if role == "harvester" then return 0 end + return -1 +end + +function ADCpBridge.setVineOffset(vehicle, value) + if vehicle == nil or vehicle.getCpVineSettings == nil or value == nil then return false end + return (pcall(function() vehicle:getCpVineSettings().vineCenterOffset:setValue(value) end)) +end + function ADCpBridge.start(vehicle, fieldX, fieldZ, onDone, opts) opts = opts or {} if not ADCpBridge.isAvailable() then diff --git a/FS25_ADSmartPickup/adFieldWork.lua b/FS25_ADSmartPickup/adFieldWork.lua index 9e55522..4e7e52e 100644 --- a/FS25_ADSmartPickup/adFieldWork.lua +++ b/FS25_ADSmartPickup/adFieldWork.lua @@ -636,6 +636,11 @@ local function beginWork(adEnv, field, info, assignment) if store ~= nil then assignment.storeId = store.id end end end + -- vinmark: kurset i gangen (ikke på vinen), ellers kører maskinen ind i stolperne + local vineOffset = ADCpBridge.vineOffsetFor(info.fruitName, assignment.role) + if vineOffset ~= nil and ADCpBridge.setVineOffset(vehicle, vineOffset) then + log(field.id, "vinmark: Courseplay-kurset lægges %s", vineOffset == 0 and "på vinen (høster)" or "til venstre for vinen (i gangen)") + end local opts, source = courseOptions(adEnv, field, assignment) if opts == nil then -- følger uden lederens kursus endnu diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 178fccd..3db94ea 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.32.4.0 + 1.32.5.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adCpBridge.lua b/tests/test_adCpBridge.lua index 3acbcf3..3600ca7 100644 --- a/tests/test_adCpBridge.lua +++ b/tests/test_adCpBridge.lua @@ -88,6 +88,12 @@ check("SR3 lille rest 300 af 4000", ADCpBridge.isDumpable(300, 4000), true) check("SR3 halv tank 2000 af 4000", ADCpBridge.isDumpable(2000, 4000), false) check("SR3 100000 l aldrig", ADCpBridge.isDumpable(100000, 1000000), false) check("SR3 over 2000 l aldrig", ADCpBridge.isDumpable(2500, 100000), false) +-- VN: vinmark — i gangen for alt undtagen høsteren; almindelige marker røres ikke +check("VN sprøjte på druer = venstre", ADCpBridge.vineOffsetFor("GRAPEB", "fertilizer"), -1) +check("VN harve på druer = venstre", ADCpBridge.vineOffsetFor("grape", "cultivator"), -1) +check("VN høster på druer = på vinen", ADCpBridge.vineOffsetFor("GRAPEB", "harvester"), 0) +check("VN hvede røres ikke", ADCpBridge.vineOffsetFor("WHEAT", "fertilizer"), nil) +check("VN ukendt afgrøde", ADCpBridge.vineOffsetFor(nil, "weeder"), nil) -- HF: høsterens afgrøder fra skærebordet (liste eller opslag); finsnitter tager ingen local list = ADCpBridge.harvestFruitSet({fruitTypes = {3, 5}})