GE Lua Documentation

Press F to search!

getModel

Definition


-- @/lua/ge/extensions/core/vehicles.lua:763


-- get all info to one model
local function getModel(key)
  if type(key) ~= 'string' then return {} end
  local modelsData = getModelsData()[key]
  if not modelsData then
    log('E', '', 'Vehicle not available: ' .. dumps(key))
    return {}
  end

  if cache[key] then
    return cache[key]
  end

  local infoFilename = "/vehicles/"..key.."/info.json"
  local data = getFilesParsed()[infoFilename]
  if data then
    local mod = extensions.core_modmanager.getModFromPath(infoFilename, true)
    local source = infoFilename
    if mod then
      if mod.modData and mod.modData.title then
        source = infoFilename .. " (from Mod: " .. mod.modData.title .. ")"
      else
        source = infoFilename .. " (from Mod: " .. mod.modname .. ")"
      end
    end
    data = sanitizeInfoFile(data, source)
  end
  if data and (data.colors or data.default_color or data.default_color_2 or data.default_color_3) then
    convertVehicleInfo(data, infoFilename)
  end

  local fixedVehicle = false
  if data == nil then
    data = _parseVehicleNameBackwardCompatibility(key)
    fixedVehicle = true
  end

  -- sanitize colors
  if data then
    local validatedPaints = {}
    for name, data in pairs(data.paints or {}) do
      if type(data) ~= 'table' then
        log("E","","Invalid paint setup in "..dumps(infoFilename)..". Paint "..dumps(name).." is not a valid paint: "..dumps(data))
        validatedPaints[name] = createVehiclePaint({x = 1, y = 1, z = 1, w = 1})
      else
        validatedPaints[name] = data
      end
    end
    data.paints = validatedPaints
  end

  -- Patch up old vehicles for new System
  local missingInfoConfigs = nil
  if data.configs then
    missingInfoConfigs = data.configs
    for mConfigName, mConfig in pairs(missingInfoConfigs) do
      mConfig.is_default_config = false
      if not data.default_pc then
        data.default_pc = mConfigName
        mConfig.is_default_config = true
      end
      mConfig.aggregates = {}
      mConfig.Configuration = mConfigName
      mConfig.Name = data.Name .. ' ' .. mConfigName
      mConfig.key = mConfigName
      mConfig.model_key = key
      mConfig.preview = _imageExistsDefault('/vehicles/' .. key .. '/' .. mConfigName .. '.png', '/vehicles/' .. key .. '/' .. mConfigName .. '.jpg')
    end
    data.configs = nil
  end

  local model = {}
  if data then
    model = deepcopy(data)

    if not data.Type then
      model.Type = "Unknown"
      --log('E', 'vehicles', "model" .. dumps(model) .. "has type \"Unknown\"")
    end

    model.aggregates = {} -- values for filtering
  end


  -- get preview if it exists
  model.preview = _imageExistsDefault('/vehicles/' .. key .. '/default.png', '/vehicles/' .. key .. '/default.jpg')

  --model.infoFilename = infoFilename
  --model.pcFilename = ''

  model.logo = _imageExistsDefault('/vehicles/' .. key .. '/logo.png', '/vehicles/' .. key .. '/logo.jpg')



  model.key = key -- redundant but makes life easy

  -- figure out the mod this belongs to
  --model.mod, model.modFingerprint = extensions.core_modmanager.getModFromPath(infoFilename, true) -- TODO: FIXME: SUPER SLOW

  cache[key] = {}
  cache[key].model = model

  cache[key].configs = missingInfoConfigs or _modelConfigsHelper(key, model, ignoreCache)

  if cache[key].configs and tableSize(cache[key].configs) < 1 then
    cache[key].configs[key] = deepcopy(model)
    if cache[key].configs[key].model_key == nil then
      cache[key].configs[key].model_key = cache[key].configs[key].key
      cache[key].configs[key].infoFilename = infoFilename
    end
    if cache[key].model.default_pc == nil then
      cache[key].model.default_pc = key
    end
  end

  model.missingJbeamFiles = modelsData.missingJbeamFiles

  extensions.core_vehiclePaints.setupPaints(model, cache[key].configs)

  if data then
    data.Source = getSourceAttr(infoFilename)

    if fixedVehicle then
      data.Source = 'Mod'
    end

    _fillAggregates(data, model.aggregates)
  end

  -- all configs should have the same aggregates as the base model
  -- the model should have all aggregates of the configs
  local aggHelper = {}
  for _, config in pairs(cache[key].configs) do
    _mergeAggregates(config.aggregates, aggHelper)
    -- I remember removing this in rev 40591 but i cannot tell why that was. The only difference now is that the merge function is "fixed" and never should overwrite values
    _mergeAggregates(cache[key].model.aggregates, config.aggregates)
  end
  _mergeAggregates(aggHelper, cache[key].model.aggregates)

  return cache[key]
end

Callers

@/lua/ge/extensions/ui/vehicleSelector/general.lua
local function vehiclePassesFilters(itemData, validFilters, searchText)
  local model = core_vehicles.getModel(itemData.model).model
  local config = core_vehicles.getConfig(itemData.model, itemData.config)
  for modelName, _ in pairs(core_vehicles.getModelsData()) do
    table.insert(modelList, core_vehicles.getModel(modelName).model)
    table.insert(modelAndConfigList, core_vehicles.getModel(modelName).model)
    table.insert(modelList, core_vehicles.getModel(modelName).model)
    table.insert(modelAndConfigList, core_vehicles.getModel(modelName).model)
    for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
    table.insert(modelAndConfigList, core_vehicles.getModel(modelName).model)
    for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
      table.insert(configList, config)
  end
  local model = core_vehicles.getModel(info.model)
  if not model or not model.model then return nil end
    if modelKey then
      local model = core_vehicles.getModel(modelKey)
      if model then
@/lua/ge/extensions/core/vehicle/manager.lua

  local data = core_vehicles.getModel(vehicle.jbeam)
  if not data.model.paints then return end
@/lua/ge/extensions/freeroam/dragRace.lua
  for i,v in pairs(configs.configs) do
    local model = core_vehicles.getModel(v.model_key).model
    if model.Type == "Truck" or model.Type == "Car" then
  -- append Brand and Country for UI
  local randomVehicleModel = core_vehicles.getModel(randomVehicle.model_key).model
  randomVehicle.Brand = randomVehicleModel.Brand
@/lua/ge/extensions/campaign/exploration.lua
    -- log('I', logTag, 'Buying vehicle.... ')
    local modelData = core_vehicles.getModel(vehicleData.model)
    core_inventory.addItem("$$$_VEHICLES", vehicleData)
@/lua/ge/extensions/editor/util/vehicleSelectUtil.lua
  self.model = model
  local modelData = core_vehicles.getModel(self.model)
  if modelData and modelData.model then
  self.config = config
  local modelData = core_vehicles.getModel(self.model)
  if modelData and modelData.model then
  if self.enableConfigs and self.model and not self.configs then -- refresh configs list, using the current model
    local modelData = core_vehicles.getModel(self.model)
    if modelData and modelData.model then
  if self.enablePaints and self.model and not self.paints then -- refreshes paints list, using the current model
    local modelData = core_vehicles.getModel(self.model)
    if modelData and modelData.model then
      if self.configs then
        local modelData = core_vehicles.getModel(self.model)
        local modelConfigs = modelData and modelData.configs or {}
@/lua/ge/extensions/gameplay/traffic/vehicle.lua

  local modelData = core_vehicles.getModel(obj.jbeam).model
  local modelType = modelData and string.lower(modelData.Type) or 'none'
  local obj = getObjectByID(self.id)
  local modelData = core_vehicles.getModel(obj.jbeam).model
  local _, configKey = path.splitWithoutExt(obj.partConfig)
  local _, configKey = path.splitWithoutExt(obj.partConfig)
  local configData = core_vehicles.getModel(obj.jbeam).configs[configKey]
@/lua/ge/extensions/gameplay/missions/missionManager.lua

          local paintData = core_vehicles.getModel(model).model.paints
          local paint = vehicleInstance.paintName and paintData[vehicleInstance.paintName]
@/lua/ge/extensions/editor/multiSpawnManager.lua

  local modelData = core_vehicles.getModel(model)
  if modelData and next(modelData) then
        local modelName, configName
        local model = core_vehicles.getModel(v.model).model
        if model.Name then
        end
        local config = v.config and core_vehicles.getModel(v.model).configs[v.config]
        configName = config and config.Configuration or ""
@/lua/ge/extensions/flowgraph/nodes/gameplay/race/raceHighscoresComplete.lua
      local vData = core_vehicle_manager.getVehicleData(self.pinIn.vehId.value)
      local mData = core_vehicles.getModel(veh.jbeam)
      local config = {Name = "Custom Config"}
@/ui/modules/quickrace/quickrace.js
      return
    var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
    popoverCounter++
      return
    var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
    popoverCounter++
@/lua/ge/extensions/core/devices.lua
    else
      local modelData = core_vehicles.getModel(veh.jbeam)
      local vehType = modelData and modelData.model and modelData.model.Type
@/lua/ge/extensions/ui/vehicleSelector/tiles.lua
local function configToTile(config, fullName)
  local model = core_vehicles.getModel(config.model_key).model
  local sources = M.getSources(config, model, true) or {}
  -- VEHICLE-SPECIFIC: Get vehicle model data
  local model = core_vehicles.getModel(modelKey)
  extensions.hook("onVehicleSelectorGetTiles", "configsForBrandSubModelOrModel", modelKey, modelSubKey, brandKey, groupMode, groupName)
@/ui/modules/vehicleselect/vehicleselect.js
  } else {
    bngApi.engineLua('core_vehicles.getModel("' + $stateParams.model + '")', function (response) {
      if(response === undefined) {
@/lua/ge/extensions/editor/util/vehicleFilterUtil.lua
      -- Get model to access paints
      local model = core_vehicles.getModel(modelKey)
      modelsMap[modelKey] = {
  for modelName, _ in pairs(core_vehicles.getModelsData()) do
    table.insert(modelList, core_vehicles.getModel(modelName).model)
    for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
    table.insert(modelList, core_vehicles.getModel(modelName).model)
    for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
      table.insert(configList, config)
  for modelName, _ in pairs(core_vehicles.getModelsData()) do
    local model = core_vehicles.getModel(modelName)
    if model and model.model then
  if selectedModel and selectedModel ~= "" then
    local model = core_vehicles.getModel(selectedModel)
    if model and model.configs then
@/lua/ge/extensions/ui/vehicleSelector/vehicleOperations.lua
    if additionalData then
      local model = core_vehicles.getModel(modelKey)
      if model then
    if additionalData then
      local model = core_vehicles.getModel(modelKey)
      if model then
  local vehicleNameSTR = {veh.JBeam}
  local vehMainInfo = core_vehicles.getModel(vehKey)
  local vehConfig = veh.partConfig
  local vehMainInfo = core_vehicles.getModel(vehKey)
      local randomConfig = validConfigs[math.random(1, #validConfigs)]
      local model = core_vehicles.getModel(randomConfig.model_key)
@/lua/common/extensions/ui/flowgraph/editor.lua
  if self.model and self.config and self.configs then
    self.configs = core_vehicles.getModel(self.model).configs
    -- non-indexed table has to be wrapped, to be able to iterate in sorted order later
        if self.model and self.model ~= "" then
          local modelData = core_vehicles.getModel(self.model)
          if modelData and modelData.model then
              if not onlyModel then
                self.configs = core_vehicles.getModel(m.key).configs
                -- non-indexed table has to be wrapped, to be able to iterate in sorted order later
      for mIdx, m in ipairs(self.models) do
        for cIdx, c in pairs(core_vehicles.getModel(m.key).configs) do
          vehSearch:queryElement({
          if self.model and self.model ~= "" then
            local modelData = core_vehicles.getModel(self.model)
            if modelData and modelData.model then
@/lua/ge/extensions/career/modules/vehicleClassGrouping.lua
    if (modelType == "Car" or modelType == "Truck") and not checkFilter(modelFilter, model.key, invertedFilters.modelFilter) then
      for _, config in pairs(core_vehicles.getModel(model.key).configs) do
        local modelConfigKey = string.format("%s/%s", model.key, config.key)
@/lua/ge/ge_utils.lua
  for _, veh in ipairs(getAllVehicles()) do
    local model = core_vehicles.getModel(veh.jbeam).model
    if arrayFindValueIndex(typeList, model.Type) then

  local modelData = core_vehicles.getModel(model).model
  local modelDataPaints = modelData and modelData.paints or {}
        local _, configKey = path.splitWithoutExt(config)
        local configData = core_vehicles.getModel(model).configs[configKey or 0]
        paintName = configData and configData.defaultPaintName1 or modelData.defaultPaintName1
function fillVehicleSpawnOptionDefaults(modelName, opt)
  local model = core_vehicles.getModel(modelName)
@/lua/ge/extensions/flowgraph/nodes/gameplay/race/raceHighscoresLap.lua
      local vData = core_vehicle_manager.getVehicleData(self.pinIn.vehId.value)
      local mData = core_vehicles.getModel(veh.jbeam)
      local config = {Name = "Custom Config"}
@/lua/ge/extensions/ui/vehicleSelector/tileClustering.lua
  ['brandSubModelOrModel'] = function(config)
    local model = core_vehicles.getModel(config.model_key)
    local brand = config.Brand or model.model.Brand
  local _, config = next(clusteredItems.configsByKey)
  local model = core_vehicles.getModel(config.model_key)
  local preview = model.model.preview or model.model.preview or ("/vehicles/" .. model.model.key .. "/default.jpg")
  local _, config = next(clusteredItems.configsByKey)
  local model = core_vehicles.getModel(config.model_key)
  local subModel = config.SubModel or model.model.SubModel
  local _, config = next(clusteredItems.configsByKey)
  local model = core_vehicles.getModel(config.model_key)
  local brand = model.model.Brand
@/lua/ge/extensions/ui/vehicleSelector/tileGrouping.lua
  if value == nil then
    local model = core_vehicles.getModel(config.model_key)
    if model and model.model then
@/lua/ge/extensions/career/modules/inventory.lua
    vehicles[vehicleData.id] = vehicleData
    if tableIsEmpty(core_vehicles.getModel(vehicleData.model)) or not FS:fileExists(vehicleData.config.partConfigFilename) then
      vehicleData.missingFile = true
    -- if the vehicle doesnt exist (deleted mod) then dont spawn
    if tableIsEmpty(core_vehicles.getModel(carModelToLoad)) or not FS:fileExists(vehInfo.config.partConfigFilename) then
      return
local function getDefaultVehicleThumb(vehInfo)
  local model = core_vehicles.getModel(vehInfo.model)
  if not model then return nil end
@/lua/ge/extensions/flowgraph/nodes/vehicle/customPartsConfigProvider.lua
          if self.model then
            self.configs = core_vehicles.getModel(self.model).configs
          end
@/lua/ge/extensions/flowgraph/nodes/vehicle/spawnVehicle.lua
        local allPaints = nil
        local modelData = core_vehicles.getModel(self.pinIn.model.value)
        local configData = core_vehicles.getConfig(model, configKey)
@/lua/ge/extensions/gameplay/missions/missionTypes/editorHelper.lua
  local issues = {}
  local model = core_vehicles.getModel(mtd[e.fieldNameModel])
  if not model or not next(model) then
@/lua/ge/extensions/core/multiSpawn.lua

      for _, config in pairs(core_vehicles.getModel(model.key).configs) do
        local officialConfig = isOfficialSource(config)

    local modelData = core_vehicles.getModel(options.model)
    if modelData and next(modelData) then
    for _, v in ipairs(group) do
      local modelData = core_vehicles.getModel(v.model or '')
      local configData = modelData.configs and modelData.configs[v.config or '']
@/lua/ge/extensions/core/vehiclePaints.lua
local function setupRandomPaintHelper(model_key)
  local modelData = core_vehicles.getModel(model_key)
  local model = modelData.model
local function getRandomPaints(model_key, config_key)
  local modelData = core_vehicles.getModel(model_key)
  local model = modelData.model
@/lua/ge/extensions/flowgraph/nodes/gameplay/dragRace/generateDragOpponents.lua
local function getAvailablePaints(modelKey)
  local modelData = core_vehicles.getModel(modelKey)
  if modelData and modelData.model and modelData.model.paints then
  for i, v in pairs(configs.configs) do
    local modelData = core_vehicles.getModel(v.model_key)
    if modelData and modelData.model then
@/lua/ge/extensions/ui/vehicleSelector/detailsInteraction.lua
          -- pre-fill additional data with the default paints
          local model = core_vehicles.getModel(details.modelKey)
          if model then
@/lua/ge/extensions/career/modules/loanerVehicles.lua
          function(res)
            local vehModel = core_vehicles.getModel(vehObj:getField('JBeam','0')).model
            local spots = vehModel.Type == "Trailer" and fac.loanerTrailerSpots or fac.loanerNonTrailerSpots
@/lua/ge/extensions/ui/vehicleSelector/vehicleSpecifications.lua
  local configKey = itemDetails.config
  local modelDetails = core_vehicles.getModel(modelKey).model
  local configDetails = core_vehicles.getConfig(modelKey, configKey) or {}
@/lua/ge/extensions/freeroam/freeroamConfigurator.lua
  if configuration.vehicle.additionalData then
    local model = core_vehicles.getModel(configuration.vehicle.model)
    if model then
@/ui/modules/lightrunner/lightrunner.js
          if (!$scope.selections.vehicle.file) {
            bngApi.engineLua('core_vehicles.getModel("sbr")', function (res) {
              LightRunnerService.setVehicle({
          return
        var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
        popoverCounter++
          return
        var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
        popoverCounter++
@/lua/ge/extensions/gameplay/missions/missionTypes/flowMission.lua
    for i, v in ipairs(setupModule.vehicles) do
      local model = core_vehicles.getModel(v.model or "").model
      if model then

        local config = v.config and core_vehicles.getModel(v.model).configs[v.config]
        local thumb = nil
          end
          local model = core_vehicles.getModel(viaSetting.value.model or "").model
          if model then

            local config = viaSetting.value.config and core_vehicles.getModel(viaSetting.value.model).configs[viaSetting.value.config]
            local thumb = nil
@/lua/ge/extensions/tech/techCore.lua

  if not core_vehicles.getModel(model).model then
    request:sendBNGError('Model not found: ' .. tostring(model))
@/lua/ge/extensions/core/trailerRespawn.lua
    local veh = getObjectByID(objId)
    local vehModel = core_vehicles.getModel(veh:getField('JBeam','0')).model
    return vehModel.Type
@/lua/ge/extensions/gameplay/drag/dragBridge.lua
    if config["Drag Times"] and config["Drag Times"].time_1_4 and config["Drag Times"].time_1_4 >= minTime and config["Drag Times"].time_1_4 < maxTime then
      local model = core_vehicles.getModel(config.model_key).model
      if checkVehiclePermission(model, vehiclePermissionRules) and not string.match(config.key, 'simple_traffic') then
    local selectedConfig = eligibleVehicles[math.random(eligibleCount)]
    local paints = tableKeys(tableValuesAsLookupDict(core_vehicles.getModel(selectedConfig.model_key).model.paints or {}))
    local paintCount = #paints
@/ui/modules/busRoute/busRoute.js
      return
    var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
    popoverCounter++
      return
    var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
    popoverCounter++
    if ($scope.selected.userSelectedVehicle) {
      bngApi.engineLua(`core_vehicles.getModel(${bngApi.serializeToLua($scope.selected.userSelectedVehicle.model)})`, function(data) {
        var carObj = data
    }
    // bngApi.engineLua('core_vehicles.getModel()', function(data) {
    //   var carObj = data
@/lua/ge/extensions/editor/gen/exp_meshexplorer.lua
]]
            local model = core_vehicles.getModel(config.model_key).model
--                if _ == 1 then dump(config, '?? for_MODEL:'..tostring(config.model_key)) end
        for modelName, _ in pairs(core_vehicles.getModelsData()) do
            lo('?? for_model:'..modelName..':'..tostring(core_vehicles.getModel(modelName).model))
        end
        amodel[#amodel+1] = modelName
--        lo('?? for_model:'..modelName..':'..tostring(core_vehicles.getModel(modelName).model))
    end
--        amodel[#amodel+1] = modelName
--        lo('?? for_model:'..modelName..':'..tostring(core_vehicles.getModel(modelName).model))
--    end
@/lua/ge/extensions/career/modules/delivery/cargoScreen.lua
local function getVehicleThumb(vehicle)
  local model = core_vehicles.getModel(vehicle.model)
  if not model or not model.configs or not vehicle.config then return nil end
@/lua/ge/extensions/core/levels.lua
    local model, options = unpack(nextSpawnVehicle)
    local modelData = core_vehicles.getModel(model)
    if not modelData or not next(modelData) then
@/lua/ge/extensions/core/vehicles.lua

  local model = res.key and getModel(res.key) or {}
  local config = {}
  for modelName, _ in pairs(getModelsData()) do
    local model = getModel(modelName)
    if array then
  for modelName, _ in pairs(getModelsData()) do
    local model = getModel(modelName)
    -- dump(model.configs)
local function getConfig(modelName, configKey)
  local model = getModel(modelName)
  if not model.configs then return end
    if p then p:add("model begin") end
    local model = getModel(modelName)
    if p then p:add("model get") end
  for i,m in pairs(models) do
    local vehicle = getModel(m.key)
    if vehicle ~= nil then
local function prepareConfigData(modelName, opts)
  local model = core_vehicles.getModel(modelName)
  log('D', 'main', "Loading the default vehicle " .. modelName)
  local model = M.getModel(modelName)
    local model, _ = string.match(arg, modelRegexPC)
    local modelData = M.getModel(model)
    if modelData and next(modelData) then
    --TorqueScriptLua.setVar( '$beamngVehicleColor', mycolor )
    local myvehModel = M.getModel(myveh)
    if myvehModel and next(myvehModel) then
@/lua/ge/extensions/editor/util/editorElementHelper.lua
  local issues = {}
  local model = core_vehicles.getModel(ctd[e.fieldNameModel])
  if not model or not next(model) then
@/lua/ge/extensions/core/quickAccess.lua
        local vehKey = veh.JBeam
        local vehMainInfo = core_vehicles.getModel(vehKey)
  local vehicleNameSTR = {veh.JBeam}
  local vehMainInfo = core_vehicles.getModel(vehKey)
@/lua/ge/extensions/util/screenshotCreator.lua
      for _, modelName in pairs(listOfSelectedModels) do
        for _, configData in pairs(core_vehicles.getModel(modelName).configs) do
          if forceQuit then
                local isCurrent
                for _, configData in pairs(core_vehicles.getModel(currModelName).configs) do
                  isCurrent = configData.key == currConfigName
@/lua/ge/extensions/ui/apps/minimap/vehicles.lua
        end
        local model = core_vehicles.getModel(otherVeh.jbeam)
        if model and model.model and model.model.Type and ignoredTypes[model.model.Type] then
@/lua/ge/extensions/editor/trafficManager.lua
      local isVehicle = false
      local modelData = core_vehicles.getModel(obj.jbeam)
      if modelData and next(modelData) and modelData.model.Type then
  vehData.config = veh.partConfig
  vehData.vehType = core_vehicles.getModel(vehData.model).model.Type
  vehData.home = vehData.home or {pos = veh:getPosition(), rot = quatFromDir(veh:getDirectionVector(), veh:getDirectionVectorUp())} -- reset transform
      for _, model in ipairs(modelKeys) do
        if string.find(model, "signs") and core_vehicles.getModel(model).model.Type == "Prop" then
          table.insert(signSelector.models, model)
    if signSelector.model and signSelector.config then
      local modelData = core_vehicles.getModel(signSelector.model)
      if modelData then
      for _, m in ipairs(signSelector.models) do
        for _, c in ipairs(tableKeysSorted(core_vehicles.getModel(signSelector.model).configs)) do
          label = core_vehicles.getModel(m).configs[c].Configuration.." ["..c.."]"
        for _, c in ipairs(tableKeysSorted(core_vehicles.getModel(signSelector.model).configs)) do
          label = core_vehicles.getModel(m).configs[c].Configuration.." ["..c.."]"
          if im.Selectable1(label.."##trafficManagerSignConfig", signSelector.model == m and signSelector.config == c) then
      local obj = getObjectByID(id)
      local modelData = core_vehicles.getModel(obj.jbeam)
      if modelData then
@/lua/ge/extensions/core/funstuff.lua
  if not veh then return end
  local modelInfo = core_vehicles.getModel(veh.JBeam)
  if not modelInfo then return end