Simple FPS Desync OPEN SRC
Key RequiredUniversal

Simple FPS Desync OPEN SRC

Universal Scriptarchiveswagarchiveswag 578 views 34 executesUpdated Mar 22, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•220 lines (7914 chars)
local Player = game.Players.LocalPlayer
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Camera = workspace.CurrentCamera

-- 1. 建立 UI
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "AutoGhost_Final_AnimFix"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = Player:WaitForChild("PlayerGui")

-- 主切換按鈕
local ToggleBtn = Instance.new("TextButton")
ToggleBtn.Size = UDim2.new(0, 80, 0, 80)
ToggleBtn.Position = UDim2.new(0, 30, 0.5, -120)
ToggleBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 215)
ToggleBtn.Text = "OFF"
ToggleBtn.TextColor3 = Color3.new(1, 1, 1)
ToggleBtn.Font = Enum.Font.GothamBold
ToggleBtn.TextSize = 20
ToggleBtn.Parent = ScreenGui
Instance.new("UICorner", ToggleBtn).CornerRadius = UDim.new(1, 0)

-- 時間輸入框
local TimeInput = Instance.new("TextBox")
TimeInput.Size = UDim2.new(0, 80, 0, 30)
TimeInput.Position = UDim2.new(0, 30, 0.5, -30)
TimeInput.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
TimeInput.Text = "5"
TimeInput.PlaceholderText = "秒數"
TimeInput.TextColor3 = Color3.new(1, 1, 1)
TimeInput.Font = Enum.Font.Gotham
TimeInput.Parent = ScreenGui
Instance.new("UICorner", TimeInput)

-- 自動按鈕
local AutoToggle = Instance.new("TextButton")
AutoToggle.Size = UDim2.new(0, 80, 0, 40)
AutoToggle.Position = UDim2.new(0, 30, 0.5, 10)
AutoToggle.BackgroundColor3 = Color3.fromRGB(150, 0, 0)
AutoToggle.Text = "AUTO OFF"
AutoToggle.TextColor3 = Color3.new(1, 1, 1)
AutoToggle.Font = Enum.Font.GothamBold
AutoToggle.Parent = ScreenGui
Instance.new("UICorner", AutoToggle)

---------------- 核心變數 ----------------

local isModeOn = false
local autoActive = false
local RealChar = nil
local FakeChar = nil
local Connections = {} 
local AnimTracks = {} 

local function GetAnimID(char, name, subName)
    local animScript = char:FindFirstChild("Animate")
    if animScript then
        local value = animScript:FindFirstChild(name)
        if value then
            local anim = value:FindFirstChild(subName) or value:FindFirstChildOfClass("Animation")
            if anim then return anim.AnimationId end
        end
    end
    return nil
end

local function StopAllAnims()
    for _, track in pairs(AnimTracks) do
        if track then track:Stop(0.1) end
    end
end

local function DisableMode()
    if not isModeOn then return end
    isModeOn = false
    ToggleBtn.Text = "OFF"
    ToggleBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 215)
    
    for _, conn in pairs(Connections) do conn:Disconnect() end
    Connections = {}
    StopAllAnims()
    AnimTracks = {}
    
    local targetCF = FakeChar and FakeChar:FindFirstChild("HumanoidRootPart") and FakeChar.HumanoidRootPart.CFrame
    if FakeChar then FakeChar:Destroy() FakeChar = nil end
    
    if RealChar and RealChar:FindFirstChild("HumanoidRootPart") then
        RealChar.HumanoidRootPart.Anchored = false
        if targetCF then RealChar.HumanoidRootPart.CFrame = targetCF end
        Player.Character = RealChar
        Camera.CameraSubject = RealChar:FindFirstChild("Humanoid")
    end
end

local function EnableMode()
    RealChar = Player.Character
    if not RealChar or not RealChar:FindFirstChild("HumanoidRootPart") then return end
    
    isModeOn = true
    ToggleBtn.Text = "ON"
    ToggleBtn.BackgroundColor3 = Color3.fromRGB(0, 200, 255)
    
    RealChar.HumanoidRootPart.Anchored = true
    RealChar.Archivable = true
    FakeChar = RealChar:Clone()
    FakeChar.Name = "LD_Ghost_Clone"
    FakeChar.Parent = workspace
    
    for _, v in pairs(FakeChar:GetDescendants()) do
        if v:IsA("LocalScript") or v:IsA("Script") then v:Destroy() end
    end
    
    for _, part in pairs(FakeChar:GetDescendants()) do
        if part:IsA("BasePart") then
            part.Anchored = false
            part.CanCollide = (part.Name == "HumanoidRootPart")
            if part.Name == "HumanoidRootPart" then
                part.Transparency = 1
                for _, c in pairs(part:GetChildren()) do if c:IsA("Decal") or c:IsA("Texture") then c:Destroy() end end
            end
        end
    end

    local fakeHum = FakeChar:FindFirstChild("Humanoid")
    local fakeRoot = FakeChar:FindFirstChild("HumanoidRootPart")
    
    if fakeHum then
        fakeHum.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
        local function Load(id)
            if not id then return nil end
            local a = Instance.new("Animation") a.AnimationId = id
            return fakeHum:LoadAnimation(a)
        end
        
        AnimTracks.Run = Load(GetAnimID(RealChar, "run", "RunAnim") or GetAnimID(RealChar, "walk", "WalkAnim") or "rbxassetid://180426354")
        AnimTracks.Idle = Load(GetAnimID(RealChar, "idle", "Animation1") or "rbxassetid://180435571")
        AnimTracks.Jump = Load(GetAnimID(RealChar, "jump", "JumpAnim") or "rbxassetid://125750702")
        AnimTracks.Climb = Load(GetAnimID(RealChar, "climb", "ClimbAnim") or "rbxassetid://180436334")
        if AnimTracks.Idle then AnimTracks.Idle:Play() end
    end
    
    Camera.CameraSubject = fakeHum

    -- 控制邏輯 (這部分之前被省略了,現在補回)
    table.insert(Connections, UserInputService.JumpRequest:Connect(function()
        if isModeOn and fakeHum then fakeHum.Jump = true end
    end))

    table.insert(Connections, RunService.RenderStepped:Connect(function()
        if not isModeOn or not FakeChar or not fakeHum or not fakeRoot then return end
        
        -- 移動計算
        local moveDir = Vector3.new(0,0,0)
        local camCF = Camera.CFrame
        if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + camCF.LookVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - camCF.LookVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - camCF.RightVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + camCF.RightVector end
        
        local finalDir = Vector3.new(moveDir.X, 0, moveDir.Z)
        fakeHum:Move(finalDir.Magnitude > 0 and finalDir.Unit or Vector3.new(0,0,0), false)

        -- 動態動畫切換
        local velocity = fakeRoot.Velocity
        local speed = Vector3.new(velocity.X, 0, velocity.Z).Magnitude
        local isClimbing = fakeHum:GetState() == Enum.HumanoidStateType.Climbing

        if isClimbing then
            if AnimTracks.Climb and not AnimTracks.Climb.IsPlaying then StopAllAnims() AnimTracks.Climb:Play() end
        elseif velocity.Y > 5 then
            if AnimTracks.Jump and not AnimTracks.Jump.IsPlaying then StopAllAnims() AnimTracks.Jump:Play() end
        elseif speed > 0.5 then
            if AnimTracks.Run and not AnimTracks.Run.IsPlaying then StopAllAnims() AnimTracks.Run:Play() end
        else
            if AnimTracks.Idle and not AnimTracks.Idle.IsPlaying then StopAllAnims() AnimTracks.Idle:Play() end
        end
    end))
end

---------------- 自動循環邏輯 ----------------

local function StartAutoLoop()
    while autoActive do
        local waitSeconds = tonumber(TimeInput.Text) or 5
        
        -- 開啟
        if not isModeOn then EnableMode() end
        
        -- 等待設定的時間
        local elapsed = 0
        while elapsed < waitSeconds and autoActive do
            task.wait(0.1)
            elapsed = elapsed + 0.1
        end
        
        -- 關閉並傳送
        if autoActive then 
            DisableMode()
            task.wait(1) -- 固定關閉 1 秒來重置本體
        end
    end
end

AutoToggle.MouseButton1Click:Connect(function()
    autoActive = not autoActive
    if autoActive then
        AutoToggle.Text = "AUTO ON"
        AutoToggle.BackgroundColor3 = Color3.fromRGB(0, 180, 0)
        task.spawn(StartAutoLoop)
    else
        AutoToggle.Text = "AUTO OFF"
        AutoToggle.BackgroundColor3 = Color3.fromRGB(150, 0, 0)
        DisableMode()
    end
end)

ToggleBtn.MouseButton1Click:Connect(function()
    if isModeOn then DisableMode() else EnableMode() end
end)

Features & Information

Open source Desync for fps games.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts