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()