local Players = game:GetService("Players") local UIS = game:GetService("UserInputService") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local camera = workspace.CurrentCamera local function playClick(parent) local sound = Instance.new("Sound") sound.SoundId = "rbxassetid://9118823101" sound.Volume = 0.4 sound.Parent = parent or workspace sound:Play() game:GetService("Debris"):AddItem(sound, 3) end local function tween(obj, props, t) TweenService:Create(obj, TweenInfo.new(t or 0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), props):Play() end local function getCharacter() return player.Character end local function getHRP() local c = getCharacter() return c and c:FindFirstChild("HumanoidRootPart") end local function getHumanoid() local c = getCharacter() return c and c:FindFirstChildOfClass("Humanoid") end local existing = playerGui:FindFirstChild("BlackholeGui") if existing then existing:Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = "BlackholeGui" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.Parent = playerGui local frame = Instance.new("Frame") frame.Name = "MainFrame" frame.Size = UDim2.new(0, 220, 0, 580) frame.Position = UDim2.new(0, 14, 0.5, -290) frame.BackgroundColor3 = Color3.fromRGB(8, 8, 18) frame.BorderSizePixel = 0 frame.Active = true frame.ClipsDescendants = true frame.Parent = screenGui Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 14) local outerStroke = Instance.new("UIStroke") outerStroke.Color = Color3.fromRGB(100, 40, 200) outerStroke.Thickness = 1.5 outerStroke.Parent = frame for i = 1, 45 do local s = Instance.new("Frame") s.Size = UDim2.new(0, math.random(1, 3), 0, math.random(1, 3)) s.Position = UDim2.new(math.random(), 0, math.random(), 0) s.BackgroundColor3 = Color3.new(1, 1, 1) s.BackgroundTransparency = math.random(4, 9) / 10 s.BorderSizePixel = 0 s.ZIndex = 1 s.Parent = frame Instance.new("UICorner", s).CornerRadius = UDim.new(1, 0) end local header = Instance.new("Frame") header.Size = UDim2.new(1, 0, 0, 48) header.BackgroundColor3 = Color3.fromRGB(18, 8, 35) header.BorderSizePixel = 0 header.ZIndex = 3 header.Parent = frame Instance.new("UICorner", header).CornerRadius = UDim.new(0, 14) local headerFix = Instance.new("Frame") headerFix.Size = UDim2.new(1, 0, 0, 14) headerFix.Position = UDim2.new(0, 0, 1, -14) headerFix.BackgroundColor3 = Color3.fromRGB(18, 8, 35) headerFix.BorderSizePixel = 0 headerFix.ZIndex = 3 headerFix.Parent = header local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -50, 0, 26) title.Position = UDim2.new(0, 14, 0, 6) title.Text = "✦ BLACKHOLE" title.TextColor3 = Color3.fromRGB(200, 160, 255) title.BackgroundTransparency = 1 title.Font = Enum.Font.GothamBold title.TextSize = 14 title.TextXAlignment = Enum.TextXAlignment.Left title.ZIndex = 4 title.Parent = header local subtitle = Instance.new("TextLabel") subtitle.Size = UDim2.new(1, -50, 0, 14) subtitle.Position = UDim2.new(0, 14, 0, 30) subtitle.Text = "Command Hub • [P] Toggle" subtitle.TextColor3 = Color3.fromRGB(100, 80, 140) subtitle.BackgroundTransparency = 1 subtitle.Font = Enum.Font.Gotham subtitle.TextSize = 9 subtitle.TextXAlignment = Enum.TextXAlignment.Left subtitle.ZIndex = 4 subtitle.Parent = header local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 24, 0, 24) closeBtn.Position = UDim2.new(1, -30, 0.5, -12) closeBtn.Text = "✕" closeBtn.TextColor3 = Color3.fromRGB(200, 160, 255) closeBtn.BackgroundColor3 = Color3.fromRGB(40, 10, 70) closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 11 closeBtn.BorderSizePixel = 0 closeBtn.ZIndex = 5 closeBtn.Parent = header Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(1, 0) closeBtn.MouseEnter:Connect(function() tween(closeBtn, {BackgroundColor3 = Color3.fromRGB(180, 40, 40)}) end) closeBtn.MouseLeave:Connect(function() tween(closeBtn, {BackgroundColor3 = Color3.fromRGB(40, 10, 70)}) end) closeBtn.MouseButton1Click:Connect(function() playClick(closeBtn) screenGui:Destroy() end) local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Size = UDim2.new(1, 0, 1, -50) scrollFrame.Position = UDim2.new(0, 0, 0, 50) scrollFrame.BackgroundTransparency = 1 scrollFrame.BorderSizePixel = 0 scrollFrame.ScrollBarThickness = 3 scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(120, 60, 200) scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y scrollFrame.Parent = frame local layout = Instance.new("UIListLayout") layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 5) layout.Parent = scrollFrame local padding = Instance.new("UIPadding") padding.PaddingLeft = UDim.new(0, 10) padding.PaddingRight = UDim.new(0, 10) padding.PaddingTop = UDim.new(0, 8) padding.PaddingBottom = UDim.new(0, 10) padding.Parent = scrollFrame local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.new(0, 38, 0, 38) toggleBtn.Position = UDim2.new(0, 14, 0, 14) toggleBtn.Text = "✦" toggleBtn.TextColor3 = Color3.new(1, 1, 1) toggleBtn.BackgroundColor3 = Color3.fromRGB(60, 0, 130) toggleBtn.Font = Enum.Font.GothamBold toggleBtn.TextSize = 16 toggleBtn.BorderSizePixel = 0 toggleBtn.ZIndex = 20 toggleBtn.Visible = false toggleBtn.Parent = screenGui Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(1, 0) local tbStroke = Instance.new("UIStroke") tbStroke.Color = Color3.fromRGB(150, 80, 255) tbStroke.Thickness = 1.5 tbStroke.Parent = toggleBtn local dragging, dragStart, startPos = false, nil, nil header.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = i.Position startPos = frame.Position end end) header.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) UIS.InputChanged:Connect(function(i) if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then local d = i.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y) end end) local visible = true local function setVisible(state) visible = state frame.Visible = state toggleBtn.Visible = not state end toggleBtn.MouseButton1Click:Connect(function() playClick(toggleBtn); setVisible(true) end) UIS.InputBegan:Connect(function(i, gp) if gp then return end if i.KeyCode == Enum.KeyCode.P then playClick(frame) setVisible(not visible) end end) local function makeSectionLabel(text, order) local container = Instance.new("Frame") container.Size = UDim2.new(1, 0, 0, 22) container.BackgroundTransparency = 1 container.LayoutOrder = order container.Parent = scrollFrame local line = Instance.new("Frame") line.Size = UDim2.new(1, 0, 0, 1) line.Position = UDim2.new(0, 0, 0.5, 0) line.BackgroundColor3 = Color3.fromRGB(55, 25, 85) line.BorderSizePixel = 0 line.Parent = container local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0, 0, 1, 0) lbl.AutomaticSize = Enum.AutomaticSize.X lbl.Text = " " .. text .. " " lbl.TextColor3 = Color3.fromRGB(140, 90, 210) lbl.BackgroundColor3 = Color3.fromRGB(8, 8, 18) lbl.Font = Enum.Font.GothamBold lbl.TextSize = 10 lbl.BorderSizePixel = 0 lbl.ZIndex = 2 lbl.Parent = container end local function makeToggle(labelText, order) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 36) btn.Text = labelText .. ": OFF" btn.TextColor3 = Color3.fromRGB(180, 180, 200) btn.BackgroundColor3 = Color3.fromRGB(22, 22, 35) btn.Font = Enum.Font.GothamSemibold btn.TextSize = 12 btn.BorderSizePixel = 0 btn.LayoutOrder = order btn.Parent = scrollFrame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) local dot = Instance.new("Frame") dot.Size = UDim2.new(0, 8, 0, 8) dot.Position = UDim2.new(1, -16, 0.5, -4) dot.BackgroundColor3 = Color3.fromRGB(70, 70, 90) dot.BorderSizePixel = 0 dot.Parent = btn Instance.new("UICorner", dot).CornerRadius = UDim.new(1, 0) btn.MouseEnter:Connect(function() if btn.BackgroundColor3 ~= Color3.fromRGB(0, 155, 85) then tween(btn, {BackgroundColor3 = Color3.fromRGB(30, 30, 48)}) end end) btn.MouseLeave:Connect(function() if btn.BackgroundColor3 ~= Color3.fromRGB(0, 155, 85) then tween(btn, {BackgroundColor3 = Color3.fromRGB(22, 22, 35)}) end end) local state = false local function setState(s) state = s btn.Text = labelText .. (s and ": ON" or ": OFF") btn.TextColor3 = s and Color3.new(1, 1, 1) or Color3.fromRGB(180, 180, 200) tween(btn, {BackgroundColor3 = s and Color3.fromRGB(0, 155, 85) or Color3.fromRGB(22, 22, 35)}) tween(dot, {BackgroundColor3 = s and Color3.fromRGB(80, 255, 150) or Color3.fromRGB(70, 70, 90)}) end return btn, setState, function() return state end end local function makeSlider(labelText, minVal, maxVal, default, order) local container = Instance.new("Frame") container.Size = UDim2.new(1, 0, 0, 52) container.BackgroundColor3 = Color3.fromRGB(18, 18, 30) container.BorderSizePixel = 0 container.LayoutOrder = order container.Parent = scrollFrame Instance.new("UICorner", container).CornerRadius = UDim.new(0, 8) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.65, 0, 0, 22) lbl.Position = UDim2.new(0, 10, 0, 2) lbl.Text = labelText lbl.TextColor3 = Color3.fromRGB(155, 155, 175) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.Gotham lbl.TextSize = 11 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = container local valLbl = Instance.new("TextLabel") valLbl.Size = UDim2.new(0.35, -10, 0, 22) valLbl.Position = UDim2.new(0.65, 0, 0, 2) valLbl.Text = tostring(default) valLbl.TextColor3 = Color3.fromRGB(160, 110, 230) valLbl.BackgroundTransparency = 1 valLbl.Font = Enum.Font.GothamBold valLbl.TextSize = 11 valLbl.TextXAlignment = Enum.TextXAlignment.Right valLbl.Parent = container local track = Instance.new("Frame") track.Size = UDim2.new(1, -20, 0, 6) track.Position = UDim2.new(0, 10, 0, 34) track.BackgroundColor3 = Color3.fromRGB(38, 38, 52) track.BorderSizePixel = 0 track.Parent = container Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0) local pct = (default - minVal) / (maxVal - minVal) local fill = Instance.new("Frame") fill.Size = UDim2.new(pct, 0, 1, 0) fill.BackgroundColor3 = Color3.fromRGB(100, 40, 200) fill.BorderSizePixel = 0 fill.Parent = track Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0) local handle = Instance.new("Frame") handle.Size = UDim2.new(0, 14, 0, 14) handle.Position = UDim2.new(pct, -7, 0.5, -7) handle.BackgroundColor3 = Color3.fromRGB(200, 160, 255) handle.BorderSizePixel = 0 handle.Parent = track Instance.new("UICorner", handle).CornerRadius = UDim.new(1, 0) local sliding = false local function update(x) local left = track.AbsolutePosition.X local width = track.AbsoluteSize.X pct = math.clamp((x - left) / width, 0, 1) fill.Size = UDim2.new(pct, 0, 1, 0) handle.Position = UDim2.new(pct, -7, 0.5, -7) valLbl.Text = tostring(math.round(minVal + pct * (maxVal - minVal))) end track.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then sliding = true; update(i.Position.X) end end) UIS.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then sliding = false end end) UIS.InputChanged:Connect(function(i) if sliding and i.UserInputType == Enum.UserInputType.MouseMovement then update(i.Position.X) end end) return function() return math.round(minVal + pct * (maxVal - minVal)) end end local function makeButton(labelText, color, order) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 36) btn.Text = labelText btn.TextColor3 = Color3.new(1, 1, 1) btn.BackgroundColor3 = color or Color3.fromRGB(60, 0, 130) btn.Font = Enum.Font.GothamSemibold btn.TextSize = 12 btn.BorderSizePixel = 0 btn.LayoutOrder = order btn.Parent = scrollFrame Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 8) local orig = color or Color3.fromRGB(60, 0, 130) btn.MouseEnter:Connect(function() tween(btn, {BackgroundColor3 = Color3.fromRGB( math.min(orig.R * 255 + 25, 255), math.min(orig.G * 255 + 25, 255), math.min(orig.B * 255 + 25, 255))}) end) btn.MouseLeave:Connect(function() tween(btn, {BackgroundColor3 = orig}) end) return btn end local function makeTextBox(placeholder, order) local box = Instance.new("TextBox") box.Size = UDim2.new(1, 0, 0, 34) box.PlaceholderText = placeholder box.Text = "" box.TextColor3 = Color3.new(1, 1, 1) box.PlaceholderColor3 = Color3.fromRGB(90, 90, 110) box.BackgroundColor3 = Color3.fromRGB(18, 18, 30) box.Font = Enum.Font.Gotham box.TextSize = 12 box.BorderSizePixel = 0 box.ClearTextOnFocus = false box.LayoutOrder = order box.Parent = scrollFrame Instance.new("UICorner", box).CornerRadius = UDim.new(0, 8) local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(55, 25, 85) stroke.Parent = box box.Focused:Connect(function() tween(stroke, {Color = Color3.fromRGB(130, 70, 200)}) end) box.FocusLost:Connect(function() tween(stroke, {Color = Color3.fromRGB(55, 25, 85)}) end) return box end local function makeStatusLabel(order) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 0, 16) lbl.Text = "" lbl.TextColor3 = Color3.fromRGB(255, 100, 100) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.Gotham lbl.TextSize = 10 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.LayoutOrder = order lbl.Parent = scrollFrame return lbl end local states = {} makeSectionLabel("MOVEMENT", 10) local speedBtn, setSpeedBtn = makeToggle("Speed Hack", 11) local getSpeed = makeSlider("Walk Speed", 16, 250, 50, 12) speedBtn.MouseButton1Click:Connect(function() playClick(speedBtn) states.speed = not states.speed setSpeedBtn(states.speed) if not states.speed then local h = getHumanoid() if h then h.WalkSpeed = 16 end end end) local jumpPowerBtn, setJumpPowerBtn = makeToggle("Jump Power", 13) local getJumpPower = makeSlider("Jump Height", 50, 350, 50, 14) jumpPowerBtn.MouseButton1Click:Connect(function() playClick(jumpPowerBtn) states.jumpPower = not states.jumpPower setJumpPowerBtn(states.jumpPower) if not states.jumpPower then local h = getHumanoid() if h then h.JumpPower = 50 end end end) makeSectionLabel("FLY [W/A/S/D + Space/Shift]", 20) local flyBtn, setFlyBtn = makeToggle("Fly", 21) local getFlySpeed = makeSlider("Fly Speed", 10, 200, 60, 22) local flyConn, bodyVel, bodyGyro local function stopFly() if flyConn then flyConn:Disconnect(); flyConn = nil end local hrp = getHRP() local hum = getHumanoid() if hrp then local v = hrp:FindFirstChild("BH_BodyVel"); if v then v:Destroy() end local g = hrp:FindFirstChild("BH_BodyGyro"); if g then g:Destroy() end hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end if hum then hum.PlatformStand = false task.delay(0.05, function() if hum then hum:ChangeState(Enum.HumanoidStateType.GettingUp) end end) end end flyBtn.MouseButton1Click:Connect(function() playClick(flyBtn) states.fly = not states.fly setFlyBtn(states.fly) local hrp = getHRP(); local hum = getHumanoid() if not hrp or not hum then states.fly = false; setFlyBtn(false); return end if states.fly then bodyVel = Instance.new("BodyVelocity") bodyVel.Name = "BH_BodyVel" bodyVel.MaxForce = Vector3.new(1e5, 1e5, 1e5) bodyVel.Velocity = Vector3.zero bodyVel.Parent = hrp bodyGyro = Instance.new("BodyGyro") bodyGyro.Name = "BH_BodyGyro" bodyGyro.MaxTorque = Vector3.new(1e5, 1e5, 1e5) bodyGyro.P = 1e4 bodyGyro.Parent = hrp hum.PlatformStand = true flyConn = RunService.Heartbeat:Connect(function() if not hrp or not hrp.Parent then stopFly(); return end local spd = getFlySpeed() local cf = camera.CFrame local v = Vector3.zero if UIS:IsKeyDown(Enum.KeyCode.W) then v += cf.LookVector end if UIS:IsKeyDown(Enum.KeyCode.S) then v -= cf.LookVector end if UIS:IsKeyDown(Enum.KeyCode.A) then v -= cf.RightVector end if UIS:IsKeyDown(Enum.KeyCode.D) then v += cf.RightVector end if UIS:IsKeyDown(Enum.KeyCode.Space) then v += Vector3.yAxis end if UIS:IsKeyDown(Enum.KeyCode.LeftShift) then v -= Vector3.yAxis end bodyVel.Velocity = v.Magnitude > 0 and v.Unit * spd or Vector3.zero bodyGyro.CFrame = CFrame.lookAt(hrp.Position, hrp.Position + cf.LookVector) end) else stopFly() end end) makeSectionLabel("FLOAT [E = Up, Q = Down]", 30) local floatBtn, setFloatBtn = makeToggle("Float / Hover", 31) local floatConn, floatAttach, floatForce local function stopFloat() if floatConn then floatConn:Disconnect(); floatConn = nil end local hrp = getHRP() if hrp then local a = hrp:FindFirstChild("BH_FloatAttach"); if a then a:Destroy() end local f = hrp:FindFirstChild("BH_FloatForce"); if f then f:Destroy() end end end floatBtn.MouseButton1Click:Connect(function() playClick(floatBtn) states.float = not states.float setFloatBtn(states.float) local hrp = getHRP() if not hrp then states.float = false; setFloatBtn(false); return end if states.float then floatAttach = Instance.new("Attachment") floatAttach.Name = "BH_FloatAttach" floatAttach.Parent = hrp floatForce = Instance.new("VectorForce") floatForce.Name = "BH_FloatForce" floatForce.Attachment0 = floatAttach floatForce.Force = Vector3.zero floatForce.RelativeTo = Enum.ActuatorRelativeTo.World floatForce.ApplyAtCenterOfMass = true floatForce.Parent = hrp floatConn = RunService.Heartbeat:Connect(function() if not hrp or not hrp.Parent then stopFloat(); return end local mass = hrp.AssemblyMass local gravity = workspace.Gravity * mass local vertical = 0 if UIS:IsKeyDown(Enum.KeyCode.E) then vertical = gravity end if UIS:IsKeyDown(Enum.KeyCode.Q) then vertical = -gravity * 0.8 end floatForce.Force = Vector3.new(0, gravity + vertical, 0) end) else stopFloat() end end) makeSectionLabel("NOCLIP", 40) local noclipBtn, setNoclipBtn = makeToggle("Noclip", 41) local noclipConn noclipBtn.MouseButton1Click:Connect(function() playClick(noclipBtn) states.noclip = not states.noclip setNoclipBtn(states.noclip) local char = getCharacter() if not char then return end if states.noclip then noclipConn = RunService.Stepped:Connect(function() local c = getCharacter() if not c then return end for _, p in ipairs(c:GetDescendants()) do if p:IsA("BasePart") then p.CanCollide = false end end end) else if noclipConn then noclipConn:Disconnect(); noclipConn = nil end local c = getCharacter() if c then for _, p in ipairs(c:GetDescendants()) do if p:IsA("BasePart") then p.CanCollide = true end end end end end) makeSectionLabel("TELEPORT", 50) local tpBox = makeTextBox("Enter player name...", 51) local tpStatus = makeStatusLabel(52) local tpBtn = makeButton("Teleport to Player", Color3.fromRGB(60, 0, 130), 53) local function findPlayer(query) query = query:lower() local best, bestLen = nil, math.huge for _, p in ipairs(Players:GetPlayers()) do if p ~= player then local name = p.Name:lower() local disp = p.DisplayName:lower() if name == query or disp == query then return p end if (name:sub(1, #query) == query or disp:sub(1, #query) == query) and #name < bestLen then best = p; bestLen = #name elseif not best and (name:find(query, 1, true) or disp:find(query, 1, true)) then best = p; bestLen = #name end end end return best end local function setStatus(msg, success) tpStatus.Text = msg tpStatus.TextColor3 = success and Color3.fromRGB(0, 210, 120) or Color3.fromRGB(255, 90, 90) end local function doTeleport() playClick(tpBtn) local query = tpBox.Text:match("^%s*(.-)%s*$") if query == "" then setStatus("Enter a name first."); return end local target = findPlayer(query) if not target then setStatus("Player not found."); return end local myHRP = getHRP() local targetChar = target.Character local targetHRP = targetChar and targetChar:FindFirstChild("HumanoidRootPart") if not myHRP then setStatus("Your character is missing."); return end if not targetHRP then setStatus(target.Name .. " has no character."); return end myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 3, 2) setStatus("Teleported to " .. target.Name, true) end tpBtn.MouseButton1Click:Connect(doTeleport) tpBox.FocusLost:Connect(function(enter) if enter then doTeleport() end end) makeSectionLabel("MISC", 60) local antiAfkBtn, setAntiAfkBtn = makeToggle("Anti-AFK", 61) local antiAfkConn local vu = game:GetService("VirtualUser") antiAfkBtn.MouseButton1Click:Connect(function() playClick(antiAfkBtn) states.antiAfk = not states.antiAfk setAntiAfkBtn(states.antiAfk) if states.antiAfk then antiAfkConn = player.Idled:Connect(function() vu:Button2Down(Vector2.zero, camera.CFrame) task.wait(0.1) vu:Button2Up(Vector2.zero, camera.CFrame) end) else if antiAfkConn then antiAfkConn:Disconnect() antiAfkConn = nil end end end) local infJumpBtn, setInfJumpBtn = makeToggle("Infinite Jump", 65) infJumpBtn.MouseButton1Click:Connect(function() playClick(infJumpBtn) states.infJump = not states.infJump setInfJumpBtn(states.infJump) end) UIS.InputBegan:Connect(function(i, gp) if gp then return end if i.KeyCode == Enum.KeyCode.Space and states.infJump then local h = getHumanoid() if h then h:ChangeState(Enum.HumanoidStateType.Jumping) end end end) local noLagBtn, setNoLagBtn = makeToggle("No Lag", 66) local function setRendering(enabled) local lighting = game:GetService("Lighting") if enabled then workspace.StreamingEnabled = workspace:GetAttribute("BH_StreamingEnabled") or false lighting.GlobalShadows = workspace:GetAttribute("BH_GlobalShadows") ~= false game:GetService("RunService"):Set3dRenderingEnabled(true) local overlay = screenGui:FindFirstChild("BH_NoLagOverlay") if overlay then overlay:Destroy() end else workspace:SetAttribute("BH_StreamingEnabled", workspace.StreamingEnabled) workspace:SetAttribute("BH_GlobalShadows", lighting.GlobalShadows) game:GetService("RunService"):Set3dRenderingEnabled(false) local overlay = Instance.new("Frame") overlay.Name = "BH_NoLagOverlay" overlay.Size = UDim2.new(1, 0, 1, 0) overlay.BackgroundColor3 = Color3.fromRGB(255, 255, 255) overlay.BorderSizePixel = 0 overlay.ZIndex = 0 overlay.Parent = screenGui end end noLagBtn.MouseButton1Click:Connect(function() playClick(noLagBtn) states.noLag = not states.noLag setNoLagBtn(states.noLag) setRendering(not states.noLag) end) local fullbrightBtn, setFullbrightBtn = makeToggle("Fullbright", 62) local originalBrightness = workspace.CurrentCamera and lighting and game:GetService("Lighting").Brightness fullbrightBtn.MouseButton1Click:Connect(function() playClick(fullbrightBtn) states.fullbright = not states.fullbright setFullbrightBtn(states.fullbright) local lighting = game:GetService("Lighting") if states.fullbright then originalBrightness = lighting.Brightness lighting.Brightness = 10 lighting.ClockTime = 14 lighting.FogEnd = 1e6 lighting.GlobalShadows = false lighting.Ambient = Color3.fromRGB(255, 255, 255) lighting.OutdoorAmbient = Color3.fromRGB(255, 255, 255) else lighting.Brightness = originalBrightness or 1 lighting.GlobalShadows = true lighting.Ambient = Color3.fromRGB(127, 127, 127) lighting.OutdoorAmbient = Color3.fromRGB(127, 127, 127) end end) local noFogBtn, setNoFogBtn = makeToggle("No Fog", 63) local savedFog = {} local noFogConn noFogBtn.MouseButton1Click:Connect(function() playClick(noFogBtn) states.noFog = not states.noFog setNoFogBtn(states.noFog) local lighting = game:GetService("Lighting") if states.noFog then savedFog.FogEnd = lighting.FogEnd savedFog.FogStart = lighting.FogStart savedFog.FogColor = lighting.FogColor for _, obj in ipairs(lighting:GetDescendants()) do if obj:IsA("FogEffect") or obj:IsA("BlurEffect") then obj:SetAttribute("BH_WasEnabled", obj.Enabled) obj.Enabled = false end end noFogConn = RunService.Heartbeat:Connect(function() lighting.FogEnd = 1e9 lighting.FogStart = 1e9 lighting.FogColor = Color3.fromRGB(0, 0, 0) for _, obj in ipairs(lighting:GetDescendants()) do if obj:IsA("FogEffect") then obj.Enabled = false end end end) else if noFogConn then noFogConn:Disconnect(); noFogConn = nil end lighting.FogEnd = savedFog.FogEnd or 1e6 lighting.FogStart = savedFog.FogStart or 0 lighting.FogColor = savedFog.FogColor or Color3.fromRGB(191, 191, 191) for _, obj in ipairs(lighting:GetDescendants()) do if obj:IsA("FogEffect") or obj:IsA("BlurEffect") then obj.Enabled = obj:GetAttribute("BH_WasEnabled") ~= false end end end end) local espBtn, setEspBtn = makeToggle("Player ESP", 63) local espBillboards = {} local function clearESP() for _, b in pairs(espBillboards) do if b and b.Parent then b:Destroy() end end espBillboards = {} end local function buildESP() clearESP() for _, p in ipairs(Players:GetPlayers()) do if p ~= player then local function attachTag(character) if not character then return end local hrp = character:WaitForChild("HumanoidRootPart", 5) if not hrp then return end local bb = Instance.new("BillboardGui") bb.Name = "BH_ESP" bb.Size = UDim2.new(0, 100, 0, 30) bb.StudsOffset = Vector3.new(0, 3, 0) bb.AlwaysOnTop = true bb.Parent = hrp local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 1, 0) lbl.Text = p.Name lbl.TextColor3 = Color3.fromRGB(180, 100, 255) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.GothamBold lbl.TextSize = 13 lbl.TextStrokeTransparency = 0 lbl.Parent = bb espBillboards[p.UserId] = bb end attachTag(p.Character) p.CharacterAdded:Connect(attachTag) end end end espBtn.MouseButton1Click:Connect(function() playClick(espBtn) states.esp = not states.esp setEspBtn(states.esp) if states.esp then buildESP() else clearESP() end end) Players.PlayerAdded:Connect(function(p) if not states.esp then return end p.CharacterAdded:Connect(function(char) task.wait(1) local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then return end local bb = Instance.new("BillboardGui") bb.Name = "BH_ESP" bb.Size = UDim2.new(0, 100, 0, 30) bb.StudsOffset = Vector3.new(0, 3, 0) bb.AlwaysOnTop = true bb.Parent = hrp local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 1, 0) lbl.Text = p.Name lbl.TextColor3 = Color3.fromRGB(180, 100, 255) lbl.BackgroundTransparency = 1 lbl.Font = Enum.Font.GothamBold lbl.TextSize = 13 lbl.TextStrokeTransparency = 0 lbl.Parent = bb espBillboards[p.UserId] = bb end) end) local noDelayBtn, setNoDelayBtn = makeToggle("Instant Prompts", 64) local function applyNoDelay(prompt) prompt.HoldDuration = 0 end local noDelayConn local function refreshPrompts() for _, obj in ipairs(workspace:GetDescendants()) do if obj:IsA("ProximityPrompt") then applyNoDelay(obj) end end end noDelayBtn.MouseButton1Click:Connect(function() playClick(noDelayBtn) states.noDelay = not states.noDelay setNoDelayBtn(states.noDelay) if states.noDelay then refreshPrompts() noDelayConn = workspace.DescendantAdded:Connect(function(obj) if obj:IsA("ProximityPrompt") then applyNoDelay(obj) end end) else if noDelayConn then noDelayConn:Disconnect(); noDelayConn = nil end for _, obj in ipairs(workspace:GetDescendants()) do if obj:IsA("ProximityPrompt") then obj.HoldDuration = 1 end end end end) RunService.Heartbeat:Connect(function() if states.speed then local h = getHumanoid() if h then h.WalkSpeed = getSpeed() end end if states.jumpPower then local h = getHumanoid() if h then h.JumpPower = getJumpPower() end end end) player.CharacterAdded:Connect(function() if states.fly then states.fly = false; setFlyBtn(false) end if states.float then states.float = false; setFloatBtn(false) end if states.noclip then states.noclip = false; setNoclipBtn(false) if noclipConn then noclipConn:Disconnect(); noclipConn = nil end end if states.esp and states.esp == true then task.wait(2) buildESP() end end) print("Blackhole v2.0 loaded — [P] to toggle")