Visualise Server Desync Postion
Key RequiredUniversal

Visualise Server Desync Postion

Universal ScriptItzPnsdgItzPnsdg 2.4K views 1.1K executesUpdated Jun 27, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•163 lines (4699 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Stats = game:GetService("Stats")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local rootPart = character:WaitForChild("HumanoidRootPart")

local UPDATE_INTERVAL = 0.05

local fakeCharacter = Instance.new("Model")
fakeCharacter.Name = "FakeCharacter_ServerView"
fakeCharacter.Parent = workspace

local fakeRootPart = Instance.new("Part")
fakeRootPart.Name = "HumanoidRootPart"
fakeRootPart.Size = rootPart.Size
fakeRootPart.CFrame = rootPart.CFrame
fakeRootPart.Anchored = true
fakeRootPart.CanCollide = false
fakeRootPart.Transparency = 1
fakeRootPart.Material = Enum.Material.Plastic
fakeRootPart.Parent = fakeCharacter

local boxAdornment = Instance.new("BoxHandleAdornment")
boxAdornment.Name = "ServerViewBox"
boxAdornment.Adornee = fakeRootPart
boxAdornment.Size = rootPart.Size + Vector3.new(0.5, 0.5, 0.5)
boxAdornment.Color3 = Color3.new(1, 1, 1)
boxAdornment.Transparency = 0.3
boxAdornment.ZIndex = 0
boxAdornment.AlwaysOnTop = true
boxAdornment.Parent = fakeRootPart

local fakeHumanoid = Instance.new("Humanoid")
fakeHumanoid.Name = "Humanoid"
fakeHumanoid.Parent = fakeCharacter

local positionHistory = {}

local function getRealPing()
    local ping = 0
    local pingSuccess, pingResult = pcall(function()
        return Stats.Network.ServerStatsItem["Data Ping"]:GetValue()
    end)
    
    if pingSuccess and pingResult then
        ping = pingResult
    end
    
    return ping
end

local function addPositionToHistory(position)
    local currentTime = tick()
    table.insert(positionHistory, {
        position = position,
        time = currentTime
    })
    
    local maxHistory = math.ceil(2000 / (UPDATE_INTERVAL * 1000)) + 10
    if #positionHistory > maxHistory then
        table.remove(positionHistory, 1)
    end
end

local function getPositionAtTime(targetTime)
    if #positionHistory == 0 then
        return rootPart.Position
    end
    
    local closestIndex = 1
    local closestDiff = math.abs(positionHistory[1].time - targetTime)
    
    for i = 2, #positionHistory do
        local diff = math.abs(positionHistory[i].time - targetTime)
        if diff < closestDiff then
            closestDiff = diff
            closestIndex = i
        end
    end
    
    return positionHistory[closestIndex].position
end

local function updateFakeCharacter()
    if not character or not character.Parent then return end
    if not rootPart or not rootPart.Parent then return end
    
    local ping = getRealPing()
    ping = math.max(10, math.min(1000, ping))
    
    local pingDelay = ping / 1000
    
    addPositionToHistory(rootPart.Position)
    
    local serverTime = tick() - pingDelay
    
    local serverPosition
    if #positionHistory > 1 then
        serverPosition = getPositionAtTime(serverTime)
    else
        serverPosition = rootPart.Position
    end
    
    local currentCFrame = rootPart.CFrame
    local newCFrame = CFrame.new(serverPosition) * (currentCFrame - currentCFrame.Position)
    fakeRootPart.CFrame = newCFrame
end

local connection = RunService.Heartbeat:Connect(function()
    updateFakeCharacter()
end)

local function cleanup()
    if connection then
        connection:Disconnect()
        connection = nil
    end
    if fakeCharacter then
        fakeCharacter:Destroy()
    end
end

player.CharacterAdded:Connect(function(newCharacter)
    cleanup()
    
    character = newCharacter
    rootPart = character:WaitForChild("HumanoidRootPart")
    
    positionHistory = {}
    
    fakeCharacter = Instance.new("Model")
    fakeCharacter.Name = "FakeCharacter_ServerView"
    fakeCharacter.Parent = workspace
    
    fakeRootPart = Instance.new("Part")
    fakeRootPart.Name = "HumanoidRootPart"
    fakeRootPart.Size = rootPart.Size
    fakeRootPart.CFrame = rootPart.CFrame
    fakeRootPart.Anchored = true
    fakeRootPart.CanCollide = false
    fakeRootPart.Transparency = 1
    fakeRootPart.Material = Enum.Material.Plastic
    fakeRootPart.Parent = fakeCharacter
    
    boxAdornment = Instance.new("BoxHandleAdornment")
    boxAdornment.Name = "ServerViewBox"
    boxAdornment.Adornee = fakeRootPart
    boxAdornment.Size = rootPart.Size + Vector3.new(0.5, 0.5, 0.5)
    boxAdornment.Color3 = Color3.new(1, 1, 1)
    boxAdornment.Transparency = 0.3
    boxAdornment.AlwaysOnTop = true
    boxAdornment.Parent = fakeRootPart
    
    fakeHumanoid = Instance.new("Humanoid")
    fakeHumanoid.Name = "Humanoid"
    fakeHumanoid.Parent = fakeCharacter
    
    connection = RunService.Heartbeat:Connect(function()
        updateFakeCharacter()
    end)
end)

Features & Information

Show how server side see your HRP, May not work when u turn off internet

Community Comments (3)

MokshiMokshiJun 27, 2026

w

MokshiMokshiJun 27, 2026

w

XDThe22XDXDThe22XDSep 17, 2026

W

More Scripts for Universal Scripts