ZeroGhost
Key RequiredUniversal

ZeroGhost

Universal Scriptdkhoi07708dkhoi07708 917 views 1.3K executesUpdated Jul 14, 2026
Unrated
00
Lua Script•885 lines (31873 chars)
local player = game.Players.LocalPlayer
local camera = workspace.CurrentCamera
local userInput = game:GetService("UserInputService")
local runService = game:GetService("RunService")
local coreGui = game:GetService("CoreGui")
local mouse = player:GetMouse()

-- Trạng thái
local flyEnabled = false
local espEnabled = false
local speedEnabled = false
local wallbangEnabled = false
local aimBotEnabled = false
local noclipEnabled = false
local freecamEnabled = false

-- Biến nhân vật
local character = nil
local rootPart = nil
local humanoid = nil

-- Biến bay
local flyVelocity = nil
local flyGyro = nil

-- Tốc độ
local flySpeed = 50
local baseWalkSpeed = 16
local freecamSpeed = 30
local freecamSensitivity = 0.5

-- Wallbang
local wallbangConnection = nil

-- Aim Bot
local aimDistance = 200
local aimBotHighlights = {}

-- Noclip
local noclipBodyPosition = nil

-- GUI
local gui = nil
local btnFly, btnESP, btnSpeed, btnWallbang, btnAimBot, btnNoclip, btnFreecam = nil, nil, nil, nil, nil, nil, nil
local lblFlySpeed, lblWalkSpeed, lblFreecamSpeed = nil, nil, nil
local savedPositions = {}
local mainFrame = nil
local toggleFlashBtn = nil

-- Biến kéo thả
local dragging = false
local dragStart = nil
local startPos = nil

-- Góc quay camera Freecam
local cameraYaw = 0
local cameraPitch = 0

-- Trạng thái giữ chuột phải
local rightMouseHeld = false
local mouseLocked = false  -- đã khóa chuột chưa

local function addCorner(obj, radius)
    local corner = Instance.new("UICorner")
    corner.CornerRadius = UDim.new(0, radius or 6)
    corner.Parent = obj
end

-- ==================== HÀM LẤY NHÂN VẬT ====================
local function getCharacter()
    character = player.Character
    if character then
        rootPart = character:FindFirstChild("HumanoidRootPart")
        humanoid = character:FindFirstChild("Humanoid")
    end
    return character, rootPart, humanoid
end

-- ==================== CHỨC NĂNG BAY ====================
local function toggleFly()
    flyEnabled = not flyEnabled
    getCharacter()
    
    if flyEnabled then
        if humanoid then humanoid.PlatformStand = true end
        if rootPart then
            flyVelocity = Instance.new("BodyVelocity")
            flyVelocity.MaxForce = Vector3.new(1e6, 1e6, 1e6)
            flyVelocity.Parent = rootPart
            
            flyGyro = Instance.new("BodyGyro")
            flyGyro.MaxTorque = Vector3.new(1e6, 1e6, 1e6)
            flyGyro.Parent = rootPart
        end
        print("🟢 BẬT BAY")
    else
        if flyVelocity then flyVelocity:Destroy(); flyVelocity = nil end
        if flyGyro then flyGyro:Destroy(); flyGyro = nil end
        if humanoid then humanoid.PlatformStand = false end
        print("🔴 TẮT BAY")
    end
    if gui then updateGUI(); updateSpeedLabels() end
end

local function updateFly()
    if flyEnabled then
        if not getCharacter() or not rootPart then return end
        
        if not flyVelocity or not flyVelocity.Parent then
            flyVelocity = Instance.new("BodyVelocity")
            flyVelocity.MaxForce = Vector3.new(1e6, 1e6, 1e6)
            flyVelocity.Parent = rootPart
        end
        if not flyGyro or not flyGyro.Parent then
            flyGyro = Instance.new("BodyGyro")
            flyGyro.MaxTorque = Vector3.new(1e6, 1e6, 1e6)
            flyGyro.Parent = rootPart
        end

        local camCF = camera.CFrame
        local forward = camCF.LookVector * Vector3.new(1, 0, 1)
        forward = forward.Unit
        local right = camCF.RightVector * Vector3.new(1, 0, 1)
        right = right.Unit
        local up = Vector3.new(0, 1, 0)

        local moveDir = Vector3.new(0, 0, 0)
        if userInput:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + forward end
        if userInput:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - forward end
        if userInput:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - right end
        if userInput:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + right end
        if userInput:IsKeyDown(Enum.KeyCode.Space) then moveDir = moveDir + up end
        if userInput:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir = moveDir - up end

        if moveDir.Magnitude > 0 then
            moveDir = moveDir.Unit * flySpeed
        end
        flyVelocity.Velocity = moveDir

        local lookDir = camera.CFrame.LookVector * Vector3.new(1, 0, 1)
        if lookDir.Magnitude > 0.001 then
            lookDir = lookDir.Unit
        else
            lookDir = Vector3.new(0, 0, -1)
        end
        flyGyro.CFrame = CFrame.new(rootPart.Position, rootPart.Position + lookDir)
    else
        if flyVelocity then flyVelocity:Destroy(); flyVelocity = nil end
        if flyGyro then flyGyro:Destroy(); flyGyro = nil end
    end
end

-- ==================== CHỨC NĂNG ESP ====================
local espHighlights = {}

local function toggleESP()
    espEnabled = not espEnabled
    if espEnabled then
        print("🟢 BẬT ESP (tất cả)")
    else
        for _, highlight in pairs(espHighlights) do
            if highlight and highlight.Parent then highlight:Destroy() end
        end
        espHighlights = {}
        print("🔴 TẮT ESP (tất cả)")
    end
    if gui then updateGUI() end
end

local function updateESP()
    if not espEnabled then return end
    local currentPlayers = game.Players:GetPlayers()
    local targets = {}
    for _, otherPlayer in ipairs(currentPlayers) do
        if otherPlayer ~= player then
            local otherChar = otherPlayer.Character
            if otherChar and otherChar:FindFirstChild("HumanoidRootPart") then
                table.insert(targets, otherChar)
            end
        end
    end
    for char, highlight in pairs(espHighlights) do
        if not char or not char.Parent then
            if highlight then highlight:Destroy() end
            espHighlights[char] = nil
        end
    end
    for _, char in ipairs(targets) do
        if not espHighlights[char] then
            local highlight = Instance.new("Highlight")
            highlight.Parent = char
            highlight.FillColor = Color3.new(1, 0, 0)
            highlight.OutlineColor = Color3.new(1, 1, 1)
            highlight.FillTransparency = 0.5
            highlight.OutlineTransparency = 0
            espHighlights[char] = highlight
        end
    end
end

-- ==================== CHỨC NĂNG SPEED ====================
local function toggleSpeed()
    speedEnabled = not speedEnabled
    getCharacter()
    if humanoid then
        if speedEnabled then
            humanoid.WalkSpeed = 60
            print("🟢 BẬT SPEED (60)")
        else
            humanoid.WalkSpeed = baseWalkSpeed
            print("🔴 TẮT SPEED (" .. baseWalkSpeed .. ")")
        end
    end
    if gui then updateGUI() end
end

-- ==================== WALLBANG ====================
local function toggleWallbang()
    wallbangEnabled = not wallbangEnabled
    if wallbangEnabled then
        for _, obj in ipairs(workspace:GetDescendants()) do
            if obj:IsA("BasePart") then
                local name = obj.Name:lower()
                if name:find("bullet") or name:find("projectile") or name:find("shell") or name:find("shot") then
                    obj.CanCollide = false
                end
            end
        end
        wallbangConnection = workspace.DescendantAdded:Connect(function(child)
            if child:IsA("BasePart") then
                local name = child.Name:lower()
                if name:find("bullet") or name:find("projectile") or name:find("shell") or name:find("shot") then
                    child.CanCollide = false
                end
            end
        end)
    else
        if wallbangConnection then wallbangConnection:Disconnect(); wallbangConnection = nil end
    end
    if gui then updateGUI() end
end

-- ==================== AIM BOT ====================
local function toggleAimBot()
    aimBotEnabled = not aimBotEnabled
    if aimBotEnabled then
        print("🟢 BẬT AIM BOT (ESP kẻ địch tự động bật)")
    else
        for _, highlight in pairs(aimBotHighlights) do
            if highlight and highlight.Parent then highlight:Destroy() end
        end
        aimBotHighlights = {}
        print("🔴 TẮT AIM BOT (đã xóa ESP kẻ địch)")
    end
    if gui then updateGUI() end
end

local function updateAimBotESP()
    if not aimBotEnabled then return end
    local currentPlayers = game.Players:GetPlayers()
    local myTeam = player.Team
    local targets = {}
    for _, otherPlayer in ipairs(currentPlayers) do
        if otherPlayer ~= player then
            if myTeam and otherPlayer.Team == myTeam then continue end
            local otherChar = otherPlayer.Character
            if otherChar and otherChar:FindFirstChild("HumanoidRootPart") then
                table.insert(targets, otherChar)
            end
        end
    end
    for char, highlight in pairs(aimBotHighlights) do
        if not char or not char.Parent then
            if highlight then highlight:Destroy() end
            aimBotHighlights[char] = nil
        end
    end
    for _, char in ipairs(targets) do
        if not aimBotHighlights[char] then
            local highlight = Instance.new("Highlight")
            highlight.Parent = char
            highlight.FillColor = Color3.new(1, 0, 0)
            highlight.OutlineColor = Color3.new(1, 0, 0)
            highlight.FillTransparency = 0.3
            highlight.OutlineTransparency = 0
            aimBotHighlights[char] = highlight
        end
    end
end

local function getTargetPart(char)
    return char:FindFirstChild("Head") or char:FindFirstChild("head") or char:FindFirstChild("HumanoidRootPart")
end

local function updateAimBot()
    if not aimBotEnabled then return end
    if not getCharacter() or not rootPart then return end
    
    updateAimBotESP()
    
    local myPosition = rootPart.Position
    local myTeam = player.Team
    local target = nil
    local minDist = aimDistance
    
    for _, otherPlayer in ipairs(game.Players:GetPlayers()) do
        if otherPlayer ~= player then
            if myTeam and otherPlayer.Team == myTeam then continue end
            local otherChar = otherPlayer.Character
            if otherChar then
                local aimPart = getTargetPart(otherChar)
                local humanoidOther = otherChar:FindFirstChild("Humanoid")
                if aimPart and aimPart.Parent and humanoidOther and humanoidOther.Health > 0 then
                    local dist = (aimPart.Position - myPosition).Magnitude
                    if dist < minDist then
                        local origin = camera.CFrame.Position
                        local direction = (aimPart.Position - origin).Unit
                        local raycastParams = RaycastParams.new()
                        raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
                        raycastParams.FilterDescendantsInstances = {character, camera}
                        local hit = workspace:Raycast(origin, direction * dist, raycastParams)
                        if not hit or hit.Instance:IsDescendantOf(otherChar) then
                            target = otherPlayer
                            minDist = dist
                        end
                    end
                end
            end
        end
    end
    
    if target then
        local otherChar = target.Character
        if otherChar then
            local aimPart = getTargetPart(otherChar)
            if aimPart and aimPart.Parent then
                local targetPos = aimPart.Position
                local lookAt = targetPos - camera.CFrame.Position
                if lookAt.Magnitude > 0.1 then
                    camera.CFrame = CFrame.new(camera.CFrame.Position, targetPos)
                    -- Đồng bộ góc quay Freecam nếu đang bật
                    if freecamEnabled then
                        local lookVector = camera.CFrame.LookVector
                        cameraYaw = math.atan2(lookVector.X, -lookVector.Z)
                        cameraPitch = math.asin(lookVector.Y)
                    end
                end
            end
        end
    end
end

-- ==================== NOCLIP ====================
local function toggleNoclip()
    noclipEnabled = not noclipEnabled
    getCharacter()
    
    if noclipEnabled then
        if character then
            for _, part in ipairs(character:GetDescendants()) do
                if part:IsA("BasePart") then part.CanCollide = false end
            end
        end
        if rootPart then
            noclipBodyPosition = Instance.new("BodyPosition")
            noclipBodyPosition.MaxForce = Vector3.new(0, 1e7, 0)
            noclipBodyPosition.P = 10000
            noclipBodyPosition.D = 100
            noclipBodyPosition.Parent = rootPart
        end
    else
        if character then
            for _, part in ipairs(character:GetDescendants()) do
                if part:IsA("BasePart") then part.CanCollide = true end
            end
        end
        if noclipBodyPosition then noclipBodyPosition:Destroy(); noclipBodyPosition = nil end
    end
    if gui then updateGUI() end
end

local function updateNoclip()
    if not noclipEnabled then return end
    if not getCharacter() or not rootPart then return end
    
    local rayOrigin = rootPart.Position
    local rayDirection = Vector3.new(0, -1, 0)
    local rayLength = 100
    local raycastParams = RaycastParams.new()
    raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
    raycastParams.FilterDescendantsInstances = {character}
    
    local hit = workspace:Raycast(rayOrigin, rayDirection * rayLength, raycastParams)
    local groundY = nil
    
    if hit and hit.Normal.Y > 0.5 then
        groundY = hit.Position.Y + 3
    end
    
    local targetY = rootPart.Position.Y
    if groundY and rootPart.Position.Y < groundY - 0.5 then
        targetY = groundY
    end
    
    if noclipBodyPosition and noclipBodyPosition.Parent then
        noclipBodyPosition.Position = Vector3.new(rootPart.Position.X, targetY, rootPart.Position.Z)
    end
end

-- ==================== FREECAM (CHỈ HOẠT ĐỘNG KHI GIỮ CHUỘT PHẢI) ====================
local function toggleFreecam()
    freecamEnabled = not freecamEnabled
    if freecamEnabled then
        -- Lưu góc quay hiện tại từ camera
        local lookVector = camera.CFrame.LookVector
        cameraYaw = math.atan2(lookVector.X, -lookVector.Z)
        cameraPitch = math.asin(lookVector.Y)
        
        camera.CameraType = Enum.CameraType.Scriptable
        -- Không khóa chuột mặc định, chỉ khóa khi giữ chuột phải
        userInput.MouseBehavior = Enum.MouseBehavior.Default
        userInput.MouseIconEnabled = true
        rightMouseHeld = false
        mouseLocked = false
        print("🟢 BẬT FREECAM (giữ chuột phải để di chuyển)")
    else
        camera.CameraType = Enum.CameraType.Custom
        userInput.MouseBehavior = Enum.MouseBehavior.Default
        userInput.MouseIconEnabled = true
        rightMouseHeld = false
        mouseLocked = false
        print("🔴 TẮT FREECAM")
    end
    if gui then updateGUI() end
end

local function updateFreecam()
    if not freecamEnabled then return end
    if camera.CameraType ~= Enum.CameraType.Scriptable then
        camera.CameraType = Enum.CameraType.Scriptable
    end

    -- Kiểm tra trạng thái chuột phải
    local isRightMouseDown = userInput:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
    
    -- Khi giữ chuột phải: khóa chuột và cho phép điều khiển
    if isRightMouseDown then
        if not mouseLocked then
            userInput.MouseBehavior = Enum.MouseBehavior.LockCenter
            userInput.MouseIconEnabled = false
            mouseLocked = true
        end
        
        -- Xoay camera bằng chuột
        local delta = userInput:GetMouseDelta()
        cameraYaw = cameraYaw - delta.X * freecamSensitivity * 0.01
        cameraPitch = math.clamp(cameraPitch - delta.Y * freecamSensitivity * 0.01, -math.pi/2, math.pi/2)

        local rotation = CFrame.Angles(0, cameraYaw, 0) * CFrame.Angles(cameraPitch, 0, 0)
        local lookVector = rotation.LookVector
        local rightVector = rotation.RightVector
        local upVector = Vector3.new(0, 1, 0)

        -- Di chuyển bằng phím (chỉ khi đang giữ chuột phải)
        local moveDir = Vector3.new(0, 0, 0)
        if userInput:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + lookVector end
        if userInput:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - lookVector end
        if userInput:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - rightVector end
        if userInput:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + rightVector end
        if userInput:IsKeyDown(Enum.KeyCode.Space) then moveDir = moveDir + upVector end
        if userInput:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir = moveDir - upVector end

        if moveDir.Magnitude > 0 then
            moveDir = moveDir.Unit * freecamSpeed
        end

        local newPos = camera.CFrame.Position + moveDir
        camera.CFrame = CFrame.new(newPos, newPos + lookVector)
    else
        -- Khi nhả chuột phải: trả lại con trỏ
        if mouseLocked then
            userInput.MouseBehavior = Enum.MouseBehavior.Default
            userInput.MouseIconEnabled = true
            mouseLocked = false
        end
        -- Giữ nguyên camera, không di chuyển
    end
end

-- ==================== ĐIỀU CHỈNH TỐC ĐỘ ====================
local function adjustFlySpeed(delta)
    flySpeed = math.clamp(flySpeed + delta, 5, 200)
    if gui then updateSpeedLabels() end
end

local function adjustWalkSpeed(delta)
    baseWalkSpeed = math.clamp(baseWalkSpeed + delta, 2, 100)
    if not speedEnabled and humanoid then humanoid.WalkSpeed = baseWalkSpeed end
    if gui then updateSpeedLabels() end
end

local function adjustFreecamSpeed(delta)
    freecamSpeed = math.clamp(freecamSpeed + delta, 5, 200)
    if gui then updateSpeedLabels() end
end

-- ==================== TẠO GUI (GÓC TRÁI, CÓ THỂ KÉO THẢ) ====================
local function createGUI()
    for _, child in ipairs(coreGui:GetChildren()) do
        if child.Name == "ZeroGhost_GUI" then child:Destroy() end
    end
    
    local screenGui = Instance.new("ScreenGui")
    screenGui.Name = "ZeroGhost_GUI"
    screenGui.Parent = coreGui
    
    mainFrame = Instance.new("Frame")
    mainFrame.Size = UDim2.new(0, 240, 0, 750)
    mainFrame.Position = UDim2.new(0, 10, 0, 10)
    mainFrame.BackgroundColor3 = Color3.new(0.05, 0.05, 0.05)
    mainFrame.BackgroundTransparency = 0.15
    mainFrame.BorderSizePixel = 0
    mainFrame.Parent = screenGui
    addCorner(mainFrame, 10)
    
    local title = Instance.new("TextButton")
    title.Size = UDim2.new(1, 0, 0, 35)
    title.Position = UDim2.new(0, 0, 0, 0)
    title.Text = "ZeroGhost"
    title.TextColor3 = Color3.new(1, 1, 1)
    title.BackgroundColor3 = Color3.new(0.1, 0.1, 0.1)
    title.BackgroundTransparency = 0.5
    title.Font = Enum.Font.SourceSansBold
    title.TextSize = 20
    title.TextStrokeColor3 = Color3.new(0, 0, 0)
    title.TextStrokeTransparency = 0.5
    title.Parent = mainFrame
    addCorner(title, 10)
    title.AutoButtonColor = false
    
    local dragInput
    title.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = mainFrame.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)

    title.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
            dragInput = input
        end
    end)

    userInput.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            local delta = input.Position - dragStart
            mainFrame.Position = UDim2.new(
                startPos.X.Scale, startPos.X.Offset + delta.X, 
                startPos.Y.Scale, startPos.Y.Offset + delta.Y
            )
        end
    end)
    
    local function createButton(text, yPos, color, callback)
        local btn = Instance.new("TextButton")
        btn.Size = UDim2.new(0.9, 0, 0, 30)
        btn.Position = UDim2.new(0.05, 0, 0, yPos)
        btn.Text = text
        btn.BackgroundColor3 = color or Color3.new(0.25, 0.25, 0.25)
        btn.TextColor3 = Color3.new(1, 1, 1)
        btn.BorderSizePixel = 0
        btn.Font = Enum.Font.SourceSansBold
        btn.TextSize = 14
        btn.Parent = mainFrame
        addCorner(btn, 6)
        btn.MouseButton1Click:Connect(callback)
        return btn
    end
    
    local y = 40
    btnFly = createButton("Fly: OFF", y, Color3.new(0.6, 0, 0), toggleFly)
    y = y + 35
    btnESP = createButton("ESP: OFF", y, Color3.new(0.6, 0, 0), toggleESP)
    y = y + 35
    btnSpeed = createButton("Speed: OFF", y, Color3.new(0.6, 0, 0), toggleSpeed)
    y = y + 35
    btnWallbang = createButton("Wallbang: OFF", y, Color3.new(0.6, 0, 0), toggleWallbang)
    y = y + 35
    btnAimBot = createButton("Aim Bot: OFF", y, Color3.new(0.6, 0, 0), toggleAimBot)
    y = y + 35
    btnNoclip = createButton("NoClip: OFF", y, Color3.new(0.6, 0, 0), toggleNoclip)
    y = y + 35
    btnFreecam = createButton("Freecam: OFF", y, Color3.new(0.6, 0, 0), toggleFreecam)
    y = y + 40
    
    local lblFly = Instance.new("TextLabel")
    lblFly.Size = UDim2.new(0.9, 0, 0, 20)
    lblFly.Position = UDim2.new(0.05, 0, 0, y)
    lblFly.Text = "✈ Fly Speed: " .. flySpeed
    lblFly.TextColor3 = Color3.new(0.9, 0.9, 0.9)
    lblFly.BackgroundTransparency = 1
    lblFly.TextXAlignment = Enum.TextXAlignment.Left
    lblFly.Font = Enum.Font.SourceSans
    lblFly.TextSize = 13
    lblFly.Parent = mainFrame
    lblFlySpeed = lblFly
    y = y + 22
    
    local btnSpeedUp = createButton("Speed Up (+5)", y, Color3.new(0.2, 0.6, 0.2), function() adjustFlySpeed(5) end)
    y = y + 30
    local btnSpeedDown = createButton("Speed Down (-5)", y, Color3.new(0.6, 0.2, 0.2), function() adjustFlySpeed(-5) end)
    y = y + 38
    
    local lblWalk = Instance.new("TextLabel")
    lblWalk.Size = UDim2.new(0.9, 0, 0, 20)
    lblWalk.Position = UDim2.new(0.05, 0, 0, y)
    lblWalk.Text = "🚶 Walk Speed: " .. baseWalkSpeed
    lblWalk.TextColor3 = Color3.new(0.9, 0.9, 0.9)
    lblWalk.BackgroundTransparency = 1
    lblWalk.TextXAlignment = Enum.TextXAlignment.Left
    lblWalk.Font = Enum.Font.SourceSans
    lblWalk.TextSize = 13
    lblWalk.Parent = mainFrame
    lblWalkSpeed = lblWalk
    y = y + 22
    
    local btnWalkUp = createButton("Walk Up (+2)", y, Color3.new(0.2, 0.6, 0.2), function() adjustWalkSpeed(2) end)
    y = y + 30
    local btnWalkDown = createButton("Walk Down (-2)", y, Color3.new(0.6, 0.2, 0.2), function() adjustWalkSpeed(-2) end)
    y = y + 38

    -- Freecam Speed
    local lblFreecam = Instance.new("TextLabel")
    lblFreecam.Size = UDim2.new(0.9, 0, 0, 20)
    lblFreecam.Position = UDim2.new(0.05, 0, 0, y)
    lblFreecam.Text = "🎥 Freecam Speed: " .. freecamSpeed
    lblFreecam.TextColor3 = Color3.new(0.9, 0.9, 0.9)
    lblFreecam.BackgroundTransparency = 1
    lblFreecam.TextXAlignment = Enum.TextXAlignment.Left
    lblFreecam.Font = Enum.Font.SourceSans
    lblFreecam.TextSize = 13
    lblFreecam.Parent = mainFrame
    lblFreecamSpeed = lblFreecam
    y = y + 22
    
    local btnFreecamUp = createButton("Freecam Up (+5)", y, Color3.new(0.2, 0.6, 0.2), function() adjustFreecamSpeed(5) end)
    y = y + 30
    local btnFreecamDown = createButton("Freecam Down (-5)", y, Color3.new(0.6, 0.2, 0.2), function() adjustFreecamSpeed(-5) end)
    y = y + 40
    
    local sep = Instance.new("Frame")
    sep.Size = UDim2.new(0.9, 0, 0, 2)
    sep.Position = UDim2.new(0.05, 0, 0, y)
    sep.BackgroundColor3 = Color3.new(0.4, 0.4, 0.4)
    sep.BorderSizePixel = 0
    sep.Parent = mainFrame
    y = y + 8
    
    local tpTitle = Instance.new("TextLabel")
    tpTitle.Size = UDim2.new(0.9, 0, 0, 20)
    tpTitle.Position = UDim2.new(0.05, 0, 0, y)
    tpTitle.Text = "🗺️ Dịch chuyển (Save/TP/Del)"
    tpTitle.TextColor3 = Color3.new(1, 1, 1)
    tpTitle.BackgroundTransparency = 1
    tpTitle.Font = Enum.Font.SourceSansBold
    tpTitle.TextSize = 13
    tpTitle.Parent = mainFrame
    y = y + 22
    
    for i = 1, 3 do
        local slotFrame = Instance.new("Frame")
        slotFrame.Size = UDim2.new(0.9, 0, 0, 32)
        slotFrame.Position = UDim2.new(0.05, 0, 0, y)
        slotFrame.BackgroundColor3 = Color3.new(0.15, 0.15, 0.15)
        slotFrame.BackgroundTransparency = 0.1
        slotFrame.BorderSizePixel = 0
        slotFrame.Parent = mainFrame
        addCorner(slotFrame, 6)
        
        local slotLabel = Instance.new("TextLabel")
        slotLabel.Size = UDim2.new(0, 40, 1, 0)
        slotLabel.Position = UDim2.new(0, 5, 0, 0)
        slotLabel.Text = "Slot "..i
        slotLabel.TextColor3 = Color3.new(1, 1, 1)
        slotLabel.BackgroundTransparency = 1
        slotLabel.TextXAlignment = Enum.TextXAlignment.Left
        slotLabel.Font = Enum.Font.SourceSansBold
        slotLabel.TextSize = 12
        slotLabel.Parent = slotFrame
        
        local coordLabel = Instance.new("TextLabel")
        coordLabel.Size = UDim2.new(1, -125, 1, 0)
        coordLabel.Position = UDim2.new(0, 45, 0, 0)
        coordLabel.Text = "(trống)"
        coordLabel.TextColor3 = Color3.new(0.6, 0.6, 0.6)
        coordLabel.BackgroundTransparency = 1
        coordLabel.TextXAlignment = Enum.TextXAlignment.Center
        coordLabel.Font = Enum.Font.SourceSans
        coordLabel.TextSize = 12
        coordLabel.Parent = slotFrame
        
        local saveBtn = Instance.new("TextButton")
        saveBtn.Size = UDim2.new(0, 35, 1, -2)
        saveBtn.Position = UDim2.new(1, -115, 0, 1)
        saveBtn.Text = "💾"
        saveBtn.BackgroundColor3 = Color3.new(0.2, 0.6, 0.2)
        saveBtn.TextColor3 = Color3.new(1, 1, 1)
        saveBtn.Font = Enum.Font.SourceSansBold
        saveBtn.TextSize = 14
        saveBtn.BorderSizePixel = 0
        saveBtn.Parent = slotFrame
        addCorner(saveBtn, 4)
        
        local tpBtn = Instance.new("TextButton")
        tpBtn.Size = UDim2.new(0, 35, 1, -2)
        tpBtn.Position = UDim2.new(1, -75, 0, 1)
        tpBtn.Text = "🚀"
        tpBtn.BackgroundColor3 = Color3.new(0.6, 0.3, 0.1)
        tpBtn.TextColor3 = Color3.new(1, 1, 1)
        tpBtn.Font = Enum.Font.SourceSansBold
        tpBtn.TextSize = 14
        tpBtn.BorderSizePixel = 0
        tpBtn.Parent = slotFrame
        addCorner(tpBtn, 4)
        
        local delBtn = Instance.new("TextButton")
        delBtn.Size = UDim2.new(0, 30, 1, -2)
        delBtn.Position = UDim2.new(1, -35, 0, 1)
        delBtn.Text = "🗑️"
        delBtn.BackgroundColor3 = Color3.new(0.6, 0.2, 0.2)
        delBtn.TextColor3 = Color3.new(1, 1, 1)
        delBtn.Font = Enum.Font.SourceSansBold
        delBtn.TextSize = 14
        delBtn.BorderSizePixel = 0
        delBtn.Parent = slotFrame
        addCorner(delBtn, 4)
        
        saveBtn.MouseButton1Click:Connect(function()
            if getCharacter() and rootPart then
                savedPositions[i] = rootPart.Position
                coordLabel.Text = string.format("%.0f, %.0f, %.0f", rootPart.Position.X, rootPart.Position.Y, rootPart.Position.Z)
            end
        end)
        
        tpBtn.MouseButton1Click:Connect(function()
            local pos = savedPositions[i]
            if pos and getCharacter() and rootPart then
                rootPart.CFrame = CFrame.new(pos)
            end
        end)
        
        delBtn.MouseButton1Click:Connect(function()
            savedPositions[i] = nil
            coordLabel.Text = "(trống)"
        end)
        
        y = y + 36
    end
    
    gui = screenGui
    updateGUI()
    updateSpeedLabels()
end

local function createToggleButton()
    for _, child in ipairs(coreGui:GetChildren()) do
        if child.Name == "ToggleGUI" then child:Destroy() end
    end
    
    local toggleScreenGui = Instance.new("ScreenGui")
    toggleScreenGui.Name = "ToggleGUI"
    toggleScreenGui.Parent = coreGui
    
    local toggleBtn = Instance.new("TextButton")
    toggleBtn.Size = UDim2.new(0, 55, 0, 55)
    toggleBtn.Position = UDim2.new(1, -65, 0, 10)
    toggleBtn.Text = "😈"
    toggleBtn.Font = Enum.Font.SourceSansBold
    toggleBtn.TextSize = 30
    toggleBtn.BackgroundColor3 = Color3.new(0.3, 0.3, 0.3)
    toggleBtn.BackgroundTransparency = 0.2
    toggleBtn.BorderSizePixel = 0
    toggleBtn.Parent = toggleScreenGui
    addCorner(toggleBtn, 55)
    
    toggleFlashBtn = toggleBtn
    
    toggleBtn.MouseButton1Click:Connect(function()
        if mainFrame then mainFrame.Visible = not mainFrame.Visible end
    end)
end

local function updateFlash()
    if toggleFlashBtn then
        local flash = (tick() % 1) < 0.5
        toggleFlashBtn.BackgroundColor3 = flash and Color3.new(1, 0, 0) or Color3.new(0.3, 0.3, 0.3)
    end
end

function updateGUI()
    if not gui then return end
    local function setBtn(btn, enabled, name)
        if btn then
            btn.Text = name .. (enabled and ": ON" or ": OFF")
            btn.BackgroundColor3 = enabled and Color3.new(0.2, 0.6, 0.2) or Color3.new(0.6, 0, 0)
        end
    end
    setBtn(btnFly, flyEnabled, "Fly")
    setBtn(btnESP, espEnabled, "ESP")
    setBtn(btnSpeed, speedEnabled, "Speed")
    setBtn(btnWallbang, wallbangEnabled, "Wallbang")
    setBtn(btnAimBot, aimBotEnabled, "Aim Bot")
    setBtn(btnNoclip, noclipEnabled, "NoClip")
    setBtn(btnFreecam, freecamEnabled, "Freecam")
end

function updateSpeedLabels()
    if lblFlySpeed then lblFlySpeed.Text = "✈ Fly Speed: " .. flySpeed end
    if lblWalkSpeed then lblWalkSpeed.Text = "🚶 Walk Speed: " .. baseWalkSpeed end
    if lblFreecamSpeed then lblFreecamSpeed.Text = "🎥 Freecam Speed: " .. freecamSpeed end
end

userInput.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    local key = input.KeyCode
    if key == Enum.KeyCode.F then toggleFly()
    elseif key == Enum.KeyCode.G then toggleESP()
    elseif key == Enum.KeyCode.H then toggleSpeed()
    elseif key == Enum.KeyCode.N then toggleWallbang()
    elseif key == Enum.KeyCode.B then toggleAimBot()
    elseif key == Enum.KeyCode.U then toggleNoclip()
    elseif key == Enum.KeyCode.Y then toggleFreecam()
    elseif key == Enum.KeyCode.Equals then adjustFlySpeed(5)
    elseif key == Enum.KeyCode.Minus then adjustFlySpeed(-5)
    elseif key == Enum.KeyCode.LeftBracket then adjustWalkSpeed(-2)
    elseif key == Enum.KeyCode.RightBracket then adjustWalkSpeed(2)
    end
end)

runService.RenderStepped:Connect(function()
    updateFly()
    updateESP()
    updateAimBot()
    updateNoclip()
    updateFreecam()
    updateFlash()
end)

player.CharacterAdded:Connect(function(newChar)
    character = newChar
    rootPart = newChar:FindFirstChild("HumanoidRootPart")
    humanoid = newChar:FindFirstChild("Humanoid")
    
    if speedEnabled and humanoid then humanoid.WalkSpeed = 60
    elseif humanoid then humanoid.WalkSpeed = baseWalkSpeed end
    
    if flyEnabled and humanoid then humanoid.PlatformStand = true end
    
    if noclipEnabled then
        noclipEnabled = false
        toggleNoclip()
    end
    
    if aimBotEnabled then
        for _, highlight in pairs(aimBotHighlights) do
            if highlight and highlight.Parent then highlight:Destroy() end
        end
        aimBotHighlights = {}
    end
    
    if freecamEnabled then
        toggleFreecam() -- Tắt nếu đang bật để tránh lỗi
    end
end)

getCharacter()
createGUI()
createToggleButton()

Features & Information

fly aimbot ......

Community Comments (1)

remaYOremaYOJul 14, 2026

thanks for the open source

More Scripts for Universal Scripts