
Key Required VerifiedUniversal

---@diagnostic disable: undefined-global
local LP = game.Players.LocalPlayer
local RE = game:GetService("ReplicatedStorage")
local TS = game:GetService("TweenService")
local RS = game:GetService("RunService")
local observeTag = require(RE.Packages.Observers.observeTag)
local ReplicatorClient = require(RE.Client.Modules.ReplicatorClient)
local ClientGlobals = require(RE.Client.Modules.ClientGlobals)
local EconomyMath = require(RE.Shared.utils.EconomyMath)
local BrainrotModule = require(RE.SharedModules.BrainrotModule)
repeat wait(0.1) until LP.Character
repeat wait(0.1) until LP.Character:FindFirstChild("Humanoid")
local data = {
classes = {
["Common"] = 1,
["Uncommon"] = 2,
["Rare"] = 3,
["Epic"] = 4,
["Legendary"] = 5,
["Mythical"] = 6,
["Cosmic"] = 7,
["Secret"] = 8,
["Celestial"] = 9,
["Divine"] = 10,
["Infinity"] = 11
},
mutations = {
"None",
"Emerald",
"Gold",
"Blood",
"Electric",
"Radioactive",
"UFO",
"Money",
"Candy",
"Doom",
"Fire",
"Ice",
"Gamer",
"Diamond",
"Admin",
"Hacker",
"Lucky"
}
}
local modes = {
highestPotential = 1,
aboveRate = 2,
specificTraits = 3,
onlyLuckyBlocks = 4
}
local settings = {
tweenSpeedX = 70,
tweenSpeedY = 50,
smartTweenY = -20,
stopScriptKeybind = "F6",
autoTweenSpeed = true,
prioritizeEvents = true,
mode = modes.highestPotential, -- 1 = collect highest potential brainrot, 2 = collect every brainrot above a certain rate, 3 = collect brainrots with specific traits/mutations/classes, 4 = collect only lucky blocks
brainrotMinRate = 0,
brainrotMinClass = "Celestial",
brainrotTraits = {},
brainrotMutations = {},
luckyBlockMinClass = "Divine",
luckyBlockMutations = {}
}
local utils = {
tween,
noclipState = false,
noclipConnection,
floatConnection,
breakVelocity = function(self)
local velocity = Vector3.new(0, 0, 0)
for i, v in pairs(LP.Character:GetDescendants()) do
if v:IsA("BasePart") then
v.Velocity, v.RotVelocity = velocity, velocity
end
end
end,
nofall = function(self)
local hrp = LP.Character:WaitForChild("HumanoidRootPart")
local att = hrp:FindFirstChild("NoFallAtt") or Instance.new("Attachment")
att.Name = "NoFallAtt"
att.Parent = hrp
local vf = hrp:FindFirstChild("NoFallVF") or Instance.new("VectorForce")
vf.Name = "NoFallVF"
vf.Attachment0 = att
vf.RelativeTo = Enum.ActuatorRelativeTo.World
vf.ApplyAtCenterOfMass = true
vf.Parent = hrp
-- cancel gravity
vf.Force = Vector3.new(0, hrp.AssemblyMass * workspace.Gravity, 0)
end,
fall = function(self)
local hrp = LP.Character:WaitForChild("HumanoidRootPart")
if not hrp then return end
local vf = hrp:FindFirstChild("NoFallVF")
local att = hrp:FindFirstChild("NoFallAtt")
if vf then vf:Destroy() end
if att then att:Destroy() end
end,
noclip = function(self)
self.noclipState = true
wait(0.1)
local function noclipLoop()
if self.noclipState and LP.Character ~= nil then
for i, v in pairs(LP.Character:GetDescendants()) do
if v:IsA("BasePart") and v.CanCollide == true then
v.CanCollide = false
end
end
end
end
self.noclipConnection = game:GetService("RunService").Stepped:Connect(noclipLoop)
end,
clip = function(self)
self.noclipState = false
if self.noclipConnection then
self.noclipConnection:Disconnect()
end
end,
float = function(self)
if self.floatConnection then
if self.floatConnection.Connected then
return
end
end
local floatPart = Instance.new('Part')
floatPart.Name = "floatPart"
floatPart.Parent = LP.Character
floatPart.Transparency = 1
floatPart.Size = Vector3.new(2,0.2,1.5)
floatPart.Anchored = true
local floatValue = -3.1
floatPart.CFrame = LP.Character.HumanoidRootPart.CFrame * CFrame.new(0,floatValue,0)
self.floatConnection = RS.Stepped:Connect(function()
if floatPart and floatPart.Parent and LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") then
floatPart.CFrame = LP.Character.HumanoidRootPart.CFrame * CFrame.new(0,floatValue,0)
else
self.floatConnection:Disconnect()
end
end)
end,
unfloat = function(self)
if self.floatConnection then
self.floatConnection:Disconnect()
end
if LP.Character:FindFirstChild("floatPart") then
LP.Character.floatPart:Destroy()
end
end,
tweenToPosition = function(self, position, speed)
if not LP.Character or not LP.Character:FindFirstChild("Humanoid") then
return false
end
local info = TweenInfo.new((LP.Character.HumanoidRootPart.Position - position).Magnitude / speed, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false)
self.tween = TS:Create(LP.Character.HumanoidRootPart, info, {CFrame = CFrame.new(position.X, position.Y, position.Z)})
self:noclip()
self:breakVelocity()
self.tween:Play()
local died = false
local diedConnection = LP.Character.Humanoid.Died:Connect(function()
if self.tween then
self.tween:Cancel()
died = true
print("Player died, tween cancelled.")
end
end)
self.tween.Completed:Wait()
diedConnection:Disconnect()
self:breakVelocity()
self:clip()
if self.tween.PlaybackState ~= Enum.PlaybackState.Completed or died or LP.Character.Humanoid:GetState() == Enum.HumanoidStateType.Dead then
return false
else
return true
end
end,
tweenSmart = function(self, position)
local result = self:tweenToPosition(Vector3.new(LP.Character.HumanoidRootPart.Position.X, settings.smartTweenY, LP.Character.HumanoidRootPart.Position.Z), settings.tweenSpeedY)
print(result)
if not result then return false end
result = self:tweenToPosition(Vector3.new(position.X, settings.smartTweenY, position.Z), settings.tweenSpeedX)
print(result)
if not result then return false end
result = self:tweenToPosition(position, settings.tweenSpeedY)
print(result)
if not result then return false end
return true
end
}
local world = {
brainrots = {},
luckyBlocks = {},
plot = {
id = "",
stands = {},
brainrots = {}
},
currentEvents = {}
}
for i, v in pairs(game.workspace.Bases:GetChildren()) do
if v:GetAttribute("Holder") == LP.UserId then
world.plot.id = v.Name
end
end
local stopScript = false
game:GetService("UserInputService").InputBegan:Connect(function(input, gameProcessed)
if not gameProcessed then
if input.KeyCode == Enum.KeyCode[settings.stopScriptKeybind] then
if utils.tween then
utils.tween:Cancel()
utils:clip()
utils:unfloat()
utils:fall()
stopScript = true
end
end
end
end)
print("Script loaded. Press " .. settings.stopScriptKeybind .. " to stop the script.")
while (not stopScript) do
if not LP.Character or not LP.Character:FindFirstChild("HumanoidRootPart") or not LP.Character:FindFirstChild("Humanoid") then
wait(3)
continue
elseif LP.Character.Humanoid:GetState() == Enum.HumanoidStateType.Dead then
repeat wait(0.1) until LP.Character and LP.Character:FindFirstChild("HumanoidRootPart") and LP.Character:FindFirstChild("Humanoid") and LP.Character.Humanoid:GetState() ~= Enum.HumanoidStateType.Dead
end
if settings.autoTweenSpeed then -- set tween speed based on player stats so that the server doesn't kill
settings.tweenSpeedX = ClientGlobals.PlayerData.Data.CurrentSpeed
settings.tweenSpeedY = ClientGlobals.PlayerData.Data.JumpUpgrade * 8
end
world.plot.stands = ClientGlobals.Plots:TryIndex({world.plot.id, "data", "Stands"}) or {}
for i,v in pairs(ClientGlobals.Plots:TryIndex({world.plot.id, "data", "Stands"})) do -- get player's stands and brainrots
if v.brainrot then
world.plot.brainrots[i] = v.brainrot
world.plot.brainrots[i]["rate"] = EconomyMath.GetBrainrotRate(v.brainrot)
end
end
table.clear(world.brainrots)
table.clear(world.luckyBlocks)
for i, v in pairs(game.workspace.ActiveBrainrots:GetChildren()) do -- get collectable brainrots
for z, x in pairs(v:GetChildren()) do
if x:IsA("Model") and x:FindFirstChild("Root") and x.Root:FindFirstChild("TakePrompt") then
world.brainrots[#world.brainrots+1] = {
["name"] = x:GetAttribute("BrainrotName"),
["class"] = v.Name,
["mutation"] = x:GetAttribute("Mutation"),
["level"] = x:GetAttribute("Level"),
["traits"] = x:GetAttribute("Traits"),
["position"] = x.WorldPivot.Position,
["proximityPrompt"] = x.Root.TakePrompt,
["time"] = x.Root.TimerGui.TimeLeft.TimeLeft.ContentText:gsub("%D+", "") or "0s"
}
world.brainrots[#world.brainrots].rate = EconomyMath.GetBrainrotRate(world.brainrots[#world.brainrots])
end
end
end
for i, v in pairs(game.workspace.ActiveLuckyBlocks:GetChildren()) do -- get collectable lucky blocks
if v:IsA("Model") and v:FindFirstChild("RootPart") and v.RootPart:FindFirstChild("ProximityPrompt") then
world.luckyBlocks[#world.luckyBlocks+1] = {
["class"] = v:GetAttribute("LuckyBlockType"),
["level"] = v:GetAttribute("Level"),
["mutation"] = v:GetAttribute("Mutation"),
["traits"] = v:GetAttribute("Traits"),
["position"] = v.WorldPivot.Position,
["proximityPrompt"] = v.RootPart.ProximityPrompt
}
end
end
world.currentEvents = ClientGlobals.ActiveEvents.Data
local currentEvent = "None"
for i, v in pairs(world.currentEvents) do
print(i, v)
if string.find(i, "Arcade") or string.find(i, "Valentine") or string.find(i, "Fire") then
currentEvent = i
end
end
if settings.mode ~= modes.onlyLuckyBlocks then
table.sort(world.brainrots, function(a, b) -- sort brainrots based on settings.mode
if settings.prioritizeEvents and string.find(currentEvent, "Fire") then
local aScore, bScore = 0, 0
if (ClientGlobals.PlayerData.Data.FireAndIceTeam == "Ice" and a.position.Z > 0) or (ClientGlobals.PlayerData.Data.FireAndIceTeam == "Fire" and a.position.Z < 0) then
aScore = aScore + 20
end
if (ClientGlobals.PlayerData.Data.FireAndIceTeam == "Ice" and b.position.Z > 0) or (ClientGlobals.PlayerData.Data.FireAndIceTeam == "Fire" and b.position.Z < 0) then
bScore = bScore + 20
end
if string.find(a.mutation, ClientGlobals.PlayerData.Data.FireAndIceTeam) then
aScore = aScore + 1
end
if string.find(b.mutation, ClientGlobals.PlayerData.Data.FireAndIceTeam) then
bScore = bScore + 1
end
aScore = aScore + (data.classes[a.class] - data.classes[b.class])
return aScore > bScore
elseif settings.mode == modes.highestPotential then
local aScore, bScore = 0, 0
local rate1, rate2 = 0, 0
if a.level >= 250 then
rate1 = a.rate
else
rate1 = EconomyMath.GetBrainrotRate({["name"] = a.name, ["mutation"] = a.mutation, ["level"] = 250, ["traits"] = a.traits})
end
if b.level >= 250 then
rate2 = b.rate
else
rate2 = EconomyMath.GetBrainrotRate({["name"] = b.name, ["mutation"] = b.mutation, ["level"] = 250, ["traits"] = b.traits})
end
if rate1 < settings.brainrotMinRate and rate2 < settings.brainrotMinRate then
return a.rate > b.rate
end
if rate1 > rate2 then
aScore = aScore + 1
elseif rate2 > rate1 then
bScore = bScore + 1
end
if data.classes[a.class] >= data.classes[settings.brainrotMinClass] then
aScore = aScore + 10 -- give a big score boost if the brainrot is above the minimum class
end
if data.classes[b.class] >= data.classes[settings.brainrotMinClass] then
bScore = bScore + 10
end
for i, v in pairs(settings.brainrotTraits) do
if table.find(a.traits, v) then
aScore = aScore + 1
end
if table.find(b.traits, v) then
bScore = bScore + 1
end
end
for i, v in pairs(settings.brainrotMutations) do
if a.mutation == v then
aScore = aScore + 1
end
if b.mutation == v then
bScore = bScore + 1
end
end
--print(a.class, b.class, rate1, rate2, aScore, bScore, temp1.level, temp2.level)
if aScore == bScore then
return rate1 > rate2 -- if both have the same score, sort by rate
else
return aScore > bScore -- otherwise sort by score
end
elseif settings.mode == modes.specificTraits then
-- sort by number of desired traits/mutations/classes, then by rate
local aScore, bScore = 0, 0
for i, v in pairs(settings.brainrotTraits) do
if table.find(a.traits, v) then
aScore = aScore + 1
end
if table.find(b.traits, v) then
bScore = bScore + 1
end
end
for i, v in pairs(settings.brainrotMutations) do
if a.mutation == v then
aScore = aScore + 1
end
if b.mutation == v then
bScore = bScore + 1
end
end
if data.classes[a.class] >= data.classes[settings.brainrotMinClass] then
aScore = aScore + 10
end
if data.classes[b.class] >= data.classes[settings.brainrotMinClass] then
bScore = bScore + 10
end
if aScore == bScore then
return a.rate > b.rate -- if both have the same number of desired traits/mutations/classes, sort by rate
else
return aScore > bScore -- otherwise sort by score
end
else
return a.rate > b.rate -- if not sorting by specific traits, just sort by rate
end
end)
end
table.sort(world.luckyBlocks, function(a, b)
-- the lucky block must have at least the minimum class, and it must have all the mutations and traits specified in settings, then sort by level
if not data.classes[a.class] then
return false
elseif not data.classes[b.class] then
return true
end
local aScore, bScore = 0, 0
for i, v in pairs(settings.luckyBlockMutations) do
if a.mutation == v then
aScore = aScore + 1
end
if b.mutation == v then
bScore = bScore + 1
end
end
if data.classes[a.class] >= data.classes[settings.luckyBlockMinClass] then
aScore = aScore + 10 -- give a big score boost if the brainrot is above the minimum class
end
if data.classes[b.class] >= data.classes[settings.luckyBlockMinClass] then
bScore = bScore + 10
end
if aScore == bScore then
return data.classes[a.class] > data.classes[b.class] -- if both have the same number of desired mutations/classes, sort by class
else
return aScore > bScore -- otherwise sort by score
end
end)
print("Current Events:", currentEvent)
utils:nofall()
if settings.prioritizeEvents and currentEvent ~= "None" then
if string.find(currentEvent, "Arcade") then
for i, v in pairs(workspace.ArcadeEventTickets:GetDescendants()) do
if v.Name == "Ticket" and v:FindFirstChild("TouchInterest") then
local pos = v.WorldPivot.Position
if utils:tweenSmart(Vector3.new(pos.X, pos.Y - 5, pos.Z)) then
wait(0.2)
firetouchinterest(LP.Character.HumanoidRootPart, v, 0)
firetouchinterest(LP.Character.HumanoidRootPart, v, 1)
break
end
end
end
elseif string.find(currentEvent, "Valentine") then
if ClientGlobals.PlayerData.Data.SpecialCurrency.CandyCoin >= 100 then
local pos = workspace.ValentinesMap.CandyGramStation.WorldPivot.Position
if utils:tweenSmart(Vector3.new(pos.X, pos.Y - 5, pos.Z)) then
wait(0.2)
fireproximityprompt(workspace.ValentinesMap.CandyGramStation.Main.Prompts.ProximityPrompt)
continue
end
end
if not workspace:FindFirstChild("CandyEventParts") then continue end
local candies = {}
for i, v in pairs(workspace.CandyEventParts:GetDescendants()) do
if v.Name == "HeartCandy3" and v:FindFirstChild("TouchInterest") then
candies[#candies+1] = v
end
end
table.sort(candies, function(a, b)
return (LP.Character.HumanoidRootPart.Position - a.Position).Magnitude < (LP.Character.HumanoidRootPart.Position - b.Position).Magnitude
end)
if candies[1] then
local pos = candies[1].Position
if utils:tweenSmart(Vector3.new(pos.X, pos.Y - 10, pos.Z)) then
wait(0.2)
firetouchinterest(LP.Character.HumanoidRootPart, candies[1], 0)
firetouchinterest(LP.Character.HumanoidRootPart, candies[1], 1)
end
end
elseif string.find(currentEvent, "Fire") then
local carryCount = 0
for i, v in pairs(LP.Character:GetChildren()) do
if string.find(v.Name, "LuckyBlock") or string.find(v.Name, "RenderedBrainrot") then
carryCount = carryCount + 1
end
end
local pos = world.brainrots[1].position
if data.classes[world.brainrots[1].class] >= (data.classes[settings.brainrotMinClass] - 6) and
tonumber(world.brainrots[1].time) > ((LP.Character.HumanoidRootPart.Position - pos).Magnitude / settings.tweenSpeedX) + 3 and
carryCount < ClientGlobals.PlayerData.Data.MaxCarry then
if utils:tweenSmart(Vector3.new(pos.X, pos.Y - 3, pos.Z)) then
wait(0.3)
fireproximityprompt(world.brainrots[1].proximityPrompt)
carryCount = carryCount + 1
end
end
if carryCount >= ClientGlobals.PlayerData.Data.MaxCarry then
pos = workspace.FireAndIceMap.FireAndIceSacraficeMachine.WorldPivot.Position
if utils:tweenSmart(Vector3.new(pos.X, pos.Y - 40, pos.Z)) then
wait(0.2)
fireproximityprompt(workspace.FireAndIceMap.FireAndIceSacraficeMachine.Primary.Prompt.ProximityPrompt)
task.spawn(function()
wait(0.5)
firesignal(LP.PlayerGui.ChoiceGui.Choice.Choices.Yes.Activated)
end)
end
end
end
elseif settings.mode == modes.highestPotential or settings.mode == modes.aboveRate then
local pos = world.brainrots[1].position
local temp = {
["name"] = world.brainrots[1].name,
["mutation"] = world.brainrots[1].mutation,
["level"] = 250,
["traits"] = world.brainrots[1].traits
}
if world.brainrots[1].level >= 250 or settings.mode == modes.aboveRate then
temp.level = world.brainrots[1].level
end
print(EconomyMath.GetBrainrotRate(temp))
print(world.brainrots[1].class, data.classes[world.brainrots[1].class], data.classes[settings.brainrotMinClass])
local con1, con2 = settings.mode == modes.highestPotential and EconomyMath.GetBrainrotRate(temp) >= settings.brainrotMinRate, settings.mode == modes.aboveRate and temp.rate >= settings.brainrotMinRate
if (con1 or con2) and data.classes[world.brainrots[1].class] >= data.classes[settings.brainrotMinClass] and world.brainrots[1].rate >= settings.brainrotMinRate and tonumber(world.brainrots[1].time) > ((LP.Character.HumanoidRootPart.Position - pos).Magnitude / settings.tweenSpeedX) + 3 then
if utils:tweenSmart(Vector3.new(pos.X, pos.Y - 3, pos.Z)) then
wait(0.3)
fireproximityprompt(world.brainrots[1].proximityPrompt)
utils:tweenSmart(workspace.Bases[world.plot.id].WorldPivot.Position)
end
else
if utils:tweenSmart(Vector3.new(pos.X, pos.Y + settings.smartTweenY, pos.Z)) then
--utils:float()
end
end
else
if utils:tweenSmart(Vector3.new(world.brainrots[1].position.X, world.brainros[1].position.Y + settings.smartTweenY, world.brainrots[1].position.Z)) then
--utils:float()
end
end
wait(0.1)
end



stealer
steal
you guys gotta be bots??? it's open source you can literally read it
lol ig these ppl doesnt know how to read codes..