local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local localPlayer = Players.LocalPlayer local localName = localPlayer.Name local button = localPlayer.PlayerGui.Hotbar.Block local mb1up = button.MouseButton1Up local gfs = type(firesignal) == "function" and firesignal or type(getconnections) == "function" and getconnections local useFiresignal = gfs == firesignal local ballsFolder = workspace.Balls local colorRed = Color3.fromRGB(255, 30, 30) local colorGray = Color3.fromRGB(128, 128, 128) if not gfs then game:GetService("StarterGui"):SetCore("SendNotification", { Title = "Error", Text = "Your executor is not supported", Duration = 5, }) return end local targetedBall = nil local posBall = nil local root = nil local lastRadius = 15 local lastRadiusSq = 225 local fired = false local spamConnection = nil local sphere = Instance.new("SphereHandleAdornment") sphere.Radius = 15 sphere.Color3 = colorGray sphere.AlwaysOnTop = true sphere.Transparency = 0.75 sphere.Parent = workspace local function fireMB1Up() if useFiresignal then gfs(mb1up) else for _, c in gfs(mb1up) do c:Fire() end end end local screenGui = Instance.new("ScreenGui") screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.Parent = localPlayer.PlayerGui local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 120, 0, 36) frame.Position = UDim2.new(0.5, -60, 0, 20) frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) frame.BorderSizePixel = 0 frame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 6) corner.Parent = frame local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(255, 255, 255) stroke.Thickness = 1.5 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = frame local spamButton = Instance.new("TextButton") spamButton.Size = UDim2.new(1, 0, 1, 0) spamButton.BackgroundTransparency = 1 spamButton.TextColor3 = Color3.fromRGB(255, 255, 255) spamButton.Font = Enum.Font.GothamBold spamButton.TextSize = 14 spamButton.Text = "SPAM: OFF" spamButton.Parent = frame local function makeDraggable(f, handle) handle = handle or f local dragInput, dragStart, startPos handle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragInput = input dragStart = input.Position startPos = f.Position end end) handle.InputChanged:Connect(function(input) if dragInput and input == dragInput then local delta = input.Position - dragStart f.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) UserInputService.InputEnded:Connect(function(input) if input == dragInput then dragInput = nil end end) end makeDraggable(frame, spamButton) spamButton.Activated:Connect(function() if spamConnection then spamConnection:Disconnect() spamConnection = nil spamButton.Text = "SPAM: OFF" spamButton.TextColor3 = Color3.fromRGB(255, 255, 255) else spamButton.Text = "SPAM: ON" spamButton.TextColor3 = Color3.fromRGB(255, 80, 80) spamConnection = RunService.Heartbeat:Connect(function() fireMB1Up() end) end end) local handlerPool = {} local ballHandlers = {} local function onTargetChanged(ball) if ball:GetAttribute("target") == localName then targetedBall = ball elseif targetedBall == ball then targetedBall = nil fired = false end sphere.Color3 = targetedBall and colorRed or colorGray end local function trackBall(ball) local h = table.remove(handlerPool) if h then h.ball = ball else h = { ball = ball } h.fn = function() onTargetChanged(h.ball) end end ballHandlers[ball] = h onTargetChanged(ball) ball:GetAttributeChangedSignal("target"):Connect(h.fn) end local function untrackBall(ball) local h = ballHandlers[ball] if not h then return end ballHandlers[ball] = nil h.ball = nil handlerPool[#handlerPool + 1] = h end local children = ballsFolder:GetChildren() for _, obj in children do trackBall(obj) end posBall = children[1] ballsFolder.ChildAdded:Connect(function(obj) trackBall(obj) if not posBall then posBall = obj end end) ballsFolder.ChildRemoved:Connect(function(obj) untrackBall(obj) if targetedBall == obj then targetedBall = nil fired = false sphere.Color3 = colorGray end if posBall == obj then posBall = next(ballHandlers) end end) localPlayer.CharacterAdded:Connect(function(char) root = char:WaitForChild("HumanoidRootPart") sphere.Adornee = root end) if localPlayer.Character then root = localPlayer.Character:WaitForChild("HumanoidRootPart") sphere.Adornee = root end RunService.Heartbeat:Connect(function() if not root or not posBall then return end local radius = 15 + posBall.AssemblyLinearVelocity.Magnitude * 0.15 if radius ~= lastRadius then sphere.Radius = radius lastRadius = radius lastRadiusSq = radius * radius end if not targetedBall then return end if targetedBall:GetAttribute("target") ~= localName then fired = false return end if fired then return end local diff = posBall.Position - root.Position if diff:Dot(diff) <= lastRadiusSq then fireMB1Up() fired = true end end)