-- AD Fleet Names -- Konsol "spuNameFleet": traktorer/lastbiler uden for flows får spillets butiksnavn (nummereret når der er flere -- af samme model), og deres egen AD-parkering hedder "P ". Flow-traktorer beholder flowets navn (mod'en -- sætter det selv); selvkørende maskiner (mejetærsker, roeoptager …) beholder deres navn. ADFleetNames = {} ADFleetNames.LOG_PREFIX = "ADSmartPickup: navne: " -- ---- ren logik ---- -- vehicles = {{id, model, name, inRun, selfPropelled}} -> {{id, name, parkName, rename}} function ADFleetNames.plan(vehicles) local byModel = {} for _, vehicle in ipairs(vehicles or {}) do if not vehicle.inRun and not vehicle.selfPropelled then byModel[vehicle.model] = byModel[vehicle.model] or {} table.insert(byModel[vehicle.model], vehicle) end end local newNames = {} for model, list in pairs(byModel) do table.sort(list, function(a, b) return tostring(a.id) < tostring(b.id) end) for index, vehicle in ipairs(list) do newNames[vehicle.id] = #list > 1 and string.format("%s %d", model, index) or model end end local result = {} for _, vehicle in ipairs(vehicles or {}) do local name = newNames[vehicle.id] or vehicle.name or vehicle.model table.insert(result, {id = vehicle.id, name = name, parkName = "P " .. name, rename = newNames[vehicle.id] ~= nil and name ~= vehicle.name}) end return result end -- ---- spil ---- function ADFleetNames.apply(adEnv) local vehicles, byId = {}, {} for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do local id = ADRunsController.getVehicleId(vehicle) if id ~= nil and vehicle.getName ~= nil then table.insert(vehicles, {id = id, model = tostring(vehicle:getName()), name = ADRuns.vehicleLabel(vehicle), inRun = ADRunsController.getRunForVehicle(vehicle) ~= nil, selfPropelled = not ADPool.canPull(ADPool.ownRole(vehicle))}) byId[id] = vehicle end end local renamed, parks = 0, 0 for _, entry in ipairs(ADFleetNames.plan(vehicles)) do local vehicle = byId[entry.id] local module = vehicle.ad ~= nil and vehicle.ad.stateModule or nil if entry.rename and module ~= nil and module.setName ~= nil then module:setName(entry.name) if module.raiseDirtyFlag ~= nil then module:raiseDirtyFlag() end renamed = renamed + 1 end local index = vehicle.advd ~= nil and vehicle.advd.parkDestination or nil local marker = type(index) == "number" and index >= 1 and adEnv.ADGraphManager:getMapMarkerById(index) or nil if marker ~= nil and marker.name ~= entry.parkName then adEnv.ADGraphManager:renameMapMarker(entry.parkName, index) parks = parks + 1 end end Logging.info(ADFleetNames.LOG_PREFIX .. "%d maskiner omdøbt, %d parkeringer omdøbt", renamed, parks) return renamed, parks end function ADFleetNames:consoleNameFleet() local adEnv = ADFieldSilos ~= nil and ADFieldSilos.adEnv or nil if adEnv == nil then return "spuNameFleet: AutoDrive er ikke klar endnu" end local ok, renamed, parks = pcall(ADFleetNames.apply, adEnv) if not ok then return "spuNameFleet: fejl: " .. tostring(renamed) end return string.format("spuNameFleet: %d maskiner og %d parkeringer omdøbt — gem spillet", renamed, parks) end if addConsoleCommand ~= nil then addConsoleCommand("spuNameFleet", "Giver traktorer uden for flows butiksnavne og deres parkeringer 'P '", "consoleNameFleet", ADFleetNames) end