From f2188916e81387828549254ee06e1fbd9afdca20 Mon Sep 17 00:00:00 2001 From: najeetpie Date: Mon, 29 Jun 2026 21:55:25 +0000 Subject: [PATCH] Fixes for relogging while scaled --- client/client.lua | 30 +++++++++++++++++++++++------- server/database.lua | 1 - server/server.lua | 2 ++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/client/client.lua b/client/client.lua index 6377262..8acc3cc 100644 --- a/client/client.lua +++ b/client/client.lua @@ -91,6 +91,15 @@ end local syncedScales = {} +-- Resolve the ped that belongs to a server id. Returns 0 when that player is +-- not currently in scope. IMPORTANT: never fall through to GetPlayerPed(-1), +-- which returns the LOCAL player's ped and would scale the wrong ped. +local function getPedForServerId(src) + local playerIdx = GetPlayerFromServerId(src) + if playerIdx == -1 then return 0 end + return GetPlayerPed(playerIdx) +end + RegisterNetEvent('nass_pedscaler:syncCurrentScaling', function(players) for k, v in pairs(players) do TriggerEvent('nass_pedscaler:syncScale', tonumber(k), v) @@ -100,24 +109,31 @@ end) RegisterNetEvent('nass_pedscaler:syncScale', function(src, scale) if syncedScales[tostring(src)] ~= nil then syncedScales[tostring(src)] = nil - applyScaleToEntity(PlayerPedId(), 1.0) + local ped = getPedForServerId(src) + if ped ~= 0 and DoesEntityExist(ped) then + applyScaleToEntity(ped, 1.0) + end Wait(100) end syncedScales[tostring(src)] = scale if scale ~= nil then - local playerId = GetPlayerFromServerId(src) - startScale(src, playerId, scale) + startScale(src, scale) else - applyScaleToEntity(PlayerPedId(), 1.0) + local ped = getPedForServerId(src) + if ped ~= 0 and DoesEntityExist(ped) then + applyScaleToEntity(ped, 1.0) + end end end) -function startScale(src, playerId, scale) +function startScale(src, scale) CreateThread(function() while syncedScales[tostring(src)] ~= nil do - local ped = GetPlayerPed(playerId) - if DoesEntityExist(ped) then + -- Re-resolve every frame: the target player may not be in scope + -- yet (e.g. right after joining) and only stream in later. + local ped = getPedForServerId(src) + if ped ~= 0 and DoesEntityExist(ped) then applyScaleToEntity(ped, scale) if Config.scaling.scaleSpeed.enabled then SetPedMoveRateOverride(ped, Config.scaling.scaleSpeed.inverse and (1 / scale) or scale) diff --git a/server/database.lua b/server/database.lua index 1b86c97..4feb996 100644 --- a/server/database.lua +++ b/server/database.lua @@ -7,7 +7,6 @@ function onPlayerLoaded(identifier, source) if playerscale and playerscale ~= 1.0 then TriggerClientEvent('nass_pedscaler:syncScale', -1, source, playerscale) end - end AddEventHandler('onResourceStart', function(resourceName) diff --git a/server/server.lua b/server/server.lua index a3db9b5..1e04e5b 100644 --- a/server/server.lua +++ b/server/server.lua @@ -20,6 +20,7 @@ RegisterNetEvent('nass_pedscaler:syncScale', function(scale) scaledPlayers[tostring(src)] = scale TriggerClientEvent('nass_pedscaler:syncScale', -1, src, scale) + SaveResourceFile(GetCurrentResourceName(), "./playerScaling.json", json.encode(playerScaling, {indent = true})) end) if Config.commands.openMenu.enabled then @@ -38,6 +39,7 @@ if Config.commands.resetScale.enabled then playerScaling[getPlayerIdentifier(id)] = nil scaledPlayers[tostring(id)] = nil TriggerClientEvent('nass_pedscaler:syncScale', -1, id, nil) + SaveResourceFile(GetCurrentResourceName(), "./playerScaling.json", json.encode(playerScaling, {indent = true})) end end, false) end