
Key Required
Desync V2 script
Lua Script•264 lines (9086 chars)
--[[
its a hook based clientside desync
No NetworkOwner errors anymore • No lag btwww • Spin auto-pause so no detects
]]
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local LocalPlayer = Players.LocalPlayer
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
ScreenGui.ResetOnSpawn = false
local Frame = Instance.new("Frame")
Frame.Size = UDim2.new(0, 200, 0, 180)
Frame.Position = UDim2.new(0.5, -100, 0.5, -90)
Frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
Frame.BorderSizePixel = 0
Frame.Active = true
Frame.Draggable = true
Frame.Parent = ScreenGui
local FrameCorner = Instance.new("UICorner")
FrameCorner.CornerRadius = UDim.new(0, 8)
FrameCorner.Parent = Frame
local FrameStroke = Instance.new("UIStroke")
FrameStroke.Color = Color3.fromRGB(100, 100, 100)
FrameStroke.Thickness = 1
FrameStroke.Parent = Frame
local FrameShadow = Instance.new("ImageLabel")
FrameShadow.Image = "rbxassetid://1316045217"
FrameShadow.ImageTransparency = 0.5
FrameShadow.BackgroundTransparency = 1
FrameShadow.Size = UDim2.new(1, 10, 1, 10)
FrameShadow.Position = UDim2.new(0, -5, 0, -5)
FrameShadow.ZIndex = Frame.ZIndex - 1
FrameShadow.Parent = Frame
local ToggleButton = Instance.new("TextButton")
ToggleButton.Size = UDim2.new(0, 100, 0, 40)
ToggleButton.Position = UDim2.new(0.5, -50, 0, 45)
ToggleButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
ToggleButton.Text = "Desync: OFF"
ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleButton.Font = Enum.Font.SourceSansBold
ToggleButton.TextSize = 18
ToggleButton.Parent = Frame
local ToggleCorner = Instance.new("UICorner")
ToggleCorner.CornerRadius = UDim.new(0, 6)
ToggleCorner.Parent = ToggleButton
local CustomToggleButton = Instance.new("TextButton")
CustomToggleButton.Size = UDim2.new(0, 100, 0, 40)
CustomToggleButton.Position = UDim2.new(0.5, -50, 0, 95)
CustomToggleButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
CustomToggleButton.Text = "Custom: OFF"
CustomToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CustomToggleButton.Font = Enum.Font.SourceSansBold
CustomToggleButton.TextSize = 18
CustomToggleButton.Parent = Frame
local CustomToggleCorner = Instance.new("UICorner")
CustomToggleCorner.CornerRadius = UDim.new(0, 6)
CustomToggleCorner.Parent = CustomToggleButton
local TextBoxX = Instance.new("TextBox")
TextBoxX.Size = UDim2.new(0, 50, 0, 30)
TextBoxX.Position = UDim2.new(0, 20, 0, 140)
TextBoxX.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
TextBoxX.Text = "0"
TextBoxX.TextColor3 = Color3.fromRGB(255, 255, 255)
TextBoxX.Font = Enum.Font.SourceSans
TextBoxX.TextSize = 16
TextBoxX.Visible = false
TextBoxX.Parent = Frame
local TextBoxXCorner = Instance.new("UICorner")
TextBoxXCorner.CornerRadius = UDim.new(0, 4)
TextBoxXCorner.Parent = TextBoxX
local TextBoxY = Instance.new("TextBox")
TextBoxY.Size = UDim2.new(0, 50, 0, 30)
TextBoxY.Position = UDim2.new(0, 75, 0, 140)
TextBoxY.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
TextBoxY.Text = "0"
TextBoxY.TextColor3 = Color3.fromRGB(255, 255, 255)
TextBoxY.Font = Enum.Font.SourceSans
TextBoxY.TextSize = 16
TextBoxY.Visible = false
TextBoxY.Parent = Frame
local TextBoxYCorner = Instance.new("UICorner")
TextBoxYCorner.CornerRadius = UDim.new(0, 4)
TextBoxYCorner.Parent = TextBoxY
local TextBoxZ = Instance.new("TextBox")
TextBoxZ.Size = UDim2.new(0, 50, 0, 30)
TextBoxZ.Position = UDim2.new(0, 130, 0, 140)
TextBoxZ.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
TextBoxZ.Text = "0"
TextBoxZ.TextColor3 = Color3.fromRGB(255, 255, 255)
TextBoxZ.Font = Enum.Font.SourceSans
TextBoxZ.TextSize = 16
TextBoxZ.Visible = false
TextBoxZ.Parent = Frame
local TextBoxZCorner = Instance.new("UICorner")
TextBoxZCorner.CornerRadius = UDim.new(0, 4)
TextBoxZCorner.Parent = TextBoxZ
local MinimizeButton = Instance.new("TextButton")
MinimizeButton.Size = UDim2.new(0, 30, 0, 30)
MinimizeButton.Position = UDim2.new(1, -40, 0, 5)
MinimizeButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
MinimizeButton.Text = "-"
MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
MinimizeButton.Font = Enum.Font.SourceSansBold
MinimizeButton.TextSize = 20
MinimizeButton.Parent = Frame
local MinimizeCorner = Instance.new("UICorner")
MinimizeCorner.CornerRadius = UDim.new(0, 4)
MinimizeCorner.Parent = MinimizeButton
local CloseButton = Instance.new("TextButton")
CloseButton.Size = UDim2.new(0, 30, 0, 30)
CloseButton.Position = UDim2.new(1, -70, 0, 5)
CloseButton.BackgroundColor3 = Color3.fromRGB(150, 50, 50)
CloseButton.Text = "X"
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.Font = Enum.Font.SourceSansBold
CloseButton.TextSize = 20
CloseButton.Parent = Frame
local CloseCorner = Instance.new("UICorner")
CloseCorner.CornerRadius = UDim.new(0, 4)
CloseCorner.Parent = CloseButton
local desyncT = {enabled = false, loc = CFrame.new()}
local customDesyncEnabled = false
local isMinimized = false
local frameTweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local function validateTextboxInput(textbox)
textbox:GetPropertyChangedSignal("Text"):Connect(function()
local text = textbox.Text
if text == "" or text == "-" or text == "+" then return end
if not text:match("^[+-]?%d*%.?%d*$") then
textbox.Text = "0"
end
end)
end
validateTextboxInput(TextBoxX)
validateTextboxInput(TextBoxY)
validateTextboxInput(TextBoxZ)
ToggleButton.MouseButton1Click:Connect(function()
desyncT.enabled = not desyncT.enabled
ToggleButton.Text = desyncT.enabled and "Desync: ON" or "Desync: OFF"
end)
CustomToggleButton.MouseButton1Click:Connect(function()
customDesyncEnabled = not customDesyncEnabled
CustomToggleButton.Text = customDesyncEnabled and "Custom: ON" or "Custom: OFF"
TextBoxX.Visible = customDesyncEnabled and not isMinimized
TextBoxY.Visible = customDesyncEnabled and not isMinimized
TextBoxZ.Visible = customDesyncEnabled and not isMinimized
end)
MinimizeButton.MouseButton1Click:Connect(function()
isMinimized = not isMinimized
local newSize = isMinimized and UDim2.new(0, 200, 0, 40) or UDim2.new(0, 200, 0, 180)
MinimizeButton.Text = isMinimized and "+" or "-"
TweenService:Create(Frame, frameTweenInfo, {Size = newSize}):Play()
ToggleButton.Visible = not isMinimized
CustomToggleButton.Visible = not isMinimized
TextBoxX.Visible = customDesyncEnabled and not isMinimized
TextBoxY.Visible = customDesyncEnabled and not isMinimized
TextBoxZ.Visible = customDesyncEnabled and not isMinimized
end)
CloseButton.MouseButton1Click:Connect(function()
ScreenGui:Destroy()
desyncT.enabled = false
end)
UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if gameProcessedEvent then return end
if input.KeyCode == Enum.KeyCode.C then
desyncT.enabled = not desyncT.enabled
ToggleButton.Text = desyncT.enabled and "Desync: ON" or "Desync: OFF"
end
end)
local desynchook = nil
local prevLookVector = nil
local isSpinning = false
local spinThreshold = 15
local function getOffsetCFrame()
if customDesyncEnabled then
local x = tonumber(TextBoxX.Text) or 0
local y = tonumber(TextBoxY.Text) or 0
local z = tonumber(TextBoxZ.Text) or 0
return CFrame.new(x, y, z)
else
local ping = LocalPlayer:GetNetworkPing() * 1000
if ping < 100 then return CFrame.new(0, 0, -2)
elseif ping <= 170 then return CFrame.new(0, 0, -2.7)
else return CFrame.new(0, 0, -3.7) end
end
end
RunService.Heartbeat:Connect(function()
if not desyncT.enabled or not LocalPlayer.Character then return end
local character = LocalPlayer.Character
local root = character:FindFirstChild("HumanoidRootPart")
if not root then return end
local currentLook = root.CFrame.LookVector
if prevLookVector then
local dot = math.clamp(prevLookVector:Dot(currentLook), -1, 1)
local angleDiff = math.deg(math.acos(dot))
isSpinning = angleDiff > spinThreshold
end
prevLookVector = currentLook
if isSpinning then return end
desyncT.loc = root.CFrame
local offset = getOffsetCFrame()
local newCFrame = desyncT.loc * offset
root.CFrame = newCFrame
RunService.RenderStepped:Wait()
root.CFrame = desyncT.loc
end)
desynchook = hookmetamethod(game, "__index", newcclosure(function(self, key)
if desyncT.enabled and not checkcaller() and
key == "CFrame" and
LocalPlayer.Character and
self == LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and
not isSpinning then
return desyncT.loc
end
return desynchook(self, key)
end))
LocalPlayer.CharacterAdded:Connect(function()
task.wait(1)
prevLookVector = nil
isSpinning = false
end)
print("HOOK DESYNC LOADED - Client-side only, others see server pos!")Features & Information
desync

dude its cool but update it to make it a real desync, teleporting around could trigger anti cheat, i see potential in this code, i have been looking for something like this for ages but its not EXACTLY what i was hoping
@ScriptFinderW fixed i think, for me it works, tell me if somethings wrong ill fix it
@ReCallFunction U made real desync bro?? Rlly
@ReCallFunction Lol its the same thing but its not jittering anymore i just want a real desync plz :)
made by ai 😂
@ZERETET gui made by ai, desync by me
@ReCallFunction ok
@ZERETET please make my suggestion bro plz
@ScriptFinderW ?
@ReCallFunction bro pls make it like real desync, not teleporting in sky
guys alr ill fix it for you
@ReCallFunction its still same, can you make the fly invisible or just when active fo server u will stay on on one place
please send an update once its done
ill try making real one desync i got you, it will take me a bit so wait
Dm me on discord iknotenoughjack Are you able to make it so it has no GUI and it puts your desync at a specific location that was preset in the code?
@notenoughjack yea ill text you later
Can u make an option that makes the character freezes where its activated and the camera follows your client (i tried doing this but the camera stuck with the server character
lowkey don't give a * about this gui ts is GAS.🔥🔥🔥🔥🔥
"Visual" desync
@KartaHub sthfu, i got immortality with this u mf :/
Do it and -- improved from recallfunction gui fixed+more ... Thx recallfunction for opensource in coming features: Invisible toggle ; esp display server root and server character hide toggle (hide ur server character for prevent target kill you),...
maybe 2026/28/5 or never? semms like i'm little bit busy
dayum this is good desync without using raknet, i can make u a better GUI so people and me stop calling this script AI
new script: "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x70\x61\x73\x74\x65\x66\x79\x2e\x61\x70\x70\x2f\x56\x39\x72\x4f\x4e\x35\x4d\x52\x2f\x72\x61\x77"
doesnt even work