Brookhaven 🏡RP Script – GoaT Spammer - Verified script for Brookhaven 🏡RP
Key Required

Brookhaven 🏡RP Script – GoaT Spammer

Brookhaven 🏡RPxovaraxovara 1.6K views 2.4K executesUpdated Oct 22, 2026
Unrated
00
Lua Script•922 lines (34131 chars)
-- GOAT SPAMMER — Final Executable Script
-- Executor ready

if not game:IsLoaded() then game.Loaded:Wait() end
task.wait(0.5)

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextChatService = game:GetService("TextChatService")
local VirtualUser = game:GetService("VirtualUser")

local player = Players.LocalPlayer
if not player then return end
local playerGui = player:WaitForChild("PlayerGui", 10)
if not playerGui then return end

-- ============================================
-- BUILT-IN ANTI-AFK SYSTEM
-- ============================================
local antiAfkConn = player.Idled:Connect(function()
	VirtualUser:CaptureController()
	VirtualUser:ClickButton2(Vector2.new())
end)

-- ============================================
-- AUTO-DETECT / SHUTDOWN
-- ============================================
local SHUTDOWN_FLAG = "_GoatSpammerActive"
local SHUTDOWN_BINDABLE = "GoatShutdownSignal"

local existingBindable = playerGui:FindFirstChild(SHUTDOWN_BINDABLE)
if existingBindable then
	pcall(function() existingBindable:Fire() end)
	task.wait(0.15)
	existingBindable:Destroy()
end
if playerGui:FindFirstChild("GoatSpammerUI") then
	playerGui.GoatSpammerUI:Destroy()
end

_G[SHUTDOWN_FLAG] = true
local shutdownBindable = Instance.new("BindableEvent")
shutdownBindable.Name = SHUTDOWN_BINDABLE
shutdownBindable.Parent = playerGui

-- ============================================
-- MAIN GUI
-- ============================================
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "GoatSpammerUI"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = playerGui

-- ============================================
-- SOUND EFFECTS
-- ============================================
local openSound = Instance.new("Sound")
openSound.Name = "OpenSound"
openSound.SoundId = "rbxassetid://148752521"
openSound.Volume = 1
openSound.Parent = screenGui

local closeSound = Instance.new("Sound")
closeSound.Name = "CloseSound"
closeSound.SoundId = "rbxassetid://5022088140"
closeSound.Volume = 1
closeSound.Parent = screenGui

local isEnabled = false
local isOpen = false
local isShuttingDown = false
local MIN_DELAY = 2
local MAX_DELAY = 15

local FRAME_W = 380
local FRAME_H = 260

local OUTLINE_COLOR = Color3.fromRGB(0, 0, 0)

-- ============ MAIN FRAME ============
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, FRAME_W, 0, FRAME_H)
mainFrame.Position = UDim2.new(0.5, -FRAME_W/2, 0.5, -FRAME_H/2)
mainFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
mainFrame.BackgroundTransparency = 0.35
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.ClipsDescendants = false
mainFrame.Visible = false
mainFrame.Parent = screenGui

local bgImage = Instance.new("ImageLabel")
bgImage.Name = "BackgroundImage"
bgImage.Size = UDim2.new(1, 0, 1, 0)
bgImage.Position = UDim2.new(0, 0, 0, 0)
bgImage.BackgroundTransparency = 1
bgImage.Image = "rbxassetid://127496834253333"
bgImage.ScaleType = Enum.ScaleType.Crop
bgImage.ZIndex = 0
bgImage.Parent = mainFrame

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 14)
mainCorner.Parent = mainFrame

local mainStroke = Instance.new("UIStroke")
mainStroke.Color = OUTLINE_COLOR
mainStroke.Thickness = 2
mainStroke.Transparency = 0
mainStroke.Parent = mainFrame

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 35)
title.Position = UDim2.new(0, 0, 0, 5)
title.BackgroundTransparency = 1
title.Text = "GoaT Spammer"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextSize = 22
title.Font = Enum.Font.GothamBold
title.ZIndex = 2
title.Parent = mainFrame

local titleGlow = Instance.new("UIStroke")
titleGlow.Color = OUTLINE_COLOR
titleGlow.Thickness = 2
titleGlow.Transparency = 0.3
titleGlow.Parent = title

local separator = Instance.new("Frame")
separator.Size = UDim2.new(1, -20, 0, 1)
separator.Position = UDim2.new(0, 10, 0, 40)
separator.BackgroundColor3 = OUTLINE_COLOR
separator.BackgroundTransparency = 0.2
separator.BorderSizePixel = 0
separator.ZIndex = 2
separator.Parent = mainFrame

-- ============================================
-- TOP ROW (TextBox & Delay)
-- ============================================
local textBoxBg = Instance.new("Frame")
textBoxBg.Size = UDim2.new(0, 200, 0, 35)
textBoxBg.Position = UDim2.new(0, 15, 0, 50)
textBoxBg.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
textBoxBg.BackgroundTransparency = 0.45
textBoxBg.BorderSizePixel = 0
textBoxBg.ZIndex = 2
textBoxBg.Parent = mainFrame
local textBoxBgCorner = Instance.new("UICorner") textBoxBgCorner.CornerRadius = UDim.new(0, 8) textBoxBgCorner.Parent = textBoxBg
local textBoxBgStroke = Instance.new("UIStroke") textBoxBgStroke.Color = OUTLINE_COLOR textBoxBgStroke.Thickness = 1.5 textBoxBgStroke.Transparency = 0 textBoxBgStroke.Parent = textBoxBg

local freeTextBox = Instance.new("TextBox")
freeTextBox.Size = UDim2.new(1, -16, 1, 0)
freeTextBox.Position = UDim2.new(0, 8, 0, 0)
freeTextBox.BackgroundTransparency = 1
freeTextBox.Text = ""
freeTextBox.PlaceholderText = "Enter text to spam"
freeTextBox.TextColor3 = Color3.fromRGB(255, 255, 255)
freeTextBox.PlaceholderColor3 = Color3.fromRGB(200, 200, 200)
freeTextBox.TextSize = 14
freeTextBox.Font = Enum.Font.Gotham
freeTextBox.TextXAlignment = Enum.TextXAlignment.Left
freeTextBox.ClearTextOnFocus = false
freeTextBox.ZIndex = 3
freeTextBox.Parent = textBoxBg

local delayLabel = Instance.new("TextLabel")
delayLabel.Size = UDim2.new(0, 60, 0, 15)
delayLabel.Position = UDim2.new(0, 235, 0, 50)
delayLabel.BackgroundTransparency = 1
delayLabel.Text = "Delay (sec)"
delayLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
delayLabel.TextSize = 10
delayLabel.Font = Enum.Font.Gotham
delayLabel.TextXAlignment = Enum.TextXAlignment.Left
delayLabel.ZIndex = 2
delayLabel.Parent = mainFrame
local delayLabelStroke = Instance.new("UIStroke") delayLabelStroke.Color = OUTLINE_COLOR delayLabelStroke.Thickness = 1 delayLabelStroke.Transparency = 0.2 delayLabelStroke.Parent = delayLabel

local delayBoxBg = Instance.new("Frame")
delayBoxBg.Size = UDim2.new(0, 50, 0, 25)
delayBoxBg.Position = UDim2.new(0, 310, 0, 50)
delayBoxBg.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
delayBoxBg.BackgroundTransparency = 0.45
delayBoxBg.BorderSizePixel = 0
delayBoxBg.ZIndex = 2
delayBoxBg.Parent = mainFrame
local delayBoxBgCorner = Instance.new("UICorner") delayBoxBgCorner.CornerRadius = UDim.new(0, 6) delayBoxBgCorner.Parent = delayBoxBg
local delayBoxBgStroke = Instance.new("UIStroke") delayBoxBgStroke.Color = OUTLINE_COLOR delayBoxBgStroke.Thickness = 1.5 delayBoxBgStroke.Transparency = 0 delayBoxBgStroke.Parent = delayBoxBg

local delayBox = Instance.new("TextBox")
delayBox.Size = UDim2.new(1, 0, 1, 0)
delayBox.BackgroundTransparency = 1
delayBox.Text = "2"
delayBox.TextColor3 = Color3.fromRGB(255, 255, 255)
delayBox.TextSize = 12
delayBox.Font = Enum.Font.Gotham
delayBox.ZIndex = 3
delayBox.Parent = delayBoxBg

local sliderBg = Instance.new("Frame")
sliderBg.Size = UDim2.new(0, 80, 0, 4)
sliderBg.Position = UDim2.new(0, 235, 0, 80)
sliderBg.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
sliderBg.BackgroundTransparency = 0.2
sliderBg.BorderSizePixel = 0
sliderBg.ZIndex = 2
sliderBg.Parent = mainFrame
local sliderCorner = Instance.new("UICorner") sliderCorner.CornerRadius = UDim.new(1,0) sliderCorner.Parent = sliderBg
local sliderStroke = Instance.new("UIStroke") sliderStroke.Color = OUTLINE_COLOR sliderStroke.Thickness = 1 sliderStroke.Transparency = 0 sliderStroke.Parent = sliderBg

local sliderFill = Instance.new("Frame")
sliderFill.Size = UDim2.new(0, 0, 1, 0)
sliderFill.BackgroundColor3 = Color3.fromRGB(110, 200, 245)
sliderFill.BackgroundTransparency = 0.45
sliderFill.BorderSizePixel = 0
sliderFill.Parent = sliderBg
local sliderFillCorner = Instance.new("UICorner") sliderFillCorner.CornerRadius = UDim.new(1,0) sliderFillCorner.Parent = sliderFill

local sliderKnob = Instance.new("Frame")
sliderKnob.Size = UDim2.new(0, 12, 0, 12)
sliderKnob.Position = UDim2.new(0, -6, 0.5, -6)
sliderKnob.BackgroundColor3 = Color3.fromRGB(110, 200, 245)
sliderKnob.BackgroundTransparency = 0.3
sliderKnob.BorderSizePixel = 0
sliderKnob.ZIndex = 3
sliderKnob.Parent = sliderBg
local knobCorner = Instance.new("UICorner") knobCorner.CornerRadius = UDim.new(1,0) knobCorner.Parent = sliderKnob
local knobStroke = Instance.new("UIStroke") knobStroke.Color = OUTLINE_COLOR knobStroke.Thickness = 1 knobStroke.Transparency = 0 knobStroke.Parent = sliderKnob

local minTxt = Instance.new("TextLabel") minTxt.Size = UDim2.new(0,20,0,10) minTxt.Position = UDim2.new(0,235,0,85) minTxt.BackgroundTransparency = 1 minTxt.Text = "min" minTxt.TextSize = 8 minTxt.TextColor3 = Color3.fromRGB(220,220,220) minTxt.Font = Enum.Font.Gotham minTxt.ZIndex = 2 minTxt.Parent = mainFrame
local minTxtStroke = Instance.new("UIStroke") minTxtStroke.Color = OUTLINE_COLOR minTxtStroke.Thickness = 1 minTxtStroke.Transparency = 0.2 minTxtStroke.Parent = minTxt
local maxTxt = Instance.new("TextLabel") maxTxt.Size = UDim2.new(0,20,0,10) maxTxt.Position = UDim2.new(0,295,0,85) maxTxt.BackgroundTransparency = 1 maxTxt.Text = "max" maxTxt.TextSize = 8 maxTxt.TextColor3 = Color3.fromRGB(220,220,220) maxTxt.Font = Enum.Font.Gotham maxTxt.ZIndex = 2 maxTxt.Parent = mainFrame
local maxTxtStroke = Instance.new("UIStroke") maxTxtStroke.Color = OUTLINE_COLOR maxTxtStroke.Thickness = 1 maxTxtStroke.Transparency = 0.2 maxTxtStroke.Parent = maxTxt

local function updateSliderFromText()
	local val = tonumber(delayBox.Text) or 2
	if val < MIN_DELAY then val = MIN_DELAY end
	if val > MAX_DELAY then val = MAX_DELAY end
	local alpha = (val - MIN_DELAY) / (MAX_DELAY - MIN_DELAY)
	sliderFill.Size = UDim2.new(alpha, 0, 1, 0)
	sliderKnob.Position = UDim2.new(alpha, -6, 0.5, -6)
end

delayBox.FocusLost:Connect(function()
	local n = tonumber(delayBox.Text)
	if not n or n < MIN_DELAY then delayBox.Text = tostring(MIN_DELAY)
	elseif n > MAX_DELAY then delayBox.Text = tostring(MAX_DELAY) end
	updateSliderFromText()
end)

local draggingSlider = false

local function updateSliderFromInput(input)
	local relX = math.clamp(input.Position.X - sliderBg.AbsolutePosition.X, 0, sliderBg.AbsoluteSize.X)
	local alpha = relX / sliderBg.AbsoluteSize.X
	local val = MIN_DELAY + (alpha * (MAX_DELAY - MIN_DELAY))
	val = math.round(val)
	delayBox.Text = tostring(val)
	updateSliderFromText()
end

sliderBg.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		draggingSlider = true
		mainFrame.Active = false
		updateSliderFromInput(input)
	end
end)

UserInputService.InputChanged:Connect(function(input)
	if draggingSlider and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
		updateSliderFromInput(input)
	end
end)

UserInputService.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		if draggingSlider then
			draggingSlider = false
			mainFrame.Active = true
		end
	end
end)

-- ============================================
-- LEFT SECTION (Symbol Grid)
-- ============================================
local gridContainer = Instance.new("Frame")
gridContainer.Size = UDim2.new(0, 200, 0, 110)
gridContainer.Position = UDim2.new(0, 15, 0, 100)
gridContainer.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
gridContainer.BackgroundTransparency = 0.45
gridContainer.BorderSizePixel = 0
gridContainer.ZIndex = 2
gridContainer.Parent = mainFrame
local gridCorner = Instance.new("UICorner") gridCorner.CornerRadius = UDim.new(0, 10) gridCorner.Parent = gridContainer
local gridStroke = Instance.new("UIStroke") gridStroke.Color = OUTLINE_COLOR gridStroke.Thickness = 1.5 gridStroke.Transparency = 0 gridStroke.Parent = gridContainer

local gridLayout = Instance.new("UIGridLayout")
gridLayout.CellSize = UDim2.new(0, 55, 0, 25)
gridLayout.CellPadding = UDim2.new(0, 6, 0, 8)
gridLayout.SortOrder = Enum.SortOrder.LayoutOrder
gridLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
gridLayout.VerticalAlignment = Enum.VerticalAlignment.Center
gridLayout.Parent = gridContainer

local symbols = {"@", "#", "_", "-_", "~", "` "}
local selectedSymbol = "@"
local symbolButtons = {}

for i, sym in ipairs(symbols) do
	local btn = Instance.new("TextButton")
	btn.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
	btn.BackgroundTransparency = 0.35
	btn.BorderSizePixel = 0
	btn.Text = sym
	btn.TextColor3 = Color3.fromRGB(210, 210, 210)
	btn.TextSize = 16
	btn.Font = Enum.Font.GothamBold
	btn.LayoutOrder = i
	btn.AutoButtonColor = false
	btn.ZIndex = 3
	
	local bCorner = Instance.new("UICorner") bCorner.CornerRadius = UDim.new(0, 6) bCorner.Parent = btn
	local bStroke = Instance.new("UIStroke") bStroke.Color = OUTLINE_COLOR bStroke.Thickness = 1.5 bStroke.Transparency = 0 bStroke.Parent = btn
	
	table.insert(symbolButtons, btn)
	
	btn.MouseButton1Click:Connect(function()
		selectedSymbol = sym
		for _, b in ipairs(symbolButtons) do
			if b.Text == selectedSymbol then
				b.BackgroundColor3 = Color3.fromRGB(110, 200, 245)
				b.BackgroundTransparency = 0.45
				b.TextColor3 = Color3.fromRGB(255, 255, 255)
			else
				b.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
				b.BackgroundTransparency = 0.35
				b.TextColor3 = Color3.fromRGB(210, 210, 210)
			end
		end
	end)
	btn.Parent = gridContainer
	if i == 1 then
		btn.BackgroundColor3 = Color3.fromRGB(110, 200, 245)
		btn.BackgroundTransparency = 0.45
		btn.TextColor3 = Color3.fromRGB(255, 255, 255)
	end
end

-- ============================================
-- RIGHT SECTION (Dropdowns)
-- ============================================
local modeContainer = Instance.new("Frame")
modeContainer.Size = UDim2.new(0, 135, 0, 110)
modeContainer.Position = UDim2.new(0, 225, 0, 100)
modeContainer.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
modeContainer.BackgroundTransparency = 0.45
modeContainer.BorderSizePixel = 0
modeContainer.ZIndex = 2
modeContainer.Parent = mainFrame
local modeCorner = Instance.new("UICorner") modeCorner.CornerRadius = UDim.new(0, 10) modeCorner.Parent = modeContainer
local modeStroke = Instance.new("UIStroke") modeStroke.Color = OUTLINE_COLOR modeStroke.Thickness = 1.5 modeStroke.Transparency = 0 modeStroke.Parent = modeContainer

local modeLabel = Instance.new("TextLabel")
modeLabel.Size = UDim2.new(1, -12, 0, 15)
modeLabel.Position = UDim2.new(0, 6, 0, 6)
modeLabel.BackgroundTransparency = 1
modeLabel.Text = "Spam Mode"
modeLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
modeLabel.TextSize = 10
modeLabel.Font = Enum.Font.Gotham
modeLabel.TextXAlignment = Enum.TextXAlignment.Left
modeLabel.ZIndex = 3
modeLabel.Parent = modeContainer
local modeLabelStroke = Instance.new("UIStroke") modeLabelStroke.Color = OUTLINE_COLOR modeLabelStroke.Thickness = 1 modeLabelStroke.Transparency = 0.2 modeLabelStroke.Parent = modeLabel

local modeDrop = Instance.new("TextButton")
modeDrop.Size = UDim2.new(1, -12, 0, 22)
modeDrop.Position = UDim2.new(0, 6, 0, 22)
modeDrop.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
modeDrop.BackgroundTransparency = 0.35
modeDrop.BorderSizePixel = 0
modeDrop.Text = "Enemy"
modeDrop.TextColor3 = Color3.fromRGB(255, 255, 255)
modeDrop.TextSize = 11
modeDrop.Font = Enum.Font.Gotham
modeDrop.AutoButtonColor = false
modeDrop.ZIndex = 3
modeDrop.Parent = modeContainer
local dropCorner = Instance.new("UICorner") dropCorner.CornerRadius = UDim.new(0, 6) dropCorner.Parent = modeDrop
local dropStroke = Instance.new("UIStroke") dropStroke.Color = OUTLINE_COLOR dropStroke.Thickness = 1.5 dropStroke.Transparency = 0 dropStroke.Parent = modeDrop

local dropArrow = Instance.new("ImageLabel")
dropArrow.Size = UDim2.new(0, 8, 0, 5)
dropArrow.Position = UDim2.new(1, -12, 0.5, -2)
dropArrow.BackgroundTransparency = 1
dropArrow.Image = "rbxassetid://7734018569" 
dropArrow.ImageColor3 = Color3.fromRGB(220, 220, 220)
dropArrow.ZIndex = 4
dropArrow.Parent = modeDrop

local dropList = Instance.new("Frame")
dropList.Size = UDim2.new(1, -12, 0, 40)
dropList.Position = UDim2.new(0, 6, 0, 46)
dropList.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
dropList.BackgroundTransparency = 0.1
dropList.BorderSizePixel = 0
dropList.Visible = false
dropList.ZIndex = 5
dropList.Parent = modeContainer
local listCorner = Instance.new("UICorner") listCorner.CornerRadius = UDim.new(0, 6) listCorner.Parent = dropList
local listStroke = Instance.new("UIStroke") listStroke.Color = OUTLINE_COLOR listStroke.Thickness = 1.5 listStroke.Transparency = 0 listStroke.Parent = dropList

local symLabel = Instance.new("TextLabel")
symLabel.Size = UDim2.new(1, -12, 0, 15)
symLabel.Position = UDim2.new(0, 6, 0, 52)
symLabel.BackgroundTransparency = 1
symLabel.Text = "Symbol Mode"
symLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
symLabel.TextSize = 10
symLabel.Font = Enum.Font.Gotham
symLabel.TextXAlignment = Enum.TextXAlignment.Left
symLabel.ZIndex = 3
symLabel.Parent = modeContainer
local symLabelStroke = Instance.new("UIStroke") symLabelStroke.Color = OUTLINE_COLOR symLabelStroke.Thickness = 1 symLabelStroke.Transparency = 0.2 symLabelStroke.Parent = symLabel

local symDrop = Instance.new("TextButton")
symDrop.Size = UDim2.new(1, -12, 0, 22)
symDrop.Position = UDim2.new(0, 6, 0, 68)
symDrop.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
symDrop.BackgroundTransparency = 0.35
symDrop.BorderSizePixel = 0
symDrop.Text = "Normal"
symDrop.TextColor3 = Color3.fromRGB(255, 255, 255)
symDrop.TextSize = 11
symDrop.Font = Enum.Font.Gotham
symDrop.AutoButtonColor = false
symDrop.ZIndex = 3
symDrop.Parent = modeContainer
local symDropCorner = Instance.new("UICorner") symDropCorner.CornerRadius = UDim.new(0, 6) symDropCorner.Parent = symDrop
local symDropStroke = Instance.new("UIStroke") symDropStroke.Color = OUTLINE_COLOR symDropStroke.Thickness = 1.5 symDropStroke.Transparency = 0 symDropStroke.Parent = symDrop

local symArrow = Instance.new("ImageLabel")
symArrow.Size = UDim2.new(0, 8, 0, 5)
symArrow.Position = UDim2.new(1, -12, 0.5, -2)
symArrow.BackgroundTransparency = 1
symArrow.Image = "rbxassetid://7734018569" 
symArrow.ImageColor3 = Color3.fromRGB(220, 220, 220)
symArrow.ZIndex = 4
symArrow.Parent = symDrop

local symList = Instance.new("Frame")
symList.Size = UDim2.new(1, -12, 0, 40)
symList.Position = UDim2.new(0, 6, 0, 92)
symList.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
symList.BackgroundTransparency = 0.1
symList.BorderSizePixel = 0
symList.Visible = false
symList.ZIndex = 5
symList.Parent = modeContainer
local symListCorner = Instance.new("UICorner") symListCorner.CornerRadius = UDim.new(0, 6) symListCorner.Parent = symList
local symListStroke = Instance.new("UIStroke") symListStroke.Color = OUTLINE_COLOR symListStroke.Thickness = 1.5 symListStroke.Transparency = 0 symListStroke.Parent = symList

local function createDropItem(parentList, text, yOffset, targetBtn)
	local item = Instance.new("TextButton")
	item.Size = UDim2.new(1, 0, 0, 18)
	item.Position = UDim2.new(0, 0, 0, yOffset)
	item.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
	item.BackgroundTransparency = 0.1
	item.BorderSizePixel = 0
	item.Text = text
	item.TextColor3 = Color3.fromRGB(210, 210, 210)
	item.TextSize = 10
	item.Font = Enum.Font.Gotham
	item.TextXAlignment = Enum.TextXAlignment.Left
	item.AutoButtonColor = false
	item.ZIndex = 6
	item.Parent = parentList
	
	local itemCorner = Instance.new("UICorner") itemCorner.CornerRadius = UDim.new(0, 5) itemCorner.Parent = item
	local pad = Instance.new("UIPadding") pad.PaddingLeft = UDim.new(0, 6) pad.Parent = item
	
	item.MouseEnter:Connect(function() item.BackgroundColor3 = Color3.fromRGB(60, 60, 65) end)
	item.MouseLeave:Connect(function() item.BackgroundColor3 = Color3.fromRGB(30, 30, 35) end)
	
	item.MouseButton1Click:Connect(function()
		targetBtn.Text = text
		parentList.Visible = false
	end)
	return item
end

createDropItem(dropList, "Self", 0, modeDrop)
createDropItem(dropList, "Enemy", 18, modeDrop)
createDropItem(symList, "Normal", 0, symDrop)
createDropItem(symList, "Random", 18, symDrop)

modeDrop.MouseButton1Click:Connect(function()
	dropList.Visible = not dropList.Visible
	symList.Visible = false
end)

symDrop.MouseButton1Click:Connect(function()
	symList.Visible = not symList.Visible
	dropList.Visible = false
end)

-- ============================================
-- BOTTOM ROW
-- ============================================
local enableLabel = Instance.new("TextLabel")
enableLabel.Size = UDim2.new(0, 80, 0, 25)
enableLabel.Position = UDim2.new(0, 15, 0, 220)
enableLabel.BackgroundTransparency = 1
enableLabel.Text = "Enable"
enableLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
enableLabel.TextSize = 14
enableLabel.Font = Enum.Font.Gotham
enableLabel.TextXAlignment = Enum.TextXAlignment.Left
enableLabel.ZIndex = 2
enableLabel.Parent = mainFrame
local enableLabelStroke = Instance.new("UIStroke") enableLabelStroke.Color = OUTLINE_COLOR enableLabelStroke.Thickness = 1 enableLabelStroke.Transparency = 0.2 enableLabelStroke.Parent = enableLabel

local toggleTrack = Instance.new("TextButton")
toggleTrack.Name = "ToggleTrack"
toggleTrack.Size = UDim2.new(0, 40, 0, 20)
toggleTrack.Position = UDim2.new(1, -55, 0, 222)
toggleTrack.BackgroundColor3 = Color3.fromRGB(60, 60, 65)
toggleTrack.BackgroundTransparency = 0.2
toggleTrack.BorderSizePixel = 0
toggleTrack.Text = ""
toggleTrack.AutoButtonColor = false
toggleTrack.ZIndex = 2
toggleTrack.Parent = mainFrame
local trackCorner = Instance.new("UICorner") trackCorner.CornerRadius = UDim.new(1,0) trackCorner.Parent = toggleTrack
local trackStroke = Instance.new("UIStroke") trackStroke.Color = OUTLINE_COLOR trackStroke.Thickness = 1.5 trackStroke.Transparency = 0 trackStroke.Parent = toggleTrack

local toggleKnob = Instance.new("Frame")
toggleKnob.Name = "ToggleKnob"
toggleKnob.Size = UDim2.new(0, 14, 0, 14)
toggleKnob.Position = UDim2.new(0, 3, 0.5, -7)
toggleKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
toggleKnob.BackgroundTransparency = 0.1
toggleKnob.BorderSizePixel = 0
toggleKnob.ZIndex = 3
toggleKnob.Parent = toggleTrack
local knobCorner = Instance.new("UICorner") knobCorner.CornerRadius = UDim.new(1,0) knobCorner.Parent = toggleKnob
local toggleKnobStroke = Instance.new("UIStroke") toggleKnobStroke.Color = OUTLINE_COLOR toggleKnobStroke.Thickness = 1 toggleKnobStroke.Transparency = 0 toggleKnobStroke.Parent = toggleKnob

local creditLabel = Instance.new("TextLabel")
creditLabel.Size = UDim2.new(1, 0, 0, 25)
creditLabel.Position = UDim2.new(0, 0, 1, -28)
creditLabel.BackgroundTransparency = 1
creditLabel.Text = "made by •FARHAN•"
creditLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
creditLabel.TextSize = 12
creditLabel.Font = Enum.Font.GothamBold
creditLabel.ZIndex = 2
creditLabel.Parent = mainFrame
local creditStroke = Instance.new("UIStroke") creditStroke.Color = OUTLINE_COLOR creditStroke.Thickness = 1 creditStroke.Transparency = 0.2 creditStroke.Parent = creditLabel

-- ============================================
-- SPAM LOGIC
-- ============================================
local spamThread = nil

local ENEMY_TEMPLATES = {
	"TMX Tor Ma Kamli 🤡",            
	"TMX Tor Abba Roger + GoaT 🤬",
	"TMX Tor Mar vuda kala ⚫",
	"TMX Tor jormer thik nai 🧠",
	"TMX Tor Mare Ultay xudi 🔄",
	"TMX Tor ma ki roginga 🤢",
	"TMX kamlami Koris na 🤫",
	"TMX Kamla xda 🌾",
	"TMX Mora murgi 🐔",
	"TMX Vagis na 🚶‍♂️",
	"TMX MurgiChod 🐔",
	"TMX GoaT's Tor abba 🐐",
	"ARÈ 0Y T0 KamLAaA 😔",
	"DÙd PGLUUUU 😈",
	"T0R MÁR R0SHMALAI 😋",
	"BlYA K0RLE B0U PALABE 🙈",
	"MNGER NATI 🌬️",
	"RNDIR P0LA 😛",
	"TR MARE * sUDI * 😴",
	"JTA CH0R 👞",
	"K0TTA 🐶",
	"AMAR lenta 🥰",
	"AMR P0LA 🥺",
	"%s T0R ABBU 🤬",
	"SH0R3R BACHA 😱",
	"K4MLÀGIRI B4D D3😼",
	"P0RTE B0SH SHAMN3 EXAM 😉",
	"G0RU CH0R 🐮",
	"BILAI SODA 😿",
	"LÈ0RA SUDA 🤭",
	"New GEn 🆕",
	"pgl 🤮",
	"bkl 🤡",
	"tmkx 🔥",
	"CH0TO dh0n 🤏🏻",
	"Parbi n@ 😛",
	"Kisti khab0 🥴",
	"DARK V0DA ⚫",
	"Rej3cted m4l 😭",
	"Buskir p0la 🗿",
	"ch0tu machine 🥺",
	"Lifeless 💔",
	"Meyedrr dudh pglu 🐮",
	"P0lapain sudi na 😒",
	"B0KA-SUDA 🐢",
	"M0da pasa 🙏🏻",
	"Din0c0da 🦖",
	"No skills 🥀",
	"New gen p0lapain 🧒🏻",
	"DHORSHON PAGLUUU 😋",
	"Rule 34 🤭",
	"bhau bhau koris na 🦴",
	"ladle MEOW GH0P 😿",
	"Ultay xdi 🔄",
	"Tr mar v0Da kala ⚫",
	"Tr mar v0Da china china lage 🇨🇳",
	"SCRIPT MADE BY FARHAN 👑"
}

local SELF_TEMPLATES = {
	"%s T0R ABBUH 😂",
	"%s T0R J0NM0H DATA 🤬",
	"%s T0R B0NGSHER BAP 😎",
	"%s T0R B0U ER REAL JAMAI 💍",
	"%s ER DHN T0R TA THEKE B0R0 🤏🏻",
	"%s SH0MP0RKE T0R DADDY LAGE 🧔🏻",
	"%s ER KASE BHIKKA CHA 🥣",
	"%s T0R REAL BAP 👑",
	"%s B0NGSH0 KHEYE FELBE 🐺"
}

local function getChatSystem()
	return (TextChatService.ChatVersion == Enum.ChatVersion.TextChatService) and "TextChatService" or "Legacy"
end

local function sendChatMessage(message)
	if getChatSystem() == "TextChatService" then
		local textChannels = TextChatService:FindFirstChild("TextChannels")
		if textChannels then
			local generalChannel = textChannels:FindFirstChild("RBXGeneral")
			if generalChannel then generalChannel:SendAsync(message) return true end
			for _, channel in ipairs(textChannels:GetChildren()) do
				if channel:IsA("TextChannel") then channel:SendAsync(message) return true end
			end
		end
	else
		local chatEvent = ReplicatedStorage:FindFirstChild("DefaultChatSystemChatEvents")
		if chatEvent then
			local sayMessageRequest = chatEvent:FindFirstChild("SayMessageRequest")
			if sayMessageRequest then sayMessageRequest:FireServer(message, "All") return true end
		end
	end
	return false
end

local function getNextInsult()
	local activeList = ENEMY_TEMPLATES
	if modeDrop.Text == "Self" then
		activeList = SELF_TEMPLATES
	end
	return activeList[math.random(1, #activeList)]
end

local function buildSpamMessage()
	local userText = freeTextBox.Text
	local template = getNextInsult()
	
	local insult = template
	if string.find(template, "%%s") then
		insult = template:format(player.DisplayName)
	end
	
	local currentSymbol = selectedSymbol
	if symDrop.Text == "Random" then
		currentSymbol = symbols[math.random(1, #symbols)]
	end
	
	local tail = " - (" .. userText .. ") - \"" .. insult .. "\""
	local symbolBudget = 175 - #tail
	
	if symbolBudget < 0 then
		symbolBudget = 0
	end
	
	local prefix = ""
	local charCount = 0
	
	while charCount + #currentSymbol + 1 <= symbolBudget do
		for _ = 1, 15 do
			if charCount + #currentSymbol + 1 > symbolBudget then break end
			prefix = prefix .. currentSymbol
			charCount = charCount + #currentSymbol
		end
		if charCount + #currentSymbol + 1 <= symbolBudget then
			prefix = prefix .. " "
			charCount = charCount + 1
		end
	end
	
	local msg = prefix .. tail
	if #msg > 200 then msg = msg:sub(1, 200) end
	return msg
end

local function startSpam()
	if spamThread or isShuttingDown then return end
	math.randomseed(os.time())
	
	spamThread = task.spawn(function()
		while isEnabled and not isShuttingDown do
			local msg = buildSpamMessage()
			pcall(function() sendChatMessage(msg) end)
			
			local delayTime = tonumber(delayBox.Text) or MIN_DELAY
			if delayTime < MIN_DELAY then delayTime = MIN_DELAY end
			if delayTime > MAX_DELAY then delayTime = MAX_DELAY end
			
			local elapsed = 0
			while elapsed < delayTime and isEnabled and not isShuttingDown do
				local step = math.min(0.05, delayTime - elapsed)
				if step <= 0 then break end
				task.wait(step)
				elapsed = elapsed + step
			end
		end
		spamThread = nil
	end)
end

local function stopSpam()
	if spamThread then task.cancel(spamThread) spamThread = nil end
end

toggleTrack.MouseButton1Click:Connect(function()
	if isShuttingDown then return end
	isEnabled = not isEnabled
	
	if isEnabled then
		TweenService:Create(toggleTrack, TweenInfo.new(0.25), {BackgroundColor3 = Color3.fromRGB(110, 200, 245), BackgroundTransparency = 0.45}):Play()
		TweenService:Create(toggleKnob, TweenInfo.new(0.25, Enum.EasingStyle.Back), {Position = UDim2.new(1, -17, 0.5, -7)}):Play()
		startSpam()
	else
		TweenService:Create(toggleTrack, TweenInfo.new(0.25), {BackgroundColor3 = Color3.fromRGB(60, 60, 65), BackgroundTransparency = 0.2}):Play()
		TweenService:Create(toggleKnob, TweenInfo.new(0.25, Enum.EasingStyle.Back), {Position = UDim2.new(0, 3, 0.5, -7)}):Play()
		stopSpam()
	end
end)

-- ============================================
-- FLOATING BUBBLE (WITH BLACK-TO-RAINBOW BREATHING OUTLINE)
-- ============================================
local bubble = Instance.new("Frame")
bubble.Name = "Bubble"
bubble.Size = UDim2.new(0, 50, 0, 50)
bubble.Position = UDim2.new(0, 30, 0.5, -25)
bubble.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
bubble.BackgroundTransparency = 0
bubble.BorderSizePixel = 0
bubble.Active = true
bubble.ZIndex = 10
bubble.ClipsDescendants = true
bubble.Parent = screenGui

local bubbleCorner = Instance.new("UICorner")
bubbleCorner.CornerRadius = UDim.new(1, 0)
bubbleCorner.Parent = bubble

local bubbleDecal = Instance.new("ImageLabel")
bubbleDecal.Name = "BubbleDecal"
bubbleDecal.Size = UDim2.new(1, 0, 1, 0)
bubbleDecal.Position = UDim2.new(0, 0, 0, 0)
bubbleDecal.BackgroundTransparency = 1
bubbleDecal.Image = "rbxthumb://type=Asset&id=105717203321078&w=420&h=420"
bubbleDecal.ScaleType = Enum.ScaleType.Crop
bubbleDecal.ImageTransparency = 0
bubbleDecal.ZIndex = 11
bubbleDecal.Parent = bubble

local decalCorner = Instance.new("UICorner")
decalCorner.CornerRadius = UDim.new(1, 0)
decalCorner.Parent = bubbleDecal

local bubbleStroke = Instance.new("UIStroke")
bubbleStroke.Color = OUTLINE_COLOR
bubbleStroke.Thickness = 2
bubbleStroke.Transparency = 0
bubbleStroke.Parent = bubble

local bubbleGlow = Instance.new("UIStroke")
bubbleGlow.Name = "Glow"
bubbleGlow.Color = Color3.fromRGB(0, 0, 0)
bubbleGlow.Thickness = 3
bubbleGlow.Transparency = 0.2
bubbleGlow.Parent = bubble

local bubbleRainbowConn = RunService.Heartbeat:Connect(function(dt)
	local t = tick() * 0.75
	local mix = (math.sin(t * math.pi * 2) + 1) / 2
	
	local hue = (tick() * 0.35) % 1
	local rainbowColor = Color3.fromHSV(hue, 0.85, 1)
	local blackColor = Color3.fromRGB(0, 0, 0)
	
	bubbleGlow.Color = blackColor:Lerp(rainbowColor, mix)
	
	local pulse = (math.sin(tick() * 2.5) + 1) / 2
	bubbleGlow.Transparency = 0.1 + (pulse * 0.5)
end)

local dragging = false
local dragStart, startPos
local dragInput
local movedDuringDrag = false

bubble.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = true
		movedDuringDrag = false
		dragStart = input.Position
		startPos = bubble.Position
		input.Changed:Connect(function()
			if input.UserInputState == Enum.UserInputState.End then dragging = false end
		end)
	end
end)

bubble.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 dragging and (input == dragInput or input.UserInputType == Enum.UserInputType.Touch) then
		local delta = input.Position - dragStart
		if math.abs(delta.X) > 3 or math.abs(delta.Y) > 3 then movedDuringDrag = true end
		bubble.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.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = false
	end
end)

bubble.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		if not movedDuringDrag then
			isOpen = not isOpen
			if isOpen then
				pcall(function() openSound:Play() end)
				mainFrame.Visible = true
				mainFrame.Size = UDim2.new(0, FRAME_W, 0, 0)
				TweenService:Create(mainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
					Size = UDim2.new(0, FRAME_W, 0, FRAME_H)
				}):Play()
			else
				pcall(function() closeSound:Play() end)
				local t = TweenService:Create(mainFrame, TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
					Size = UDim2.new(0, FRAME_W, 0, 0)
				})
				t:Play()
				t.Completed:Connect(function() mainFrame.Visible = false end)
			end
		end
	end
end)

bubble.Size = UDim2.new(0, 0, 0, 0)
TweenService:Create(bubble, TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
	Size = UDim2.new(0, 50, 0, 50)
}):Play()

-- ============================================
-- SHUTDOWN
-- ============================================
local function shutdown()
	if isShuttingDown then return end
	isShuttingDown = true
	isEnabled = false
	stopSpam()
	if bubbleRainbowConn then bubbleRainbowConn:Disconnect(); bubbleRainbowConn = nil end
	if antiAfkConn then antiAfkConn:Disconnect(); antiAfkConn = nil end
	if screenGui and screenGui.Parent then screenGui:Destroy() end
end

shutdownBindable.Event:Connect(shutdown)
Players.PlayerRemoving:Connect(function(p) if p == player then shutdown() end end)
screenGui.Destroying:Connect(shutdown)

updateSliderFromText()

-- ============================================
-- STARTUP MESSAGES
-- ============================================
task.spawn(function()
	task.wait(1)
	if isShuttingDown then return end
	local banner1 = string.rep("_", 50) ~= "" and string.rep("_", 50) .. " -- GoaT SPAMMER LOADED -- " .. string.rep("_", 50) or ""
	pcall(function() sendChatMessage(banner1:sub(1,200)) end)
	task.wait(2)
	if isShuttingDown then return end
	local goatOnTopMsg = string.rep("_", 25) .. " GoaT ON TOP " .. string.rep("_", 25)
	pcall(function() sendChatMessage(goatOnTopMsg) end)
end)

How to Execute Brookhaven 🏡RP Script – GoaT Spammer

Step 1: Copy Code: Click the Copy Code button in the viewer above to grab the clean Lua loadstring.

Step 2: Launch Executor: Open a compatible, unpatched executor. If you need one, check our Roblox Executors Directory.

Step 3: Join Experience: Launch Roblox and join Brookhaven 🏡RP.

Step 4: Attach & Run: Attach/inject your executor into the Roblox process, paste the code into the script tab, and press Execute.

Created By

xovara
xovara
Script Creator
View Author Profile

Roblox Experience

Brookhaven 🏡RP
Brookhaven 🏡RP
By Brookhaven by Voldex
Active Players:286.5K
Play on Roblox

Features & Information

Execute Brookhaven 🏡RP Script – GoaT Spammer. Key system required, created by xovara, updated Oct 22, 2026. Tested and working on supported executors.

Script Changelog (2)

@QueueSpeedDemonOct 24, 2026

Edited during review before approval

@xovaraOct 22, 2026

Create script

Community Comments (0)

No comments yet for this script.

Frequently Asked Questions

How do I execute Brookhaven 🏡RP Script – GoaT Spammer in Roblox?

To run Brookhaven 🏡RP Script – GoaT Spammer, copy the Lua loadstring from the code viewer above, launch Roblox and join Brookhaven 🏡RP, attach a working executor (such as Potassium, Solara, or Delta from our Executors directory), paste the code into your executor console, and click Execute.

Is Brookhaven 🏡RP Script – GoaT Spammer keyless or does it require an access key?

Brookhaven 🏡RP Script – GoaT Spammer requires an access key. You can retrieve the official key directly using the Get Script Key link provided above.

Is Brookhaven 🏡RP Script – GoaT Spammer currently safe and working?

This script is active and operational. Always test scripts using a secondary (alt) Roblox account to safeguard your main profile against anti-cheat bans.