Basketball 0.2
Key RequiredUniversal

Basketball 0.2

Universal ScriptIrdkIrdk 54.7K views 1.3K executesUpdated Jul 15, 2025
3.3/ 5(3 votes)
2167% Positive
Lua Script•1039 lines (35692 chars)
--[[
  Universal Basketball 0.2 Script by Irdk (scriptblox)
  ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑

                    Currently Supported games:
					Universal
					Hoops Life

                    What's Added:
					New Method For Universal Auto Green
					More Rigid Guarding
					Speed Boost While Guarding (B)

					Hoops Life (
				                Auto Green
								Auto Guard
								Auto Block
								Hip Height Control
								[for tutorials on how to use them, go to the 
								 script description on Scriptblox]
					)
                    
]]

local uniLoaded   = false
local hoopsLoaded = false

local function runOnce(flagName, fn)
    if _G[flagName] then return end      -- already ran
    _G[flagName] = true                  -- mark as done
    fn()                                 -- execute real loader
end

--Credits

local Players = game:GetService("Players")
local player  = Players.LocalPlayer

local splash = Instance.new("ScreenGui", player:WaitForChild("PlayerGui"))
splash.Name = "CreditsSplash"

local lbl = Instance.new("TextLabel", splash)
lbl.Size = UDim2.new(0, 450, 0, 120)
lbl.Position = UDim2.new(0.5, -225, 0.5, -60)
lbl.BackgroundColor3 = Color3.new(0.1,0.1,0.1)
lbl.TextColor3      = Color3.new(1,1,1)
lbl.TextScaled      = true
lbl.Font            = Enum.Font.SourceSansBold
lbl.Text = "Made By: Irdk (scriptblox.com)\nDiscord: irdk_scriptblox"

local splashGone = false
task.delay(3,function()
    splash:Destroy()
    splashGone = true
end)

--Mode selection

local function waitForSplash()
    while not splashGone do task.wait() end
end

waitForSplash()

local selector = Instance.new("ScreenGui", player.PlayerGui)
selector.Name = "ModeSelector"

local frame = Instance.new("Frame", selector)
frame.Size = UDim2.new(0, 300, 0, 160)
frame.Position = UDim2.new(0.5, -150, 0.5, -80)
frame.BackgroundColor3 = Color3.fromRGB(25,25,25)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true

local title = Instance.new("TextLabel", frame)
title.Size = UDim2.new(1,0,0.3,0)
title.Position = UDim2.new(0,0,0,0)
title.BackgroundTransparency = 1
title.TextColor3 = Color3.new(1,1,1)
title.TextScaled = true
title.Font = Enum.Font.SourceSansBold
title.Text = "Select Mode"

local function makeButton(text, y)
    local b = Instance.new("TextButton", frame)
    b.Size = UDim2.new(0.8,0,0.25,0)
    b.Position = UDim2.new(0.1,0,y,0)
    b.BackgroundColor3 = Color3.fromRGB(80,80,80)
    b.TextColor3 = Color3.new(1,1,1)
    b.Font = Enum.Font.SourceSans
    b.TextScaled = true
    b.Text = text
    return b
end

local uniBtn  = makeButton("Universal", 0.35)
local hoopBtn = makeButton("Hoops Life",0.65)

local function loadUniversal()
    runOnce("__UNI_DONE", function()
    	local Players = game:GetService("Players")
    	local RunService = game:GetService("RunService")
    	local UIS = game:GetService("UserInputService")
    	local VirtualInputManager = game:GetService("VirtualInputManager")

    	-- Player info
    	local player     = Players.LocalPlayer
    	local character  = player.Character or player.CharacterAdded:Wait()
    	local humanoid   = character:WaitForChild("Humanoid")
    	local hrp        = character:WaitForChild("HumanoidRootPart")

    	-- Guard vars
    	local hoopPosition = nil
    	local target        = nil
    	local guardEnabled  = false
    	local guardDistance = 4

    	-- Minimum distance from hoop
    	local minDistance   = 15

    	-- Speed bypass vars - ALWAYS ACTIVE
    	local bypassSpeed = 50
    	local speedMultiplier = 1

    	-- Pause on manual input
    	local keysDown  = {}
    	local autoPaused = false

    	-- E‑hold config
    	local holdDuration = 455
    	local canHold      = true

    	-- Speed changer vars
    	local speedEnabled = false
    	local baseSpeed = humanoid.WalkSpeed
    	local currentSpeed = baseSpeed

    	-- Body velocity objects for always-active speed boost
    	local bodyVelocity = Instance.new("BodyVelocity")
    	bodyVelocity.MaxForce = Vector3.new(4000, 0, 4000)
    	bodyVelocity.Velocity = Vector3.new(0, 0, 0)
    	bodyVelocity.Parent = hrp

    	--Control Panel

    	local screenGui = Instance.new("ScreenGui", player:WaitForChild("PlayerGui"))
    	screenGui.Name = "ControlPanel"

    	local frame = Instance.new("Frame", screenGui)
    	frame.Position = UDim2.new(0, 50, 0, 50)
    	frame.Size = UDim2.new(0, 300, 0, 250)
    	frame.BackgroundColor3 = Color3.new(0.1, 0.1, 0.1)
    	frame.BorderSizePixel = 0
    	frame.Active = true
    	frame.Draggable = true

    	-- Hold‑E label + box
    	local eLabel = Instance.new("TextLabel", frame)
    	eLabel.Size = UDim2.new(0.6, 0, 0.15, 0)
   		eLabel.Text = "Hold E (ms):"
    	eLabel.BackgroundTransparency = 1
    	eLabel.TextColor3 = Color3.new(1,1,1)
    	eLabel.Font = Enum.Font.SourceSans
    	eLabel.TextSize = 18

    	local eBox = Instance.new("TextBox", frame)
    	eBox.Size = UDim2.new(0.4, 0, 0.15, 0)
    	eBox.Position = UDim2.new(0.6, 0, 0, 0)
    	eBox.Text = tostring(holdDuration)
    	eBox.BackgroundColor3 = Color3.fromRGB(50,50,50)
    	eBox.TextColor3 = Color3.new(1,1,1)
    	eBox.Font = Enum.Font.SourceSans
    	eBox.TextSize = 18
    	eBox.ClearTextOnFocus = false
    	eBox.FocusLost:Connect(function()
        	local v = tonumber(eBox.Text)
        	if v then holdDuration = v else eBox.Text = tostring(holdDuration) end
    	end)

    	-- Guard‑distance label + box
    	local gdLabel = Instance.new("TextLabel", frame)
    	gdLabel.Size = UDim2.new(0.6, 0, 0.15, 0)
    	gdLabel.Position = UDim2.new(0, 0, 0.15, 0)
    	gdLabel.Text = "Guard Dist (studs):"
    	gdLabel.BackgroundTransparency = 1
    	gdLabel.TextColor3 = Color3.new(1,1,1)
    	gdLabel.Font = Enum.Font.SourceSans
    	gdLabel.TextSize = 18

    	local gdBox = Instance.new("TextBox", frame)
    	gdBox.Size = UDim2.new(0.4, 0, 0.15, 0)
    	gdBox.Position = UDim2.new(0.6, 0, 0.15, 0)
    	gdBox.Text = tostring(guardDistance)
    	gdBox.BackgroundColor3 = Color3.fromRGB(50,50,50)
    	gdBox.TextColor3 = Color3.new(1,1,1)
    	gdBox.Font = Enum.Font.SourceSans
    	gdBox.TextSize = 18
    	gdBox.ClearTextOnFocus = false
    	gdBox.FocusLost:Connect(function()
    		local v = tonumber(gdBox.Text)
    		if v and v >= 0 then guardDistance = v else gdBox.Text = tostring(guardDistance) end
    	end)

    	--Toggles/ Guide/ Bot

    	local function createToggle(name, posY, note)
        local t = Instance.new("TextButton", frame)
    	t.Size = UDim2.new(0.5, 0, 0.12, 0)
    	t.Position = UDim2.new(0, 0, posY, 0)
    	t.BackgroundColor3 = Color3.fromRGB(80,80,80)
    	t.TextColor3 = Color3.new(1,1,1)
    	t.Font = Enum.Font.SourceSans
    	t.TextSize = 16
    	t.Text = name..": ✗"

    	local noteLbl
    	if note then
        noteLbl = Instance.new("TextLabel", frame)
        noteLbl.Position = UDim2.new(0.5, 5, posY, 0)
        noteLbl.Size = UDim2.new(0.5, -5, 0.12, 0)
        noteLbl.Text = note
        noteLbl.BackgroundTransparency = 1
        noteLbl.TextColor3 = Color3.fromRGB(200,200,200)
        noteLbl.Font = Enum.Font.SourceSansItalic
        noteLbl.TextSize = 14
        noteLbl.TextXAlignment = Enum.TextXAlignment.Left
        end

        local state = false
        t.MouseButton1Click:Connect(function()
        state = not state
        t.Text = name..": "..(state and "✓" or "✗")
        t.BackgroundColor3 = state and Color3.fromRGB(0,170,0) or Color3.fromRGB(80,80,80)
        end)
        return function() return state end
    	end

    	local getDistanceIndicatorOn = createToggle("Distance Toggle", 0.32)
   		local getGreenToggleOn       = createToggle("Use Green Dot",   0.46)
    	local getAutoGuardOn         = createToggle("Auto Guard",      0.60, "Press B to toggle guard/speed")
    	local getSpeedChangerOn      = createToggle("Speed Changer", 0.74)

    	-- Speed changer controls
    	local speedFrame = Instance.new("Frame", frame)
    	speedFrame.Size = UDim2.new(1, 0, 0.12, 0)
    	speedFrame.Position = UDim2.new(0, 0, 0.88, 0)
    	speedFrame.BackgroundColor3 = Color3.fromRGB(45,45,45)
    	speedFrame.BorderSizePixel = 0

    	local minusBtn = Instance.new("TextButton", speedFrame)
    	minusBtn.Size = UDim2.new(0.25, 0, 1, 0)
    	minusBtn.Position = UDim2.new(0, 0, 0, 0)
    	minusBtn.Text = "-5"
    	minusBtn.TextScaled = true
    	minusBtn.Font = Enum.Font.SourceSans
    	minusBtn.BackgroundColor3 = Color3.fromRGB(120,0,0)
    	minusBtn.TextColor3 = Color3.new(1,1,1)

    	local plusBtn = Instance.new("TextButton", speedFrame)
    	plusBtn.Size = UDim2.new(0.25, 0, 1, 0)
    	plusBtn.Position = UDim2.new(0.75, 0, 0, 0)
    	plusBtn.Text = "+5"
    	plusBtn.TextScaled = true
    	plusBtn.Font = Enum.Font.SourceSans
    	plusBtn.BackgroundColor3 = Color3.fromRGB(0,120,0)
    	plusBtn.TextColor3 = Color3.new(1,1,1)

    	local speedLabel = Instance.new("TextLabel", speedFrame)
    	speedLabel.Size = UDim2.new(0.5, 0, 1, 0)
    	speedLabel.Position = UDim2.new(0.25, 0, 0, 0)
    	speedLabel.BackgroundTransparency = 1
    	speedLabel.Font = Enum.Font.SourceSans
    	speedLabel.TextScaled = true
    	speedLabel.TextColor3 = Color3.new(1,1,1)
    	speedLabel.Text = "Speed: "..bypassSpeed

    	-- Speed changer functions
    	local function updateSpeedMultiplier()
    		speedMultiplier = bypassSpeed / 50
    		speedLabel.Text = "Speed: "..bypassSpeed
    	end

    	-- Hold functionality vars
    	local isHoldingPlus = false
    	local isHoldingMinus = false
    	local lastSpamTime = 0
    	local spamDelay = 0.05

    	-- Hold spam handler
    	local function handleHoldSpam()
    		local currentTime = tick()
    		if currentTime - lastSpamTime >= spamDelay then
    			if isHoldingPlus and getSpeedChangerOn() then
    				bypassSpeed = bypassSpeed + 5
    				updateSpeedMultiplier()
    			elseif isHoldingMinus and getSpeedChangerOn() then
    				bypassSpeed = math.max(5, bypassSpeed - 5)
    				updateSpeedMultiplier()
    			end
    			lastSpamTime = currentTime
    		end
    	end

    	RunService.Heartbeat:Connect(handleHoldSpam)

    	-- Button connections
    	minusBtn.MouseButton1Down:Connect(function()
    		if getSpeedChangerOn() then
    			isHoldingMinus = true
    			bypassSpeed = math.max(5, bypassSpeed - 5)
    			updateSpeedMultiplier()
    		end
    	end)

    	minusBtn.MouseButton1Up:Connect(function()
    		isHoldingMinus = false
    	end)

    	plusBtn.MouseButton1Down:Connect(function()
    		if getSpeedChangerOn() then
    			isHoldingPlus = true
    			bypassSpeed = bypassSpeed + 5
    			updateSpeedMultiplier()
    		end
    	end)

    	plusBtn.MouseButton1Up:Connect(function()
    		isHoldingPlus = false
    	end)

    	-- Helper functions
    	local function keypress(key)
    		VirtualInputManager:SendKeyEvent(true, key, false, game)
    	end

    	local function keyrelease(key)
    		VirtualInputManager:SendKeyEvent(false, key, false, game)
    	end

    	--Input Logic

    	UIS.InputBegan:Connect(function(inp,gp)
        if gp then return end
        if inp.KeyCode==Enum.KeyCode.W or inp.KeyCode==Enum.KeyCode.A or inp.KeyCode==Enum.KeyCode.S or inp.KeyCode==Enum.KeyCode.D then
        keysDown[inp.KeyCode]=true
        autoPaused = next(keysDown)~=nil
        end

        if inp.KeyCode==Enum.KeyCode.L then
            hoopPosition = hrp.Position
            warn("Hoop position set to:", hoopPosition)
        elseif inp.KeyCode==Enum.KeyCode.B then
            if not hoopPosition and getAutoGuardOn() then warn("Set the hoop first with L.") return end
            if getAutoGuardOn() then
                guardEnabled = not guardEnabled
                warn("Guard " .. (guardEnabled and "ENABLED" or "DISABLED"))
                if guardEnabled then
                	local closest,minDist=nil,math.huge
                	for _,p in pairs(Players:GetPlayers()) do
                    	if p~=player and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
                        	local d=(p.Character.HumanoidRootPart.Position-hrp.Position).Magnitude
                        	if d<minDist then minDist=d closest=p.Character.HumanoidRootPart end
                    	end
                	end
                	target=closest
            	end
         	end
    	elseif inp.KeyCode==Enum.KeyCode.E and canHold then
        	canHold=false
        		keypress(Enum.KeyCode.E)
        		task.delay(holdDuration/1000,function()
            	keyrelease(Enum.KeyCode.E)
            	canHold=true
        		end)
    		end
		end)

		UIS.InputEnded:Connect(function(inp)
     		if inp.KeyCode==Enum.KeyCode.W or inp.KeyCode==Enum.KeyCode.A or inp.KeyCode==Enum.KeyCode.S or inp.KeyCode==Enum.KeyCode.D then
        		keysDown[inp.KeyCode]=nil
        		autoPaused = next(keysDown)~=nil
    		end
		end)

		--Distance Dot

		local distDot = Instance.new("Frame", screenGui)
		distDot.Size = UDim2.new(0,10,0,10)
		distDot.Position = UDim2.new(0.5,-5,0.55,-5)
		distDot.BackgroundTransparency = 0
		distDot.Visible=false
		distDot.BorderSizePixel = 0

		local guideFrame = Instance.new("Frame", screenGui)
		guideFrame.Size=UDim2.new(0,0,0,0)
		guideFrame.Visible=false

 		--Main Loop

		RunService.RenderStepped:Connect(function()
			-- wall effect
       		if hoopPosition then
       		local toHRP = hrp.Position - hoopPosition
        		local dist = toHRP.Magnitude
        		if dist < minDistance then
        		local dir = toHRP.Unit
            		local vel = hrp.AssemblyLinearVelocity
            		local inward = (vel:Dot(-dir))
            		if inward > 0 then
                		local corrected = vel + dir * inward
                		hrp.AssemblyLinearVelocity = Vector3.new(corrected.X, vel.Y, corrected.Z)
               		end
         		end
     		end

    		-- guard
    		if guardEnabled and target and target.Parent and hoopPosition and not autoPaused then
        		local dirToPlayer = (target.Position - hoopPosition).Unit
         		local guardPos    = target.Position - dirToPlayer * guardDistance
        		guardPos          = Vector3.new(guardPos.X, hrp.Position.Y, guardPos.Z)
         		if math.random(1,180)==1 then
            		guardPos += Vector3.new(math.random(-1,1),0,math.random(-1,1)).Unit*1.2
        		end
        		humanoid:MoveTo(guardPos)
     		end

     		-- Always-active speed boost using both methods
     		local moveDir = humanoid.MoveDirection
     		if moveDir.Magnitude > 0 then
     			local finalSpeed = bypassSpeed * speedMultiplier
     			
     			-- Linear velocity method
     			local vel = hrp.AssemblyLinearVelocity
     			local newVel = moveDir.Unit * finalSpeed
     			hrp.AssemblyLinearVelocity = Vector3.new(newVel.X, vel.Y, newVel.Z)
     			
     			-- Body velocity method
     			bodyVelocity.Velocity = Vector3.new(newVel.X, 0, newVel.Z)
     		else
     			bodyVelocity.Velocity = Vector3.new(0, 0, 0)
     		end

    		-- distance indicator
     		if getDistanceIndicatorOn() and target then
        		local d=(target.Position-hrp.Position).Magnitude
        		distDot.BackgroundColor3 = d<10 and Color3.new(1,0,0) or (getGreenToggleOn() and Color3.new(0,1,0) or Color3.new(0.2,0.2,0.2))
         		distDot.Visible=true
    		else distDot.Visible=false end

    		-- Character respawn handling
    		if not character or not character.Parent then
    			character = player.Character
    			if character then
    				humanoid = character:WaitForChild("Humanoid")
    				hrp = character:WaitForChild("HumanoidRootPart")
    				-- Recreate body velocity
    				if bodyVelocity then bodyVelocity:Destroy() end
    				bodyVelocity = Instance.new("BodyVelocity")
    				bodyVelocity.MaxForce = Vector3.new(4000, 0, 4000)
    				bodyVelocity.Velocity = Vector3.new(0, 0, 0)
    				bodyVelocity.Parent = hrp
    			end
    		end
    	end)
    end)
end

local function loadHoops()
    runOnce("__HOOPS_DONE", function()
        -- Hoops Life Auto‑Utility

		-- api & services
		local RS            = game:GetService("RunService")
		local function nextFrame(fn)
    		task.defer(fn)
		end
		local UIS           = game:GetService("UserInputService")
		local VIM           = game:GetService("VirtualInputManager")
		local Players       = game:GetService("Players")
		local TweenService  = game:GetService("TweenService")
		local Replicated    = game:GetService("ReplicatedStorage")

		--player handle
		local player       = Players.LocalPlayer
		local character    = player.Character or player.CharacterAdded:Wait()
		local humanoid     = character:WaitForChild("Humanoid")
		local HRP          = character:WaitForChild("HumanoidRootPart")

		--core state
		local keysDown            = {}
		local autoPaused          = false

		local hoopPos             = nil
		local targetPart          = nil
		local guardEnabled        = false
		local guardDistance       = 5
		local guardMode           = "Pro" -- Normal / Pro / Hacker

		-- Speed system - always active
		local speedEnabled        = false
		local baseSpeed           = humanoid.WalkSpeed
		local targetSpeed         = baseSpeed + 2
		local speedMultiplier     = 1

		-- Hip height system
		local hipHeightEnabled    = false
		local baseHipHeight      = humanoid.HipHeight
		local targetHipHeight    = baseHipHeight

		-- Body velocity objects for Pro/Hacker modes
		local bodyVelocity = Instance.new("BodyVelocity")
		bodyVelocity.MaxForce = Vector3.new(4000, 0, 4000)
		bodyVelocity.Velocity = Vector3.new(0, 0, 0)
		bodyVelocity.Parent = HRP

		-- Guard global vars for Pro/Hacker modes
		_G.HL_HoopPosition = nil
		_G.HL_TargetPart = nil
		_G.HL_GuardDistance = guardDistance
		_G.HL_MinDistance = 15

		--Gui
		local gui       = Instance.new("ScreenGui")
		gui.ResetOnSpawn = false
		gui.Name        = "HoopsControl"
		gui.Parent      = player:WaitForChild("PlayerGui")

		local mainFrm   = Instance.new("Frame", gui)
		mainFrm.Size            = UDim2.fromOffset(300, 300)
		mainFrm.Position        = UDim2.new(0, 50, 0, 50)
		mainFrm.BackgroundColor3= Color3.fromRGB(25, 25, 25)
		mainFrm.BorderSizePixel = 0
		mainFrm.Active          = true
		mainFrm.Draggable       = true

		--helper pop-up
		local function popHelper(text)
    		if gui:FindFirstChild("HL_Helper") then
        		gui.HL_Helper:Destroy()
    		end

    		local card = Instance.new("TextLabel")
    		card.Name                  = "HL_Helper"
    		card.AnchorPoint           = Vector2.new(0,1)
    		card.Size                  = UDim2.fromOffset(280,50)
    		card.Position              = mainFrm.Position + UDim2.new(0,0,0,-10)
    		card.BackgroundColor3      = Color3.fromRGB(0,170,0)
    		card.BorderSizePixel       = 0
    		card.Text                  = text
    		card.TextScaled            = true
    		card.Font                  = Enum.Font.SourceSansBold
    		card.TextColor3            = Color3.new(1,1,1)
    		card.Parent                = gui

    		task.spawn(function()
        		task.wait(4)
        		for i=0,1,0.05 do
            		card.BackgroundTransparency = i
            		card.TextTransparency       = i
            		card.Position               = card.Position + UDim2.new(0,0,0,-1)
            		task.wait()
        		end
        		card:Destroy()
    		end)
		end

		-- utility
		local function newToggle(txt, relY)
    		local btn  = Instance.new("TextButton", mainFrm)
    		btn.Size            = UDim2.new(0.9, 0, 0.12, 0)
    		btn.Position        = UDim2.new(0.05, 0, relY, 0)
    		btn.BackgroundColor3= Color3.fromRGB(80, 80, 80)
    		btn.TextColor3      = Color3.new(1, 1, 1)
    		btn.TextScaled      = true
    		btn.Font            = Enum.Font.SourceSans

    		local state = false
    		local function refresh() btn.Text = string.format("%s: %s", txt, state and "✓" or "✗") end
    		refresh()

    		btn.MouseButton1Click:Connect(function()
        		state = not state
        		btn.BackgroundColor3 = state and Color3.fromRGB(0,170,0) or Color3.fromRGB(80,80,80)
        		refresh()
    		end)
    		return function() return state end, btn
		end

		-- toggles
		local isAutoShoot , _shootBtn = newToggle("Auto Shoot (Q)",      0.00)
		local isAutoGuard , _guardBtn = newToggle("Auto Guard (B)",      0.13)
		local isAutoBlock , _blockBtn = newToggle("Auto Block",          0.26)
		local _speedToggleChk,  speedBtn    = newToggle("Speed Changer",   0.39)
		local _hipToggleChk,  hipBtn    = newToggle("Hip Height (K)",   0.52)

		-- guard‑mode buttons 
		local modeBar = Instance.new("Frame", mainFrm)
		modeBar.Size            = UDim2.new(0.9, 0, 0.12, 0)
		modeBar.Position        = UDim2.new(0.05, 0, 0.65, 0)
		modeBar.BackgroundColor3= Color3.fromRGB(35, 35, 35)

		local modes = {"Normal", "Pro", "Hacker"}
		local modeButtons = {}
		for i, m in ipairs(modes) do
    		local b      = Instance.new("TextButton", modeBar)
    		b.Size       = UDim2.new(1/#modes, 0, 1, 0)
    		b.Position   = UDim2.new((i-1)/#modes, 0, 0, 0)
    		b.Text       = m
    		b.TextScaled = true
    		b.Font       = Enum.Font.SourceSans
    		b.TextColor3 = Color3.new(1,1,1)
    		modeButtons[m] = b

    		local function recolour()
        		b.BackgroundColor3 = (guardMode == m) and Color3.fromRGB(0,170,0) or Color3.fromRGB(70,70,70)
    		end
    		recolour()

    		b.MouseButton1Click:Connect(function()
        		guardMode = m
        		for _, ob in pairs(modeButtons) do
            		ob.BackgroundColor3 = Color3.fromRGB(70,70,70)
        		end
        		recolour()
    		end)
		end

		-- speed slider
		local speedGui
		local function buildSpeedGui()
    		speedGui                 = Instance.new("Frame", mainFrm)
   			speedGui.Size            = UDim2.new(0.9, 0, 0.12, 0)
    		speedGui.Position        = UDim2.new(0.05, 0, 0.78, 0)
    		speedGui.BackgroundColor3= Color3.fromRGB(45,45,45)

    		local minus           = Instance.new("TextButton", speedGui)
    		minus.Size            = UDim2.new(0.25, 0, 1, 0)
    		minus.Text            = "-5"
    		minus.TextScaled      = true
    		minus.Font            = Enum.Font.SourceSans
    		minus.BackgroundColor3= Color3.fromRGB(120,0,0)
    		minus.TextColor3      = Color3.new(1,1,1)

    		local plus            = minus:Clone()
    		plus.Parent           = speedGui
    		plus.Text             = "+5"
    		plus.Position         = UDim2.new(0.75, 0, 0, 0)
    		plus.BackgroundColor3 = Color3.fromRGB(0,120,0)

    		local label           = Instance.new("TextLabel", speedGui)
    		label.Size            = UDim2.new(0.5, 0, 1, 0)
    		label.Position        = UDim2.new(0.25,0,0,0)
    		label.BackgroundTransparency = 1
    		label.Font            = Enum.Font.SourceSans
    		label.TextScaled      = true
    		label.TextColor3      = Color3.new(1,1,1)

    		local function update() 
    			label.Text = "Speed: "..targetSpeed
    			speedMultiplier = targetSpeed / baseSpeed
    		end
    		update()

    		minus.MouseButton1Click:Connect(function() 
    			targetSpeed = math.max(1, targetSpeed - 5)
    			update()
    		end)
    		plus.MouseButton1Click:Connect(function() 
    			targetSpeed += 5
    			update()
    		end)
		end

		local function destroySpeedGui()
    		if speedGui then speedGui:Destroy(); speedGui = nil end
		end

		-- hip height slider
		local hipGui
		local function buildHipGui()
    		hipGui                 = Instance.new("Frame", mainFrm)
   			hipGui.Size            = UDim2.new(0.9, 0, 0.12, 0)
    		hipGui.Position        = UDim2.new(0.05, 0, 0.91, 0)
    		hipGui.BackgroundColor3= Color3.fromRGB(45,45,45)

    		local minus           = Instance.new("TextButton", hipGui)
    		minus.Size            = UDim2.new(0.25, 0, 1, 0)
    		minus.Text            = "-5"
    		minus.TextScaled      = true
    		minus.Font            = Enum.Font.SourceSans
    		minus.BackgroundColor3= Color3.fromRGB(120,0,0)
    		minus.TextColor3      = Color3.new(1,1,1)

    		local plus            = minus:Clone()
    		plus.Parent           = hipGui
    		plus.Text             = "+5"
    		plus.Position         = UDim2.new(0.75, 0, 0, 0)
    		plus.BackgroundColor3 = Color3.fromRGB(0,120,0)

    		local label           = Instance.new("TextLabel", hipGui)
    		label.Size            = UDim2.new(0.5, 0, 1, 0)
    		label.Position        = UDim2.new(0.25,0,0,0)
    		label.BackgroundTransparency = 1
    		label.Font            = Enum.Font.SourceSans
    		label.TextScaled      = true
    		label.TextColor3      = Color3.new(1,1,1)

    		local function update() 
    			label.Text = "Hip: "..targetHipHeight
    			humanoid.HipHeight = targetHipHeight
    		end
    		update()

    		minus.MouseButton1Click:Connect(function() 
    			targetHipHeight = targetHipHeight - 5
    			update()
    		end)
    		plus.MouseButton1Click:Connect(function() 
    			targetHipHeight = targetHipHeight + 5
    			update()
    		end)
		end

		local function destroyHipGui()
    		if hipGui then hipGui:Destroy(); hipGui = nil end
		end

		speedBtn.MouseButton1Click:Connect(function()
    		nextFrame(function()
        		speedEnabled = _speedToggleChk()

        		if speedEnabled then
					baseSpeed   = humanoid.WalkSpeed 
            		targetSpeed = baseSpeed + 5
           			buildSpeedGui()
					print("[HL] Speed Changer enabled")
            		popHelper("Speed Changer ON – use  - / +  to adjust.")
        		else
            		destroySpeedGui()
					targetSpeed = baseSpeed
					speedMultiplier = 1
					print("[HL] Speed Changer disabled")
        		end
    		end)
		end)

		hipBtn.MouseButton1Click:Connect(function()
    		nextFrame(function()
        		hipHeightEnabled = _hipToggleChk()

        		if hipHeightEnabled then
					baseHipHeight   = humanoid.HipHeight 
            		targetHipHeight = baseHipHeight + 5
           			buildHipGui()
					print("[HL] Hip Height enabled")
            		popHelper("Hip Height ON – use K to toggle, - / +  to adjust.")
        		else
            		destroyHipGui()
					humanoid.HipHeight = baseHipHeight
					targetHipHeight = baseHipHeight
					print("[HL] Hip Height disabled")
        		end
    		end)
		end)

		-- wire pop‑ups to the two main toggles 
		_shootBtn.MouseButton1Click:Connect(function()
    		nextFrame(function()
        		if isAutoShoot() then
            		popHelper("Auto Shoot ON – first green legit, then press Q to auto‑green.")
        		end
    		end)
		end)

		_guardBtn.MouseButton1Click:Connect(function()
    		nextFrame(function()
        		if isAutoGuard() then
            		popHelper("Auto Guard ON – press L to set hoop, then B to guard.")
        		end
    		end)
		end)

		--input
		local moveKeys = {W=true, A=true, S=true, D=true}

		UIS.InputBegan:Connect(function(inp, gp)
    		if gp then return end

    		-- movement detection pauses auto systems
    		if moveKeys[inp.KeyCode.Name] then
        		keysDown[inp.KeyCode] = true
        		autoPaused            = true
    		end

    		-- mark hoop centre
    		if inp.KeyCode == Enum.KeyCode.L then
        		hoopPos = HRP.Position
        		_G.HL_HoopPosition = hoopPos
        		warn("Hoop position set.")
    		end

    		-- toggle guard
    		if inp.KeyCode == Enum.KeyCode.B and isAutoGuard() then
        		if not hoopPos then warn("[HL] Set hoop position first with L") return end
       			guardEnabled = not guardEnabled
				autoPaused = false
        		warn("[HL] Guard " .. (guardEnabled and "ON" or "OFF"))
    		end

    		-- toggle hip height
    		if inp.KeyCode == Enum.KeyCode.K and hipHeightEnabled then
    			if targetHipHeight == baseHipHeight then
    				targetHipHeight = baseHipHeight + 10
    				humanoid.HipHeight = targetHipHeight
    				warn("[HL] Hip Height raised")
    			else
    				humanoid.HipHeight = baseHipHeight
    				targetHipHeight = baseHipHeight
    				warn("[HL] Hip Height reset")
    			end
    		end

			--quickshot
    		if inp.KeyCode == Enum.KeyCode.Q and isAutoShoot() then
        		local shoot = Replicated:WaitForChild("Remotes"):WaitForChild("Shoot")
        		shoot:FireServer(0, "Starting", "up", false, 0, 0)
        		task.wait(0.5)
        		shoot:FireServer(100000, "Ending", "up", false, 0, 0)
			end
		end)

		UIS.InputEnded:Connect(function(inp)
    		if moveKeys[inp.KeyCode.Name] then
        		keysDown[inp.KeyCode] = nil
        		autoPaused            = next(keysDown) ~= nil
    		end
		end)

		--auto block
		local IGNORE_IDS = {
    		["913402848"] = true, ["10779904378"] = true, ["507766388"] = true, ["507766666"] = true,
    		["507765644"] = true, ["6954982157"] = true, ["6958914473"] = true, ["6958910778"] = true,
    		["7104836507"] = true, ["7015176518"] = true, ["6954967857"] = true, ["7015179264"] = true,
    		["17385814388"] = true, ["7018040999"] = true, ["17248159181"] = true, ["6983005836"] = true,
    		["6983006816"] = true, ["7104680693"] = true, ["7015170849"] = true, ["7137683340"] = true,
    		["7141677280"] = true, ["7141671540"] = true, ["7141675434"] = true, ["7138142323"] = true,
    		["7138147226"] = true, ["7141673369"] = true, ["7141670372"] = true, ["7141668871"] = true,
    		["7138135461"] = true, ["17324112658"] = true, ["7018045141"] = true, ["17248117055"] = true,
    		["7137687203"] = true, ["17286443815"] = true, ["7015173681"] = true, ["17385803916"] = true,
    		["17286449846"] = true, ["7137691083"] = true, ["7141720088"] = true, ["7101474250"] = true,
    		["7101477503"] = true, ["17324137001"] = true, ["7070741098"] = true, ["7070742180"] = true,
			["7070847016"] = true, ["7070849254"] = true, ["7070854952"] = true, ["7225282783"] = true,
			["7228952358"] = true, ["7492798429"] = true, ["7492879219"] = true, ["7500966770"] = true,
			["11110177113"] = true, ["17284820672"] = true, ["17297402464"] = true,
		}

		local function animId(track)
    		return tostring(track.Animation.AnimationId):match("%d+") or "0"
		end

		local function burstJump()
    		for _=1,4 do
        		VIM:SendKeyEvent(true, Enum.KeyCode.Space, false, game)
        		RS.Heartbeat:Wait()
        		VIM:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
    		end
		end

		local queueJump = false

		-- check queue each render
		RS:BindToRenderStep("HL_Block", Enum.RenderPriority.First.Value, function()
    		if queueJump and isAutoBlock() then
        		queueJump = false
        		burstJump()
    		end
		end)

		local function watch(plr)
    		local hum = plr.Character and plr.Character:FindFirstChildOfClass("Humanoid")
    		if not hum then return end
    		local animator = hum:FindFirstChildOfClass("Animator") or hum:WaitForChild("Animator")
    		animator.AnimationPlayed:Connect(function(track)
        		if plr == player then return end
        		if IGNORE_IDS[animId(track)] then return end
        		local root = hum.RootPart or hum.Parent:FindFirstChild("HumanoidRootPart")
        		if root and (root.Position - HRP.Position).Magnitude <= 15 then
            		queueJump = true
        		end
    		end)
		end

		for _, p in ipairs(Players:GetPlayers()) do watch(p) end
		Players.PlayerAdded:Connect(function(p)
    		p.CharacterAdded:Connect(function() 
				watch(p) 
			end)
		end)

		--main loop
		RS.RenderStepped:Connect(function()
			local ok, err = pcall(function()
    			--wall bounce
    			if hoopPos then
        			local diff = HRP.Position - hoopPos
        			if diff.Magnitude < 12 then
            			local dir      = diff.Unit
            			local vel      = HRP.AssemblyLinearVelocity
            			local inward   = vel:Dot(-dir)
            			if inward > 0 then
                			local corrected = vel + dir * inward
                			HRP.AssemblyLinearVelocity = Vector3.new(corrected.X, vel.Y, corrected.Z)
            			end
        			end
    			end

				--acquire guard target
    			if guardEnabled and not autoPaused then
        			local bestDist = math.huge
        			targetPart     = nil
        			for _, p in ipairs(Players:GetPlayers()) do
            			if p ~= player and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then
                			local d = (p.Character.HumanoidRootPart.Position - HRP.Position).Magnitude
                			if d < bestDist then
                    			bestDist = d
                    			targetPart = p.Character.HumanoidRootPart
                			end
            			end
        			end
        			_G.HL_TargetPart = targetPart
   				end

				if guardEnabled and targetPart and hoopPos and not autoPaused then
					local dir = (targetPart.Position - hoopPos).Unit
					local guardPos = targetPart.Position - dir * guardDistance
					guardPos = Vector3.new(guardPos.X, HRP.Position.Y, guardPos.Z)

					local moveDirection = (guardPos - HRP.Position)
					local distance = moveDirection.Magnitude

					if distance > 0.1 then
						moveDirection = moveDirection.Unit
					else
						moveDirection = Vector3.zero
					end

					-- Calculate proper guard speed
					local baseSpeed = (targetPart.AssemblyLinearVelocity.Magnitude > 1 and targetPart.AssemblyLinearVelocity.Magnitude or 10)
					local guardSpeed = baseSpeed * speedMultiplier

					-- Ensure we don't ever crawl
					if guardSpeed < 999 then
						guardSpeed = 200
					end

					-- Apply the force
					bodyVelocity.MaxForce = Vector3.new(1e5, 0, 1e5)
					bodyVelocity.Velocity = moveDirection * guardSpeed

					if guardMode == "Normal" then
						-- Basic movement
						local smallPush = moveDirection * (guardSpeed * 0.1)
						HRP.AssemblyLinearVelocity = Vector3.new(smallPush.X, HRP.AssemblyLinearVelocity.Y, smallPush.Z)

					elseif guardMode == "Pro" then
						-- Boost with a light push
						local push = moveDirection * (guardSpeed * 0.35)
						HRP.AssemblyLinearVelocity = Vector3.new(push.X, HRP.AssemblyLinearVelocity.Y, push.Z)

					elseif guardMode == "Hacker" then
						-- Full override, aggressive pursuit
						local hackerVelocity = moveDirection * (guardSpeed * 1.75)
						bodyVelocity.Velocity = Vector3.zero -- disable bodyVelocity interference
						HRP.AssemblyLinearVelocity = Vector3.new(hackerVelocity.X, HRP.AssemblyLinearVelocity.Y, hackerVelocity.Z)
					end
				else
					bodyVelocity.Velocity = Vector3.zero
				end
				-- Always-active speed system
				if speedEnabled then
					local moveDir = humanoid.MoveDirection
					if moveDir.Magnitude > 0 then
						local finalSpeed = targetSpeed * speedMultiplier
						
						-- Apply linear velocity
						local vel = HRP.AssemblyLinearVelocity
						local newVel = moveDir.Unit * finalSpeed
						HRP.AssemblyLinearVelocity = Vector3.new(newVel.X, vel.Y, newVel.Z)
						
						-- Apply body velocity if not in guard mode
						if not guardEnabled then
							bodyVelocity.Velocity = Vector3.new(newVel.X, 0, newVel.Z)
						end
					elseif not guardEnabled then
						bodyVelocity.Velocity = Vector3.new(0, 0, 0)
					end
				end

				-- Update global variables for Pro/Hacker modes
				_G.HL_GuardDistance = guardDistance
			end)

			if not ok then
        		warn("[HL‑ERROR]", err)
			end
		end)
		
		-- Character respawn handling
		player.CharacterAdded:Connect(function(newChar)
			character = newChar
			humanoid = character:WaitForChild("Humanoid")
			HRP = character:WaitForChild("HumanoidRootPart")
			
			-- Recreate body velocity
			if bodyVelocity then bodyVelocity:Destroy() end
			bodyVelocity = Instance.new("BodyVelocity")
			bodyVelocity.MaxForce = Vector3.new(4000, 0, 4000)
			bodyVelocity.Velocity = Vector3.new(0, 0, 0)
			bodyVelocity.Parent = HRP
			
			baseSpeed = humanoid.WalkSpeed
			if not speedEnabled then targetSpeed = baseSpeed end
			
			baseHipHeight = humanoid.HipHeight
			if not hipHeightEnabled then targetHipHeight = baseHipHeight end
		end)
    end)
end

uniBtn.MouseButton1Click:Connect(function()
    selector:Destroy()
    loadUniversal()
end)

hoopBtn.MouseButton1Click:Connect(function()
    selector:Destroy()
    loadHoops()
end)

Features & Information

Universal Basketball Script. version: 0.2 [ FEATURES ] Universal: Auto Guard Auto Green Indicator Distance Hoops Life: Auto Green Auto Guard (with difficulty settings) Auto Block (still kinda wonky) [How to use] (only explains for features that dont have a tutorial in game) Universal: Indicator Distance: 1. Toggle On 2. enemy < 10 (studs): red; enemy > 10: green Hoops Life: Future Updates: Auto dribble. (uses z,x,c ; shiftlock .... etc) Auto dunk. (presses spacebar when near hoop position) HipHeight. (become uncontestable) etc. These "Updates" are very simple to implement yourself. So Go Ahead! Special Thanks To: j5draco (Hoops Life Auto Green) Script made by irdk, Discord: idrk_scriptblox
#Basketball#Hoops Life#Auto Green#Basketball Zero#Universal

Community Comments (5)

Carterjam28YTCarterjam28YTJul 15, 2025

ez skid

IrdkIrdkJul 16, 2025(edited)

Updated. Auto guard was optimized, and next game will be highschool hoops

ReadyopeReadyopeJul 28, 2025

Is there a mobile version??

IrdkIrdkJul 30, 2025

@Readyope Not currently, working on it.

mysopw2wwmysopw2wwOct 27, 2025

add legit auto guard

More Scripts for Universal Scripts