diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a3063c..7647126 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ står i [docs/BRUGERMANUAL.md](docs/BRUGERMANUAL.md) (dansk) og [docs/USER_MANUA ## 1.61 — Produktionskæder +- **1.61.5** Redskaber bredere end Courseplays 50 m (Unrealistic kan sættes til op til 120 m) afvises ikke længere: de bruges, og kursusbredden sættes til 50 m, før Courseplay laver kurset. Markflåden viser *kursus 50 m* ved dem. - **1.61.4** Kæder mere realistiske: **ét kædeflow pr. bygning** med alle bygningens manglende varer (før ét pr. vare og bygning); nye varer lægges i bygningens eksisterende kædeflow, og tidligere tomme kædeflows (uden traktor) til samme bygning lægges sammen. **Slutprodukter sælges straks** som standard (fabrikkens udgang sættes til *Sælg direkte*); feltet *Sælg*/*Behold* på kædelinjen skifter, og *Behold* sætter varer, kæden selv satte til salg, tilbage. I Flows-listen foldes kædeflows uden traktor sammen i én linje. En såmaskine med gødningstank (fx Kinze 4905) bruges kun til såning, ikke som gødningsspreder. - **1.61.3** Fanen **Kæder** sorteret: forslag til ny afgrøde står samlet øverst, én gang pr. mark og efter marknummer (før gentaget under hver kæde, der bruger afgrøden); kæderne står efter status (mangel/fejl, venter, dækket), så bygning og produkt. Kædelinjen viser stadig "· N forslag". - **1.61.2** Flows-listen: dine egne flows står øverst; kædernes auto-oprettede flows samles nederst under *Kædernes egne flows* og vises uden "Kæde: ", så bygningen kan ses. diff --git a/FS25_ADSmartPickup/adCpBridge.lua b/FS25_ADSmartPickup/adCpBridge.lua index 24520bf..7e03ec7 100644 --- a/FS25_ADSmartPickup/adCpBridge.lua +++ b/FS25_ADSmartPickup/adCpBridge.lua @@ -519,6 +519,24 @@ function ADCpBridge.courseHasHeadlands(course) return not ok or type(n) ~= "number" or n > 0 end +-- Kursusbredde til Courseplay: højst 50 m (CP's grænse; Unrealistic-redskaber kan sættes bredere). nil = urørt. +ADCpBridge.CP_MAX_WIDTH = 50 +function ADCpBridge.cpCourseWidth(width) + if type(width) == "number" and width > ADCpBridge.CP_MAX_WIDTH then return ADCpBridge.CP_MAX_WIDTH end + return nil +end + +local function clampCourseWidth(vehicle) + pcall(function() + local setting = vehicle:getCourseGeneratorSettings().workWidth + local capped = ADCpBridge.cpCourseWidth(setting:getValue()) + if capped ~= nil then + setting:setValue(capped) + Logging.info("ADSmartPickup: kursusbredde for '%s' begrænset til %d m (Courseplays maksimum)", tostring(vehicle.getName ~= nil and vehicle:getName() or "?"), capped) + end + end) +end + -- Multi-tool: sæt antal sæt på kursus-generatoren før kurset laves (1 = normalt kursus). local function setMultiTools(vehicle, n) pcall(function() vehicle:getCourseGeneratorSettings().multiTools:setValue(n or 1) end) @@ -619,6 +637,7 @@ function ADCpBridge.start(vehicle, fieldX, fieldZ, onDone, opts) Logging.warning("ADSmartPickup: kunne ikke kopiere kursus: %s — laver nyt", tostring(copyError)) end setMultiTools(vehicle, opts.multiTools or 1) + clampCourseWidth(vehicle) -- kursusberegningen kører over mange frames på store marker: moden venter længere imens local function generate(headlands) ADCpBridge.setHeadlands(vehicle, headlands) diff --git a/FS25_ADSmartPickup/adFieldModel.lua b/FS25_ADSmartPickup/adFieldModel.lua index ed5358b..7dc4368 100644 --- a/FS25_ADSmartPickup/adFieldModel.lua +++ b/FS25_ADSmartPickup/adFieldModel.lua @@ -380,13 +380,18 @@ ADFieldModel.MIN_WORK_WIDTH = 1.5 -- roller uden eget kursus (følger høsteren / samler baller): ingen arbejdsbredde ADFieldModel.NO_WIDTH_ROLES = {unloader = true, baleCollector = true} +-- Bredden kurset laves med: højst CP's maksimum. +function ADFieldModel.effectiveWidth(width) + if width == nil then return nil end + return math.min(width, ADFieldModel.CP_MAX_WIDTH) +end + function ADFieldModel.checkWidth(role, width, requiredWidth) if width < ADFieldModel.MIN_WORK_WIDTH and not ADFieldModel.NO_WIDTH_ROLES[role] then return false, "widthUnknown", {width} end - if width > ADFieldModel.CP_MAX_WIDTH + ADFieldModel.WIDTH_TOLERANCE then - return false, "tooWide", {width, ADFieldModel.CP_MAX_WIDTH} - end + -- bredere end CP's 50 m (Unrealistic kan sættes til 120 m): bruges; kurset begrænses til 50 m (brugerønske 30/9) + width = ADFieldModel.effectiveWidth(width) if role ~= "mower" and requiredWidth ~= nil and width + ADFieldModel.WIDTH_TOLERANCE < requiredWidth then return false, "tooNarrow", {width, requiredWidth} end diff --git a/FS25_ADSmartPickup/l10n/l10n_da.xml b/FS25_ADSmartPickup/l10n/l10n_da.xml index 3d8f1d6..94680c6 100644 --- a/FS25_ADSmartPickup/l10n/l10n_da.xml +++ b/FS25_ADSmartPickup/l10n/l10n_da.xml @@ -151,7 +151,7 @@ - + diff --git a/FS25_ADSmartPickup/l10n/l10n_en.xml b/FS25_ADSmartPickup/l10n/l10n_en.xml index 8e084f9..299333a 100644 --- a/FS25_ADSmartPickup/l10n/l10n_en.xml +++ b/FS25_ADSmartPickup/l10n/l10n_en.xml @@ -151,7 +151,7 @@ - + diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 21860f0..71a5f93 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.61.4.0 + 1.61.5.0 <en>AD Smart Pickup</en>