-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aa7ccb06850d730d8168606"))() end) end) --[[rscripts:analytics:end]] local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local VirtualInputManager = game:GetService("VirtualInputManager") local LocalPlayer = Players.LocalPlayer local BALL_NAME = "Ball" local DEFAULT_STEAL_DISTANCE = 3 local STEAL_SLIDE_INTERVAL = 0.12 local GK_ROLE_NAMES = {"gk", "goalkeeper", "goal keeper", "keeper"} local GK_TP_OFFSET = Vector3.new(0, 2.5, 0) local GK_DIVE_DELAY = 0.30 -- State & Configuration local isStealing = false local autoStealEnabled = false local currentKeybind = Enum.KeyCode.G local isListeningForKey = false local teamCheckEnabled = true local currentHighlight = nil -- ========================================== -- [ HELPER & TEAM CHECK FUNCTIONS ] -- ========================================== local function getCharacter() local char = LocalPlayer.Character if not char then return nil, nil, nil end local hum = char:FindFirstChildOfClass("Humanoid") local hrp = char:FindFirstChild("HumanoidRootPart") return char, hum, hrp end local function localHasBall() local char = LocalPlayer.Character if not char then return false end local ball = char:FindFirstChild(BALL_NAME, true) return ball ~= nil and ball:IsA("BasePart") end local function isTeammate(plr) if not plr or plr == LocalPlayer then return true end if LocalPlayer.Team and plr.Team then return LocalPlayer.Team == plr.Team end return false end local function getRoleName() local roleObj = LocalPlayer:FindFirstChild("Role") or (LocalPlayer:FindFirstChild("Values") and LocalPlayer.Values:FindFirstChild("Role")) if roleObj and roleObj.Value ~= nil then return string.lower(tostring(roleObj.Value)) end return "" end local function localIsGoalkeeper() local role = string.gsub(getRoleName(), "%s+", " ") for _, name in ipairs(GK_ROLE_NAMES) do if role == name then return true end end return false end local function sendVirtualKey(keyCode) if not VirtualInputManager then return end pcall(function() VirtualInputManager:SendKeyEvent(true, keyCode, false, game) task.wait() VirtualInputManager:SendKeyEvent(false, keyCode, false, game) end) end local function resolveOwnGoalPart() local isHome = LocalPlayer.Team and string.lower(LocalPlayer.Team.Name) == "home" local goalName = isHome and "PlayerOneGoalArea" or "PlayerTwoGoalArea" local goal = workspace:FindFirstChild(goalName) if not goal then goalName = isHome and "PlayerOneGoal" or "PlayerTwoGoal" local map = workspace:FindFirstChild("Map") local goalModel = map and map:FindFirstChild(goalName) if goalModel then goal = goalModel:FindFirstChild("ScoreHitbox") or goalModel:FindFirstChild("Score") end end if goal then if goal:IsA("BasePart") then return goal end if goal:IsA("Model") then return goal.PrimaryPart or goal:FindFirstChildWhichIsA("BasePart", true) end end return nil end local function findBallTarget() for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer and plr.Character then if not (teamCheckEnabled and isTeammate(plr)) then local ball = plr.Character:FindFirstChild(BALL_NAME, true) local hrp = plr.Character:FindFirstChild("HumanoidRootPart") if ball and hrp then return hrp, plr end end end end local freeBall = workspace:FindFirstChild(BALL_NAME) if freeBall and freeBall:IsA("BasePart") then return freeBall, nil end return nil, nil end -- ========================================== -- [ BALL CARRIER HIGHLIGHT (ESP) ] -- ========================================== local function updateBallCarrierHighlight() local carrierChar = nil local carrierPlr = nil for _, plr in ipairs(Players:GetPlayers()) do if plr.Character then local ball = plr.Character:FindFirstChild(BALL_NAME, true) if ball then carrierChar = plr.Character carrierPlr = plr break end end end if carrierChar and carrierPlr then if not currentHighlight or currentHighlight.Parent ~= carrierChar then if currentHighlight then currentHighlight:Destroy() end currentHighlight = Instance.new("Highlight") currentHighlight.Name = "BallCarrierHighlight" currentHighlight.FillTransparency = 0.4 currentHighlight.OutlineTransparency = 0 currentHighlight.Parent = carrierChar end if isTeammate(carrierPlr) then currentHighlight.FillColor = Color3.fromRGB(0, 255, 100) currentHighlight.OutlineColor = Color3.fromRGB(255, 255, 255) else currentHighlight.FillColor = Color3.fromRGB(255, 50, 50) currentHighlight.OutlineColor = Color3.fromRGB(255, 255, 255) end else if currentHighlight then currentHighlight:Destroy() currentHighlight = nil end end end RunService.RenderStepped:Connect(updateBallCarrierHighlight) -- ========================================== -- [ MAIN ACTION: STEAL BALL ] -- ========================================== local function triggerStealBallAction() if isStealing or localHasBall() then return end local _, _, rootPart = getCharacter() if not rootPart then return end isStealing = true local savedCFrame = rootPart.CFrame task.spawn(function() local timeout = os.clock() + 15 while isStealing and not localHasBall() and (os.clock() < timeout) do local targetPart, targetPlayer = findBallTarget() if not targetPart then break end local isGK = localIsGoalkeeper() local targetIsTeammate = targetPlayer and isTeammate(targetPlayer) if isGK and not targetIsTeammate then local ownGoal = resolveOwnGoalPart() if ownGoal then local _, _, currentRoot = getCharacter() if currentRoot then currentRoot.CFrame = CFrame.new(ownGoal.Position + GK_TP_OFFSET) task.wait(GK_DIVE_DELAY) sendVirtualKey(Enum.KeyCode.Q) end end local cycleTimeout = os.clock() + 1.0 local lastSlideTime = 0 while isStealing and not localHasBall() and (os.clock() < cycleTimeout) do local _, _, currentRoot = getCharacter() if not currentRoot then break end local currentTargetPart, _ = findBallTarget() if currentTargetPart then currentRoot.CFrame = CFrame.new(currentTargetPart.Position + Vector3.new(0, DEFAULT_STEAL_DISTANCE, 0)) if os.clock() - lastSlideTime >= STEAL_SLIDE_INTERVAL then sendVirtualKey(Enum.KeyCode.E) lastSlideTime = os.clock() end else break end RunService.Heartbeat:Wait() end else local _, _, currentRoot = getCharacter() if currentRoot and targetPart then currentRoot.CFrame = CFrame.new(targetPart.Position + Vector3.new(0, DEFAULT_STEAL_DISTANCE, 0)) sendVirtualKey(Enum.KeyCode.E) end task.wait(STEAL_SLIDE_INTERVAL) end RunService.Heartbeat:Wait() end local _, _, finalRoot = getCharacter() if finalRoot and savedCFrame then finalRoot.CFrame = savedCFrame end isStealing = false end) end -- ========================================== -- [ AUTOMATIC LOOP ] -- ========================================== RunService.Heartbeat:Connect(function() if autoStealEnabled and not isStealing and not localHasBall() then triggerStealBallAction() end end) -- ========================================== -- [ UI SETUP & DRAGGABLE LOGIC ] -- ========================================== local playerGui = LocalPlayer:WaitForChild("PlayerGui") local oldGui = playerGui:FindFirstChild("StealHubGui") if oldGui then oldGui:Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = "StealHubGui" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 220, 0, 190) mainFrame.Position = UDim2.new(0.5, -110, 0.4, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 30) mainFrame.BorderSizePixel = 0 mainFrame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 8) corner.Parent = mainFrame local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, 0, 0, 30) titleLabel.BackgroundColor3 = Color3.fromRGB(35, 35, 42) titleLabel.Text = " STEAL BALL HUB" titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Font = Enum.Font.SourceSansBold titleLabel.TextSize = 16 titleLabel.Parent = mainFrame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 8) titleCorner.Parent = titleLabel local keybindBtn = Instance.new("TextButton") keybindBtn.Size = UDim2.new(0.85, 0, 0, 30) keybindBtn.Position = UDim2.new(0.075, 0, 0.22, 0) keybindBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) keybindBtn.Text = "Steal Key: [" .. currentKeybind.Name .. "]" keybindBtn.TextColor3 = Color3.fromRGB(220, 220, 220) keybindBtn.Font = Enum.Font.SourceSansSemibold keybindBtn.TextSize = 14 keybindBtn.Parent = mainFrame local btnCorner1 = Instance.new("UICorner") btnCorner1.CornerRadius = UDim.new(0, 6) btnCorner1.Parent = keybindBtn local autoStealBtn = Instance.new("TextButton") autoStealBtn.Size = UDim2.new(0.85, 0, 0, 30) autoStealBtn.Position = UDim2.new(0.075, 0, 0.44, 0) autoStealBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) autoStealBtn.Text = "Auto Steal: OFF" autoStealBtn.TextColor3 = Color3.fromRGB(220, 220, 220) autoStealBtn.Font = Enum.Font.SourceSansSemibold autoStealBtn.TextSize = 14 autoStealBtn.Parent = mainFrame local btnCorner3 = Instance.new("UICorner") btnCorner3.CornerRadius = UDim.new(0, 6) btnCorner3.Parent = autoStealBtn local teamCheckBtn = Instance.new("TextButton") teamCheckBtn.Size = UDim2.new(0.85, 0, 0, 30) teamCheckBtn.Position = UDim2.new(0.075, 0, 0.66, 0) teamCheckBtn.BackgroundColor3 = Color3.fromRGB(40, 120, 60) teamCheckBtn.Text = "Team Check: ON" teamCheckBtn.TextColor3 = Color3.fromRGB(255, 255, 255) teamCheckBtn.Font = Enum.Font.SourceSansSemibold teamCheckBtn.TextSize = 14 teamCheckBtn.Parent = mainFrame local btnCorner2 = Instance.new("UICorner") btnCorner2.CornerRadius = UDim.new(0, 6) btnCorner2.Parent = teamCheckBtn -- Logic Draggable local function enableDragging(frame) local dragging, dragInput, dragStart, startPos frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) end enableDragging(mainFrame) keybindBtn.MouseButton1Click:Connect(function() isListeningForKey = true keybindBtn.Text = "Press any key..." keybindBtn.BackgroundColor3 = Color3.fromRGB(200, 120, 0) end) autoStealBtn.MouseButton1Click:Connect(function() autoStealEnabled = not autoStealEnabled if autoStealEnabled then autoStealBtn.Text = "Auto Steal: ON" autoStealBtn.BackgroundColor3 = Color3.fromRGB(40, 160, 80) else autoStealBtn.Text = "Auto Steal: OFF" autoStealBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) isStealing = false end end) teamCheckBtn.MouseButton1Click:Connect(function() teamCheckEnabled = not teamCheckEnabled if teamCheckEnabled then teamCheckBtn.Text = "Team Check: ON" teamCheckBtn.BackgroundColor3 = Color3.fromRGB(40, 120, 60) else teamCheckBtn.Text = "Team Check: OFF" teamCheckBtn.BackgroundColor3 = Color3.fromRGB(150, 40, 40) end end) UserInputService.InputBegan:Connect(function(input, gameProcessed) if isListeningForKey then if input.UserInputType == Enum.UserInputType.Keyboard then currentKeybind = input.KeyCode keybindBtn.Text = "Steal Key: [" .. currentKeybind.Name .. "]" keybindBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 55) isListeningForKey = false end return end if not gameProcessed and input.KeyCode == currentKeybind then triggerStealBallAction() end end)