-- code from here https://x64.gg/t/roblox-universal-desync-using-hooks/101 local runService = game:GetService("RunService") local localPlayer = game:GetService("Players").LocalPlayer local desyncT = { enabled = true, loc = CFrame.new() } runService.Heartbeat:Connect(function() if desyncT.enabled and localPlayer.Character then local character = localPlayer.Character local root = character:FindFirstChild("HumanoidRootPart") if root then desyncT.loc = root.CFrame -- setting the real cframe to where we are local newCframe = desyncT.loc -- storing the actual cframe newCframe = newCframe * CFrame.new(0, -5, 0) -- moving our player down 5 studs (via the desync) root.CFrame = newCframe -- setting our root cframe to the new cframe we made (no u will not be able to see this on ur client) runService.RenderStepped:Wait() -- waiitiititt root.CFrame = desyncT.loc -- reset our players cframe back to where we were beforehand end end end) local desynchook = nil desynchook = hookmetamethod(game, "__index", newcclosure(function(self, key) if desyncT.enabled and not checkcaller() and key == "CFrame" and localPlayer.Character and self == localPlayer.Character.HumanoidRootPart then return desyncT.loc end return desynchook(self, key) end))