-- LocalScript → put inside StarterPlayerScripts or StarterGui local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") -- ──────────────────────────────────────── -- Config -- ──────────────────────────────────────── local REMOTE_NAME = "ChatEvent" -- change if different local LONG_STRING = string.rep("H", 2000) -- adjust length if needed (Roblox has limits ~200k chars) local args = { LONG_STRING, 4505115132.5 } -- ──────────────────────────────────────── -- Create GUI -- ──────────────────────────────────────── local screenGui = Instance.new("ScreenGui") screenGui.Name = "SpamGui" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 140, 0, 80) frame.Position = UDim2.new(0.5, -70, 0.85, -100) -- starts near bottom center frame.BackgroundColor3 = Color3.fromRGB(30, 30, 35) frame.BorderSizePixel = 0 frame.ClipsDescendants = true frame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = frame local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(100, 100, 255) stroke.Thickness = 2 stroke.Transparency = 0.4 stroke.Parent = frame local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 24) title.BackgroundTransparency = 1 title.Text = "Spam Button" title.TextColor3 = Color3.fromRGB(220, 220, 255) title.TextSize = 15 title.Font = Enum.Font.GothamBold title.Parent = frame local button = Instance.new("TextButton") button.Size = UDim2.new(0.9, 0, 0, 44) button.Position = UDim2.new(0.05, 0, 0, 28) button.BackgroundColor3 = Color3.fromRGB(60, 60, 180) button.Text = "FIRE (H spam)" button.TextColor3 = Color3.new(1,1,1) button.TextSize = 18 button.Font = Enum.Font.GothamSemibold button.AutoButtonColor = false button.Parent = frame local btnCorner = Instance.new("UICorner") btnCorner.CornerRadius = UDim.new(0, 10) btnCorner.Parent = button -- ──────────────────────────────────────── -- Draggable logic (works on mobile + PC) -- ──────────────────────────────────────── local dragging = false local dragInput = nil local dragStart = nil local startPos = nil local function updateInput(input) local delta = input.Position - dragStart local newPosX = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) frame.Position = newPosX end 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 updateInput(input) end end) -- ──────────────────────────────────────── -- Button press (works with tap on mobile) -- ──────────────────────────────────────── local function fireSpam() local remote = ReplicatedStorage:FindFirstChild(REMOTE_NAME) if remote and remote:IsA("RemoteEvent") then remote:FireServer(unpack(args)) -- Optional: visual feedback button.BackgroundColor3 = Color3.fromRGB(100, 220, 100) task.wait(0.15) button.BackgroundColor3 = Color3.fromRGB(60, 60, 180) end end button.MouseButton1Click:Connect(fireSpam) button.Activated:Connect(fireSpam) -- better mobile support -- Optional: hold to spam (uncomment if wanted) --[[ local holding = false button.MouseButton1Down:Connect(function() holding = true end) button.MouseButton1Up:Connect(function() holding = false end) button.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.Touch then holding = true end end) button.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.Touch then holding = false end end) task.spawn(function() while true do if holding then fireSpam() task.wait(0.08) -- adjust spam rate end task.wait() end end) --]]