Better toad rain F3X
Key RequiredUniversal

Better toad rain F3X

Universal ScriptThatKittyyyGDThatKittyyyGD 11.6K views 553 executesUpdated Mar 19, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•252 lines (5889 chars)
-- Rain Toad F3X (Better) Script By ItsKittyyyGD

local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local tool

for i, v in player:GetDescendants() do
    if v.Name == "SyncAPI" then
        tool = v.Parent
    end
end

for i, v in game.ReplicatedStorage:GetDescendants() do
    if v.Name == "SyncAPI" then
        tool = v.Parent
    end
end

local remote = tool.SyncAPI.ServerEndpoint

function _(args)
    remote:InvokeServer(unpack(args))
end

function SetCollision(part, boolean)
    local args = {
        [1] = "SyncCollision",
        [2] = {
            [1] = {
                ["Part"] = part,
                ["CanCollide"] = boolean
            }
        }
    }
    _(args)
end

function SetAnchor(boolean, part)
    local args = {
        [1] = "SyncAnchor",
        [2] = {
            [1] = {
                ["Part"] = part,
                ["Anchored"] = boolean
            }
        }
    }
    _(args)
end

function CreatePart(cf, parent)
    local args = {
        [1] = "CreatePart",
        [2] = "Normal",
        [3] = cf,
        [4] = parent
    }
    _(args)
end

function Resize(part, size, cf)
    local args = {
        [1] = "SyncResize",
        [2] = {
            [1] = {
                ["Part"] = part,
                ["CFrame"] = cf,
                ["Size"] = size
            }
        }
    }
    _(args)
end

function AddMesh(part)
    local args = {
        [1] = "CreateMeshes",
        [2] = {
            [1] = {
                ["Part"] = part
            }
        }
    }
    _(args)
end

function SetMesh(part, meshid)
    local args = {
        [1] = "SyncMesh",
        [2] = {
            [1] = {
                ["Part"] = part,
                ["MeshId"] = "rbxassetid://" .. meshid
            }
        }
    }
    _(args)
end

function SetTexture(part, texid)
    local args = {
        [1] = "SyncMesh",
        [2] = {
            [1] = {
                ["Part"] = part,
                ["TextureId"] = "rbxassetid://" .. texid
            }
        }
    }
    _(args)
end

function MeshResize(part, size)
    local args = {
        [1] = "SyncMesh",
        [2] = {
            [1] = {
                ["Part"] = part,
                ["Scale"] = size
            }
        }
    }
    _(args)
end

function SetName(part, stringg)
    local args = {
        [1] = "SetName",
        [2] = {
            [1] = workspace.Part
        },
        [3] = stringg
    }
    _(args)
end

function Sky(id)
    local hrp = char:WaitForChild("HumanoidRootPart")
    local cf = hrp.CFrame
    CreatePart(CFrame.new(cf.Position + Vector3.new(0, 6, 0)), workspace)
    for _, v in workspace:GetDescendants() do
        if v:IsA("BasePart") and v.CFrame.Position == cf.Position + Vector3.new(0, 6, 0) then
            SetAnchor(true, v)
            AddMesh(v)
            SetMesh(v, "111891702759441")
            SetTexture(v, id)
            MeshResize(v, Vector3.new(8000, 8000, 8000))
        end
    end
end

local function createRainToads()
    while true do
        wait(0.3)
        if player.Character and player.Character:FindFirstChild("Humanoid") and player.Character.Humanoid.Health > 0 then
            local hrpcf = player.Character.HumanoidRootPart.CFrame
            local x = hrpcf.x
            local z = hrpcf.z
            local randint = math.random(-600, 600)
            local randint2 = math.random(-600, 600)
            local xloc = randint + x
            local zloc = randint2 + z
            local cf = player.Character.HumanoidRootPart.CFrame.y + 800  

            spawn(function()
                local newToad = CreatePart(CFrame.new(math.floor(xloc), math.random(cf, cf + 400), math.floor(zloc)), workspace)
                for i, v in game.Workspace:GetDescendants() do
                    if v.Name == "Part" and v.Parent == workspace and v.CFrame.x == math.floor(xloc) and v.CFrame.z == math.floor(zloc) then
                        SetName(v, "MiniToad")
                        SetAnchor(false, v)
                        AddMesh(v)
                        
                        SetMesh(v, "7234998844")
                        SetTexture(v, "1009824086")
                        SetCollision(v, false)
                        v.Orientation = Vector3.new(0, 0, 0)

                        local sound = Instance.new("Sound", v)
                        sound.SoundId = "rbxassetid://153752123"
                        sound.Volume = 10
                        sound.PlayOnRemove = true
                        sound:Destroy()
                    end
                end
            end)
        else
            wait(1)
        end
    end
end

coroutine.wrap(createRainToads)()

Sky("201208408")
local player = game.Players.LocalPlayer
local char = player.Character
local tool

for i, v in player:GetDescendants() do
    if v.Name == "SyncAPI" then
        tool = v.Parent
    end
end

for i, v in game.ReplicatedStorage:GetDescendants() do
    if v.Name == "SyncAPI" then
        tool = v.Parent
    end
end

local remote = tool.SyncAPI.ServerEndpoint

function _(args)
    remote:InvokeServer(unpack(args))
end

function DestroyPart(part)
    local args = {
        [1] = "Remove",
        [2] = {
            [1] = part
        }
    }
    _(args)
end

function Punish(player)
    local char = player.Character
    DestroyPart(char)
end

coroutine.wrap(function()
    while true do
        for i, v in game.Players:GetPlayers() do
            pcall(function()
                Punish(v)
            end)
        end
        task.wait(0.0)
    end
end)()

local msg = coroutine.create(function()
    while task.wait(0.4) do
        local msgInstance = Instance.new("Message", workspace)
        msgInstance.Text = "Get Toadroasted you bacon haired bozos"
        task.wait(0.4)
        msgInstance:Destroy()
    end
end)

coroutine.resume(msg)

Features & Information

It is better than the old toad rain (it is already discontinued) use this version.

Community Comments (8)

ThatKittyyyGDThatKittyyyGDMar 19, 2025(edited)

REMAKED

Lordof_guisCreatorLordof_guisCreatorMay 30, 2025

Fe f3x or no?

ThatKittyyyGDThatKittyyyGDMay 31, 2025

Yes

JacksonShowcaserJacksonShowcaserOct 21, 2025(edited)

@ThatKittyyyGD Bro protect your scripts before skids take them. I learned the hard way unfortunately.

Dr_HarkinianDr_HarkinianJan 19, 2026

W

Dr_HarkinianDr_HarkinianJan 19, 2026

Wait at msgInstance is not fe. Im will remake this

ThatKittyyyGDThatKittyyyGDJan 22, 2026

Tbh this is a old script and gpted why i want obfuscate it when skids have better things than ts?

GlitchyBeHaxxinGlitchyBeHaxxinApr 22, 2026

can I use this? I'll leave credit

More Scripts for Universal Scripts