PVSB OPEN SOURCE (CRACKED!)
Key Required

PVSB OPEN SOURCE (CRACKED!)

[🐰] Plants & Brainrots 🌻ScriptCracksScriptCracks 2.8K views 23 executesUpdated Oct 4, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•712 lines (22147 chars)
-- game load & fps unlocker

repeat task.wait() until game:IsLoaded()

if setfpscap then
    setfpscap(1000000)
else
    warn("Your exploit does not support setfpscap.")
end

-- library
local l = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()

-- services 

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

local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local Backpack = LocalPlayer:WaitForChild("Backpack")

-- settings

local AutoCollect = false
local AutoFarm = false
local autoClicking = false
local AutoCollectDelay = 60
local ClickInterval = 0.25
local HeldToolName = "Basic Bat"
local SellPlant = false
local SellBrainrot = false

local serverStartTime = os.time()

-- shop items

local shop = {
    seedList = {
        "Cactus Seed",
        "Strawberry Seed",
        "Pumpkin Seed",
        "Sunflower Seed",
        "Dragon Seed",
        "Eggplant Seed",
        "Watermelon Seed",
        "Cocotank Seed",
        "Carnivorous Plant Seed",
        "Mr Carrot Seed",
        "Tomatrio Seed",
        "Shroombino Seed"
    },

    gearList = {
        "Water Bucket",
        "Frost Grenade",
        "Banana Gun",
        "Frost Blower",
        "Carrot Launcher"
    }
}

-- variables

local selectedSeeds = {}
local selectedGears = {}
local AutoBuySelectedSeed = false
local AutoBuySelectedGear = false
local AutoBuyAllSeed = false
local AutoBuyAllGear = false

-- helper functions

local function GetMyPlot()
    for _, plot in ipairs(Workspace.Plots:GetChildren()) do
        local playerSign = plot:FindFirstChild("PlayerSign")
        if playerSign then
            local bg = playerSign:FindFirstChild("BillboardGui")
            local textLabel = bg and bg:FindFirstChild("TextLabel")
            if textLabel and (textLabel.Text == LocalPlayer.Name or textLabel.Text == LocalPlayer.DisplayName) then
                return plot
            end
        end
    end
    return nil
end

local function GetMyPlotName()
    local plot = GetMyPlot()
    return plot and plot.Name or "No Plot"
end

local function GetMoney()
    local leaderstats = LocalPlayer:FindFirstChild("leaderstats")
    return leaderstats and leaderstats:FindFirstChild("Money") and leaderstats.Money.Value or 0
end

local function GetRebirth()
    local gui = LocalPlayer:FindFirstChild("PlayerGui") and LocalPlayer.PlayerGui:FindFirstChild("Main")
    if gui and gui:FindFirstChild("Rebirth") then
        local text = gui.Rebirth.Frame.Title.Text or "Rebirth 0"
        local n = tonumber(text:match("%d+")) or 0
        return math.max(0, n - 1)
    end
    return 0
end

local function FormatTime(sec)
    local h = math.floor(sec / 3600)
    local m = math.floor((sec % 3600) / 60)
    local s = sec % 60
    return string.format("%02d:%02d:%02d", h, m, s)
end

-- safe remote getters
local function GetBridgeNet2()
    return ReplicatedStorage:FindFirstChild("BridgeNet2")
end

local function GetRemotesFolder()
    return ReplicatedStorage:FindFirstChild("Remotes")
end

-- window

local Window = l:CreateWindow({
    Title = "Horizon Hub - Plants vs Brainrots",
    Icon = "rbxassetid://128130788295246", 
    Author = "Laspard",
    Folder = "HorizonHubV3/PlantsVsBrainrots",
    Size = UDim2.fromOffset(500, 390),
    Transparent = true,
    Theme = "Dark",
    Resizable = true,
    SideBarWidth = 150,
    BackgroundImageTransparency = 0.8,
    HideSearchBar = true,
    ScrollBarEnabled = true,
    User = {
        Enabled = true,
        Anonymous = false,
        Callback = function()
        end,
    },
})

Window:EditOpenButton({
    Title = "Horizon Hub - Open",
    Icon = "monitor",
    CornerRadius = UDim.new(0, 6),
    StrokeThickness = 2,
    Color = ColorSequence.new(Color3.fromRGB(30, 30, 30), Color3.fromRGB(255, 255, 255)),
    Draggable = true,
})

-- tabs

local Main = Window:Tab({Title = "Main", Icon = "house"})
local Sell = Window:Tab({Title = "Sell", Icon = "dollar-sign"})
local Shop = Window:Tab({Title = "Shop", Icon = "shopping-cart"})
local Collect = Window:Tab({Title = "Auto", Icon = "crown"})
Window:Divider()
local InfoTab = Window:Tab({ Title = "Info", Icon = "info"})


Window:SelectTab(1)

Main:Section({ Title = "Auto Farm", Icon = "crown" })

Main:Section({ Title = "Use on PRIVATE SERVERS only!", Icon = "badge-alert" })

-- cache

local BrainrotsCache = {}

local function UpdateBrainrotsCache()
    local ok, folder = pcall(function()
        return Workspace:WaitForChild("ScriptedMap"):WaitForChild("Brainrots")
    end)
    if not ok or not folder then return end
    BrainrotsCache = {}
    for _, b in ipairs(folder:GetChildren()) do
        if b:FindFirstChild("BrainrotHitbox") then
            table.insert(BrainrotsCache, b)
        end
    end
end

local function GetNearestBrainrot()
    local nearest = nil
    local minDist = math.huge
    for _, b in ipairs(BrainrotsCache) do
        local hitbox = b:FindFirstChild("BrainrotHitbox")
        if hitbox then
            local dist = (HumanoidRootPart.Position - hitbox.Position).Magnitude
            if dist < minDist then
                minDist = dist
                nearest = b
            end
        end
    end
    return nearest
end

-- utility 

local function EquipBat()
    local tool = Backpack:FindFirstChild(HeldToolName) or Character:FindFirstChild(HeldToolName)
    if tool then tool.Parent = Character end
end

local function InstantWarpToBrainrot(brainrot)
    local hitbox = brainrot and brainrot:FindFirstChild("BrainrotHitbox")
    if hitbox then
        local offset = Vector3.new(0, 1, 3)
        HumanoidRootPart.CFrame = CFrame.new(hitbox.Position + offset, hitbox.Position)
    end
end

-- improved auto clicker using VirtualUser for reliability
local function DoClick()
    -- simulate press & release
    pcall(function()
        VirtualUser:Button1Down(Vector2.new(0, 0))
        task.wait(0.03)
        VirtualUser:Button1Up(Vector2.new(0, 0))
    end)
end

Main:Toggle({
    Title = "Auto Farm",
    Desc  = "Automatically Attacks the BRAINROTS",
    Default = false,
    Callback = function(v)
    AutoFarm = v
    autoClicking = v

    if v then
        EquipBat()
            UpdateBrainrotsCache()

            -- AUTO CLICKER
            task.spawn(function()
                while autoClicking do
                    if Character and Character:FindFirstChild(HeldToolName) then
                        DoClick()
                    end
                    task.wait(ClickInterval)
                end
            end)

            -- AUTO EQUIP
            task.spawn(function()
                while AutoFarm do
                    if Character and not Character:FindFirstChild(HeldToolName) then
                        EquipBat()
                    end
                    task.wait(0.5)
                end
            end)

            -- BRAINROTS CACHE REFRESH
            task.spawn(function()
                while AutoFarm do
                    UpdateBrainrotsCache()
                    task.wait(1)
                end
            end)

            -- AUTO FARM BRAINROT
            task.spawn(function()
                while AutoFarm do
                    local currentTarget = GetNearestBrainrot()
                    if not currentTarget then
                        task.wait(0.5)
                        continue
                    end
                    if currentTarget and currentTarget:FindFirstChild("BrainrotHitbox") then
                        InstantWarpToBrainrot(currentTarget)
                        pcall(function()
                            local remotes = GetRemotesFolder()
                            if remotes and remotes:FindFirstChild("AttacksServer") and remotes.AttacksServer:FindFirstChild("WeaponAttack") then
                                remotes.AttacksServer.WeaponAttack:FireServer({ { target = currentTarget.BrainrotHitbox } })
                            else
                                -- fallback to generic path (keeps original path from script)
                                local ok, _ = pcall(function()
                                    ReplicatedStorage.Remotes.AttacksServer.WeaponAttack:FireServer({ { target = currentTarget.BrainrotHitbox } })
                                end)
                            end
                        end)
                    end
                    task.wait(ClickInterval)
                end
            end)

        else
            autoClicking = false
        end
    end
})

-- auto colect

local function GetNearestPlot()
    local nearestPlot = nil
    local minDist = math.huge
    for _, plot in ipairs(Workspace.Plots:GetChildren()) do
        if plot:IsA("Folder") then
            local center = plot:FindFirstChild("Center") or plot:FindFirstChildWhichIsA("BasePart")
            if center then
                local dist = (HumanoidRootPart.Position - center.Position).Magnitude
                if dist < minDist then
                    minDist = dist
                    nearestPlot = plot
                end
            end
        end
    end
    return nearestPlot
end

local function CollectFromPlot(plot)
    if not plot then return end
    local brainrotsFolder = plot:FindFirstChild("Brainrots")
    if not brainrotsFolder then return end

    for i = 1, 17 do
        local slot = brainrotsFolder:FindFirstChild(tostring(i))
        if slot and slot:FindFirstChild("Brainrot") then
            local brainrot = slot:FindFirstChild("Brainrot")
            if brainrot:FindFirstChild("BrainrotHitbox") then
                local hitbox = brainrot.BrainrotHitbox
                local offset = Vector3.new(0, 1, 3)
                HumanoidRootPart.CFrame = CFrame.new(hitbox.Position + offset, hitbox.Position)
                task.wait(0.2)
                pcall(function()
                    local remotes = GetRemotesFolder()
                    if remotes and remotes:FindFirstChild("AttacksServer") and remotes.AttacksServer:FindFirstChild("WeaponAttack") then
                        remotes.AttacksServer.WeaponAttack:FireServer({ { target = hitbox } })
                    else
                        ReplicatedStorage.Remotes.AttacksServer.WeaponAttack:FireServer({ { target = hitbox } })
                    end
                end)
            end
        end
    end
end

Collect:Section({ Title = "Auto Collect", Icon = "hand-coins" })

Collect:Slider({
    Title = "Auto Collect Delay (sec)",
    Description = "Set delay time between collections",
    Value = {Min = 1, Max = 60, Default = 5},
    Step = 1,
    Callback = function(val)
        AutoCollectDelay = val
    end
})

Collect:Toggle({
    Title = "Auto Collect Money",
    Default = false,
    Callback = function(state)
        AutoCollect = state
        if state then
            task.spawn(function()
                while AutoCollect do
                    local nearestPlot = GetNearestPlot()
                    if nearestPlot then
                        CollectFromPlot(nearestPlot)
                    end
                    task.wait(AutoCollectDelay)
                end
            end)
        end
    end
})

Collect:Toggle({
    Title = "Auto Collect Money V2 (PATCHED)",
    Description = "Automatically Collect Without Teleport",
    Default = false,
    Callback = function(state)
        if state then
            task.spawn(function()
                while state do
                    local args = {
                        {
                            [2] = "\004"
                        }
                    }
                    game:GetService("ReplicatedStorage"):WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args))
                    task.wait(1)
                end
            end)
        end
    end
})

-- collect

Collect:Section({ Title = "Auto Equip", Icon = "star" })

Collect:Toggle({
    Title = "Auto Equip Brainrot (PATCHED)",
    Description = "Automatically Equip Best Brainrot",
    Default = false,
    Callback = function(state)
        if state then
            task.spawn(function()
                while state do
                    local args = {
                        {
                            [2] = "\004"
                        }
                    }
                    game:GetService("ReplicatedStorage"):WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args))
                    task.wait(1)
                end
            end)
        end
    end
})

-- sell

Sell:Section({ Title = "Auto Sell", Icon = "dollar-sign" })

Sell:Toggle({
    Title = "Sell Brainrot All",
    Default = false,
    Callback = function(state)
        SellBrainrot = state
    end
})

Sell:Toggle({
    Title = "Sell Plants All",
    Default = false,
    Callback = function(state)
        SellPlant = state
    end
})

Sell:Section({ Title = "Sell Everything", Icon = "gem" })

Sell:Toggle({
    Title = "Sell Both All",
    Default = false,
    Callback = function(state)
        SellEverything = state
    end
})

-- shop ui

Shop:Section({ Title = "Buy Seed", Icon = "leaf" })

Shop:Dropdown({
    Title = "Select Seed",
    Values = shop.seedList,
    Multi = true,
    Callback = function(values)
        selectedSeeds = values
    end
})

-- Auto Buy Selected Seed
Shop:Toggle({
    Title = "Auto Buy Seed (Selected)",
    Default = false,
    Callback = function(state)
        AutoBuySelectedSeed = state
        if state then
            task.spawn(function()
                while AutoBuySelectedSeed do
                    for _, seed in ipairs(selectedSeeds) do
                        local args = {{ seed, "\b" }}
                        game:GetService("ReplicatedStorage"):WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args))
                        task.wait(0.5)
                    end
                    task.wait(1)
                end
            end)
        end
    end
})

-- Auto Buy All Seed
Shop:Toggle({
    Title = "Auto Buy Seed (All)",
    Default = false,
    Callback = function(state)
        AutoBuyAllSeed = state
        if state then
            task.spawn(function()
                while AutoBuyAllSeed do
                    for _, seed in ipairs(shop.seedList) do
                        local args = {{ seed, "\b" }}
                        game:GetService("ReplicatedStorage"):WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args))
                        task.wait(0.5)
                    end
                    task.wait(1)
                end
            end)
        end
    end
})

-- gear

Shop:Section({ Title = "Buy Gear", Icon = "package" })

Shop:Dropdown({
    Title = "Select Gear",
    Values = shop.gearList,
    Multi = true,
    Callback = function(values)
        selectedGears = values
    end
})

-- Auto Buy Selected Gear
Shop:Toggle({
    Title = "Auto Buy Gear (Selected)",
    Default = false,
    Callback = function(state)
        AutoBuySelectedGear = state
        if state then
            task.spawn(function()
                while AutoBuySelectedGear do
                    for _, gear in ipairs(selectedGears) do
                        local args = {{ gear, "\026" }}
                        game:GetService("ReplicatedStorage"):WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args))
                        task.wait(0.5)
                    end
                    task.wait(1)
                end
            end)
        end
    end
})

-- Auto Buy All Gear
Shop:Toggle({
    Title = "Auto Buy Gear (All)",
    Default = false,
    Callback = function(state)
        AutoBuyAllGear = state
        if state then
            task.spawn(function()
                while AutoBuyAllGear do
                    for _, gear in ipairs(shop.gearList) do
                        local args = {{ gear, "\026" }}
                        game:GetService("ReplicatedStorage"):WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args))
                        task.wait(0.5)
                    end
                    task.wait(1)
                end
            end)
        end
    end
})

-- ====================== LOOPS ======================
-- Selling loop uses safe pcall and only fires when toggled
task.spawn(function()
    while task.wait(0.69) do
        if SellBrainrot or SellPlant or SellEverything then
            local remotes = GetRemotesFolder()
            if remotes and remotes:FindFirstChild("ItemSell") then
                pcall(function() remotes.ItemSell:FireServer() end)
            else
                pcall(function() ReplicatedStorage.Remotes.ItemSell:FireServer() end)
            end
        end
    end
end)

-- Auto buy loop (fixed variable names and safer remote calls)
task.spawn(function()
    while task.wait(0.95) do
        if AutoBuyGear and #selectedGears > 0 then
            local bn = GetBridgeNet2()
            for _, g in ipairs(selectedGears) do
                local args = {{g, "\026"}}
                if bn and bn:FindFirstChild("dataRemoteEvent") then
                    pcall(function() bn.dataRemoteEvent:FireServer(unpack(args)) end)
                else
                    pcall(function() ReplicatedStorage:WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args)) end)
                end
                task.wait(0.1)
            end
        end

        if AutoBuySeed and #selectedSeeds > 0 then
            local bn = GetBridgeNet2()
            for _, s in ipairs(selectedSeeds) do
                local args = {{s, "\b"}}
                if bn and bn:FindFirstChild("dataRemoteEvent") then
                    pcall(function() bn.dataRemoteEvent:FireServer(unpack(args)) end)
                else
                    pcall(function() ReplicatedStorage:WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args)) end)
                end
                task.wait(0.1)
            end
        end

        if AutoBuyAllGear then
            local bn = GetBridgeNet2()
            for _, g in ipairs(gearList) do
                local args = {{g, "\026"}}
                if bn and bn:FindFirstChild("dataRemoteEvent") then
                    pcall(function() bn.dataRemoteEvent:FireServer(unpack(args)) end)
                else
                    pcall(function() ReplicatedStorage:WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args)) end)
                end
                task.wait(0.12)
            end
        end

        if AutoBuyAllSeed then
            local bn = GetBridgeNet2()
            for _, s in ipairs(seedList) do
                local args = {{s, "\b"}}
                if bn and bn:FindFirstChild("dataRemoteEvent") then
                    pcall(function() bn.dataRemoteEvent:FireServer(unpack(args)) end)
                else
                    pcall(function() ReplicatedStorage:WaitForChild("BridgeNet2"):WaitForChild("dataRemoteEvent"):FireServer(unpack(args)) end)
                end
                task.wait(0.12)
            end
        end
    end
end)

Info = InfoTab

local ui = l
local InviteCode = "5MWnDsEnbw"
local DiscordAPI = "https://discord.com/api/v10/invites/" .. InviteCode .. "?with_counts=true&with_expiration=true"
local function LoadDiscordInfo()
    local success, result = pcall(function()
        return game:GetService("HttpService"):JSONDecode(ui.Creator.Request({
            Url = DiscordAPI,
            Method = "GET",
            Headers = {
                ["User-Agent"] = "RobloxBot/1.0",
                ["Accept"] = "application/json"
            }
        }).Body)
    end)

    if success and result and result.guild then
        local DiscordInfo = Info:Paragraph({
            Title = result.guild.name,
            Desc = ' <font color="#52525b">•</font> Member Count : ' .. tostring(result.approximate_member_count) ..
                '\n <font color="#16a34a">•</font> Online Count : ' .. tostring(result.approximate_presence_count),
            Image = "rbxassetid://128130788295246",
            ImageSize = 42,
        })

        Info:Button({
            Title = "Update Info",
            Callback = function()
                local updated, updatedResult = pcall(function()
                    return game:GetService("HttpService"):JSONDecode(ui.Creator.Request({
                        Url = DiscordAPI,
                        Method = "GET",
                    }).Body)
                end)

                if updated and updatedResult and updatedResult.guild then
                    DiscordInfo:SetDesc(
                        ' <font color="#52525b"> </font> Member Count : ' .. tostring(updatedResult.approximate_member_count) ..
                        '\n <font color="#16a34a"> </font> Online Count : ' .. tostring(updatedResult.approximate_presence_count)
                    )
                end
            end
        })

        Info:Button({
            Title = "Copy Our Discord Server Invite Link",
			Desc = "Click to copy our discord server invite link",
            Callback = function()
            setclipboard(tostring("https://discord.gg/" .. InviteCode))
            Library:Notify({
            Title = "Discord Server Link Copied!",
            Content = "Copied! in the clipboard",
            Duration = 2, 
            Icon = "check",
        })
			end
        })
    else
        Info:Paragraph({
            Title = "Error fetching Discord Info",
            Desc = game:GetService("HttpService"):JSONEncode(result),
            Image = "triangle-alert",
            ImageSize = 26,
            Color = "Red",
        })
    end
end

LoadDiscordInfo()

Features & Information

OP CRACK!

Community Comments (5)

thomaseashthomaseashOct 4, 2025

how do we put these in to make them work

Replying to @thomaseash
ScriptCracksScriptCracksOct 4, 2025

@thomaseash put them into any executor

Aura67Aura67Oct 4, 2025

What is a executor

SyrexGenesisXSyrexGenesisXOct 5, 2025

Thanks now I can be a skidder

ZearxZearxOct 8, 2025(edited)

L script

More Scripts for [🐰] Plants & Brainrots 🌻