-- Client-side freeze handling (put this in a client file) RegisterNetEvent('ox_commands:freeze', function(freezeStatus, notify) local playerPed = PlayerPedId() FreezeEntityPosition(playerPed, freezeStatus) if notify then lib.notify({ title = freezeStatus and 'Frozen' or 'Unfrozen', description = freezeStatus and 'You have been frozen by an admin' or 'You have been unfrozen by an admin', type = freezeStatus and 'error' or 'success' }) end end) -- Server-side commands (put this in a server file) lib.addCommand('freeze', { help = 'Freeze a player', params = { { name = 'target', type = 'playerId', help = 'Target player server ID', optional = true -- Makes target optional (self-target if omitted) } }, restricted = 'group.admin' }, function(source, args, raw) local target = args.target or source -- If no target specified, target self local entity = GetPlayerPed(target) if entity ~= 0 then TriggerClientEvent('ox_commands:freeze', target, true, source ~= target) -- Only notify if targeting someone else lib.notify(source, { title = 'Success', description = ('Player %d frozen'):format(target), type = 'success' }) else lib.notify(source, { title = 'Error', description = 'Invalid target player', type = 'error' }) end end) lib.addCommand('thaw', { help = 'Unfreeze a player', params = { { name = 'target', type = 'playerId', help = 'Target player server ID', optional = true -- Makes target optional (self-target if omitted) } }, restricted = 'group.admin' }, function(source, args, raw) local target = args.target or source -- If no target specified, target self local entity = GetPlayerPed(target) if entity ~= 0 then TriggerClientEvent('ox_commands:freeze', target, false, source ~= target) -- Only notify if targeting someone else lib.notify(source, { title = 'Success', description = ('Player %d unfrozen'):format(target), type = 'success' }) else lib.notify(source, { title = 'Error', description = 'Invalid target player', type = 'error' }) end end)