--[[ https://github.com/alp1x/um-ped-scale Main scaling function based off of this script ███╗ ██╗ █████╗ ███████╗███████╗ ██████╗ ███████╗██████╗ ███████╗ ██████╗ █████╗ ██╗ ███████╗██████╗ ████╗ ██║██╔══██╗██╔════╝██╔════╝ ██╔══██╗██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗██║ ██╔════╝██╔══██╗ ██╔██╗ ██║███████║███████╗███████╗ ██████╔╝█████╗ ██║ ██║███████╗██║ ███████║██║ █████╗ ██████╔╝ ██║╚██╗██║██╔══██║╚════██║╚════██║ ██╔═══╝ ██╔══╝ ██║ ██║╚════██║██║ ██╔══██║██║ ██╔══╝ ██╔══██╗ ██║ ╚████║██║ ██║███████║███████║███████╗██║ ███████╗██████╔╝███████║╚██████╗██║ ██║███████╗███████╗██║ ██║ ╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚══════╝╚═════╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ https://discord.gg/nass Please support the development of this script by joining our discord server. ]] local function norm(vec) local mag = math.sqrt(vec.x ^ 2 + vec.y ^ 2 + vec.z ^ 2) if mag > 0 then return vec / mag end return vec end local function applyScaleToEntity(ped, scale) local forward, right, upVector, position = GetEntityMatrix(ped) local forwardNorm = norm(forward) * scale local rightNorm = norm(right) * scale local upNorm = norm(upVector) * scale local zOffset = (1.0 - scale) * 1.0 * 0.5 local adjustedZ = position.z - zOffset if GetEntitySpeed(ped) > 0 then adjustedZ = adjustedZ - zOffset else adjustedZ = adjustedZ + zOffset end SetEntityMatrix(ped, forwardNorm.x, forwardNorm.y, forwardNorm.z, rightNorm.x, rightNorm.y, rightNorm.z, upNorm.x, upNorm.y, upNorm.z, position.x, position.y, adjustedZ ) end local syncedScales = {} RegisterNetEvent('nass_pedscaler:syncCurrentScaling', function(players) for k, v in pairs(players) do TriggerEvent('nass_pedscaler:syncScale', tonumber(k), v) end end) RegisterNetEvent('nass_pedscaler:syncScale', function(src, scale) if syncedScales[tostring(src)] ~= nil then syncedScales[tostring(src)] = nil applyScaleToEntity(PlayerPedId(), 1.0) Wait(100) end syncedScales[tostring(src)] = scale if scale ~= nil then local playerId = GetPlayerFromServerId(src) startScale(src, playerId, scale) else applyScaleToEntity(PlayerPedId(), 1.0) end end) function startScale(src, playerId, scale) CreateThread(function() while syncedScales[tostring(src)] ~= nil do local ped = GetPlayerPed(playerId) if DoesEntityExist(ped) then applyScaleToEntity(ped, scale) if Config.scaling.scaleSpeed.enabled then SetPedMoveRateOverride(ped, Config.scaling.scaleSpeed.inverse and (1 / scale) or scale) end end Wait(0) end end) end RegisterNUICallback('slider_updated', function(data, cb) local serverId = GetPlayerServerId(PlayerId()) if syncedScales[tostring(serverId)] ~= nil then syncedScales[tostring(serverId)] = nil end local playerPed = PlayerPedId() if DoesEntityExist(playerPed) then applyScaleToEntity(playerPed, data.value) end cb('ok') end) RegisterNUICallback('save_scale', function(data, cb) TriggerServerEvent('nass_pedscaler:syncScale', tonumber(data.scale)) closeMenu() cb('ok') end) RegisterNUICallback('close_menu', function(data, cb) closeMenu() cb('ok') end) function closeMenu() SetNuiFocus(false, false) SendNUIMessage({ action = "visible", data = false }) end RegisterNUICallback('get_config', function(data, cb) local serverId = GetPlayerServerId(PlayerId()) SendNUIMessage({ action = "config_data", data = { scaling = Config.scaling, currentScale = syncedScales[tostring(serverId)] or 1.0 -- Default to 1.0, you could store current scale in a variable } }) cb('ok') end) RegisterNUICallback('getLocale', function(data, cb) cb(Config.locale) end) RegisterNetEvent('nass_pedscaler:openMenu', function() SetNuiFocus(true, true) SendNUIMessage({ action = "visible", data = true, }) end)