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}})