BTtow = {} BTtow.Create = {} BTtow.Init = {} local TowbarVariantSize = 24 local TowbarNormalStart = 0 local TowbarLargeStart = 24 local TowbarMaxIndex = TowbarVariantSize - 1 local VanillaScaleMin = 1.5 local VanillaScaleMax = 2.0 local function getVehicleModelScale(script) if not script then return nil end local ok, result = pcall(function() return script:getModelScale() end) if ok and type(result) == "number" then return result end ok, result = pcall(function() local model = script:getModel() if model then return model:getScale() end return nil end) if ok and type(result) == "number" then return result end return nil end local function isVanillaScale(script) local modelScale = getVehicleModelScale(script) if modelScale == nil then return true end local configuredMin = TowBarMod and TowBarMod.Config and tonumber(TowBarMod.Config.vanillaTowbarModelScaleMin) local configuredMax = TowBarMod and TowBarMod.Config and tonumber(TowBarMod.Config.vanillaTowbarModelScaleMax) local minScale = configuredMin or VanillaScaleMin local maxScale = configuredMax or VanillaScaleMax return modelScale >= minScale and modelScale <= maxScale end local function getTowbarIndexVanilla(script) local z = script:getPhysicsChassisShape():z() / 2 - 0.1 local index = math.floor((z * 2 / 3 - 1) * 10) return math.max(0, math.min(TowbarMaxIndex, index)) end local function getTowbarModelSlot(script) if not isVanillaScale(script) then -- KI5/small-scale vehicles use the normal towbar0 mesh at Z=1. return 0 end return getTowbarIndexVanilla(script) end function BTtow.Create.towbar(vehicle, part) if part == nil then return end for j=0, TowbarVariantSize - 1 do part:setModelVisible("towbar" .. j, false) end end function BTtow.Init.towbar(vehicle, part) if part == nil then return end for j=0, TowbarVariantSize - 1 do part:setModelVisible("towbar" .. j, false) end local modData = vehicle:getModData() if modData and modData.towBarModelSwapInProgress then return end if modData and modData["isTowingByTowBar"] and modData["towed"] then local script = vehicle:getScript() if script then local index = getTowbarModelSlot(script) local shouldShowOnThisPart = part:getId() == "towbar" if shouldShowOnThisPart then part:setModelVisible("towbar" .. index, true) end end end end