From 331d192f7872264624e27afc1917beecf4cfe420 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Sun, 27 Sep 2026 15:12:40 +0200 Subject: [PATCH] =?UTF-8?q?feat(navne):=20markmaskiner=20der=20stadig=20ha?= =?UTF-8?q?r=20modelnavnet=20navngives=20efter=20rollen=20(L=C3=A6ssevogn?= =?UTF-8?q?=205,=20Roeoptager=202,=20Mejet=C3=A6rsker=201=20=E2=80=A6);=20?= =?UTF-8?q?givne=20navne=20og=20flow-traktorer=20r=C3=B8res=20ikke=20(v1.4?= =?UTF-8?q?1.0.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adFieldWork.lua | 38 +++++++++++++++++++++++++ FS25_ADSmartPickup/adNaming.lua | 18 ++++++++++++ FS25_ADSmartPickup/adRunsController.lua | 5 ++++ FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adNaming.lua | 11 +++++++ 5 files changed, 73 insertions(+), 1 deletion(-) diff --git a/FS25_ADSmartPickup/adFieldWork.lua b/FS25_ADSmartPickup/adFieldWork.lua index dd0e248..47d457a 100644 --- a/FS25_ADSmartPickup/adFieldWork.lua +++ b/FS25_ADSmartPickup/adFieldWork.lua @@ -972,6 +972,44 @@ function ADFieldWork.resumeAfterLoad(adEnv) end end +-- Markmaskiner der stadig hedder modelnavnet ("Unrealistic Engine 3") får et navn efter rollen ("Roeoptager 2"). +-- Navne spilleren/moden har givet røres aldrig; flow-traktorer navngives af deres flow (ikke i markflåden). +local BEET_FRUITS = {SUGARBEET = true, POTATO = true, CARROT = true, PARSNIP = true, BEETROOT = true} +local function harvesterSubtype(rig) + for fruit in pairs(rig.fruits or {}) do + local desc = g_fruitTypeManager ~= nil and g_fruitTypeManager:getFruitTypeByIndex(fruit) or nil + if desc ~= nil and BEET_FRUITS[desc.name] then return "beet" end + end + local chaff = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeIndexByName("CHAFF") or nil + local ok, isForage = pcall(function() + local vehicle = rig.vehicle + for index in ipairs(vehicle.getFillUnits ~= nil and vehicle:getFillUnits() or {}) do + if chaff ~= nil and vehicle:getFillUnitSupportsFillType(index, chaff) then return true end + end + return false + end) + return ok and isForage and "forage" or nil +end + +function ADFieldWork.autoNameFleet(adEnv) + local names = {} + for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do table.insert(names, ADRuns.vehicleLabel(vehicle)) end + for _, rig in ipairs(ADFieldWork.getRigs(adEnv)) do + local vehicle = rig.vehicle + local stateModule = vehicle.ad ~= nil and vehicle.ad.stateModule or nil + local model = vehicle.getName ~= nil and tostring(vehicle:getName()) or nil + if stateModule ~= nil and stateModule.setName ~= nil and model ~= nil and ADRuns.vehicleLabel(vehicle) == model and not rig.controlled then + local name = ADNaming.fleetName(rig.role, rig.role == "harvester" and harvesterSubtype(rig) or nil, names) + if name ~= nil then + stateModule:setName(name) + if stateModule.raiseDirtyFlag ~= nil then stateModule:raiseDirtyFlag() end + table.insert(names, name) + Logging.info(ADFieldJobs.LOG_PREFIX .. "'%s' navngivet '%s' (markflåde, %s)", model, name, tostring(rig.role)) + end + end + end +end + function ADFieldWork.follow(adEnv, assignment) local vehicle = assignment.vehicle -- Kun når spilleren selv KØRER (bevæger sig uden Courseplay/AutoDrive) slippes sættet — at sidde i diff --git a/FS25_ADSmartPickup/adNaming.lua b/FS25_ADSmartPickup/adNaming.lua index 5fe2766..e3efca3 100644 --- a/FS25_ADSmartPickup/adNaming.lua +++ b/FS25_ADSmartPickup/adNaming.lua @@ -69,3 +69,21 @@ function ADNaming.assign(buildings, existing) end return result end + +-- Markmaskiner: navn efter rolle (høstere efter type: "beet" = roe-/kartoffeloptager, "forage" = finsnitter). +ADNaming.ROLE_PREFIX = {collector = "Læssevogn", mower = "Skårlægger", tedder = "Vender", rake = "River", + baler = "Ballepresser", baleCollector = "Ballesamler", seeder = "Såmaskine", roller = "Tromle", + weeder = "Ukrudtsmaskine", fertilizer = "Gødningsspreder", limer = "Kalkspreder", herbicide = "Sprøjte", + mulcher = "Stubhakker", cultivator = "Kultivator", plow = "Plov", unloader = "Tømmevogn"} +ADNaming.HARVESTER_PREFIX = {beet = "Roeoptager", forage = "Finsnitter"} + +function ADNaming.fleetName(role, subtype, names) + local prefix + if role == "harvester" then + prefix = ADNaming.HARVESTER_PREFIX[subtype] or "Mejetærsker" + else + prefix = ADNaming.ROLE_PREFIX[role] + end + if prefix == nil then return nil end + return string.format("%s %d", prefix, ADNaming.nextNumber(names or {}, prefix)) +end diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 657a578..b1ad08a 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -256,6 +256,11 @@ function ADRunsController.applyVehicleNamesThrottled(adEnv, dt) if nameTimerMs < ADRunsController.NAME_INTERVAL_MS then return end nameTimerMs = 0 ADRunsController.applyVehicleNames(adEnv) + -- markmaskiner uden eget navn (stadig modelnavnet) får et rollenavn + if ADFieldWork ~= nil and ADFieldWork.autoNameFleet ~= nil and ADFieldJobs ~= nil and ADFieldJobs.loaded then + local ok, err = pcall(ADFieldWork.autoNameFleet, adEnv) + if not ok then Logging.warning(ADRunsController.LOG_PREFIX .. "navne til markflåden fejlede: %s", tostring(err)) end + end end -- ---- varer ---- diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 09a353e..10b470c 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.40.0.0 + 1.41.0.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adNaming.lua b/tests/test_adNaming.lua index 4dc105a..eb5b514 100644 --- a/tests/test_adNaming.lua +++ b/tests/test_adNaming.lua @@ -34,5 +34,16 @@ check("har allerede navn -> urørt", N.assign({{id = "a", kind = "husbandry", an local two = N.assign({{id = "a", kind = "husbandry", animal = "COW"}, {id = "b", kind = "husbandry", animal = "COW"}}, {}) check("to nye kostalde: 1 og 2", (two.a or "") .. "|" .. (two.b or ""), "Kostald 1|Kostald 2") + +-- markmaskiner der stadig har modelnavnet (flow-traktorer navngives af flowet) +check("læssevogn nr. 5", N.fleetName("collector", nil, {"Læssevogn 1", "Læssevogn 4"}), "Læssevogn 5") +check("skårlægger", N.fleetName("mower", nil, {}), "Skårlægger 1") +check("høster: roeoptager", N.fleetName("harvester", "beet", {"Roeoptager 1"}), "Roeoptager 2") +check("høster: finsnitter", N.fleetName("harvester", "forage", {}), "Finsnitter 1") +check("høster: mejetærsker", N.fleetName("harvester", nil, {"Mejetærsker"}), "Mejetærsker 1") +check("tømmevogn", N.fleetName("unloader", nil, {}), "Tømmevogn 1") +check("gødningsspreder", N.fleetName("fertilizer", nil, {}), "Gødningsspreder 1") +check("ukendt rolle -> nil", N.fleetName("mystery", nil, {}), nil) + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)