>_ scriptsbin
Steal An Egg icon

Steal An Egg Scripts  — all 85 in one page

undetected 58 keyless 27 key required 1 patched simulation updated 2 Nov 2026

Steal An Egg is built around one loop: get into another player's base, take their biggest egg, get out. Every script on this page shortens that loop — auto-steal with target picking, teleport to the highest-value eggs, and spawn predictors that tell you what is about to drop before it does.

The page holds the full set, keyless and keyed, sorted by useful votes, so the working ones stay on top. Hubs that predict egg and rift spawns break on the most updates — check the last-updated date on a block before copying it, and start from the top of the list.

Note. Egg and rift predictor hubs need the game loaded fully before they read spawn tables. Attach after you spawn in, not on the menu.

01

BlyxoHub | Steal An Egg (KEYLESS)

keyless working mobile Steal An Egg (KEYLESS)

blyxo hub has the unique feature to veiw what pets youre getting and gte it the egg stealing way is by flying away from the monster and egg esp with god mode i think it has many more features if you have issues feel free to comment in the comments and stuff🥃

loadstring(game:HttpGet("https://flowauth.net/v1/loaders/69d3463240384f3a73fbe32c178093a2.lua"))()
flowauth.net updated 2 Nov 2026 43.7k views 57 loader source ↗
06

Visual Spawner for All Pets and Eggs | Steal An Egg GUI: Spawn, Give, Rain!

keyless working Steal An Egg GUI: SpawnGiveRain!

A simple Visual Spawner script for Roblox Steal An Egg letting you select any pets or eggs which you can spawn, give, place and equip

loadstring(game:HttpGet("https://raw.githubusercontent.com/bugxiefun/roblox-scripts/refs/heads/main/rblxscripts-stealanegg-spawner"))()
raw.githubusercontent.com updated 2 Nov 2026 39.7k views 32 loader source ↗
15

Pulse hub - BEST FREE AND KEYLESS STEAL AN EGG SCRIPT Auto steal all auto place all auto hatch ready

keyless working mobile Egg Guard (Reclaim Stolen Eggs)Anti Ragdoll ShieldScramble Vault Auto OpenerVault Quest Auto CompleteLost Parts & Loose Drop CollectorDrone Hunter (Dr Scramble Event)Event Shop Auto Purchase

Egg Guard (Reclaim Stolen Eggs)

loadstring(game:HttpGet("https://raw.githubusercontent.com/PulseZax/Loader/refs/heads/main/.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 15.3k views 18 loader source ↗
16

Project Madara Steal An Egg Hub

keyless working

Roblox Steal An Egg script Project-Madara Hub GUI with decent functions to start progressing and automating features within steal an egg

loadstring(game:HttpGet("https://raw.githubusercontent.com/IsThisMe01/Project-Madara/refs/heads/main/stealanegg"))()
raw.githubusercontent.com updated 2 Nov 2026 5.5k views 16 loader source ↗
17

Steal An Egg Pet Spawner (Open Source)

keyless working

Steal An Egg Pet Spawner Scam Script Found , Deobfuscated and Removed all Unsafe Things in the Script.

--[[
inline updated 2 Nov 2026 11.9k views 14
full source (41023 chars)
--[[
    VALT :: Pet Spawner
    Clean recode of the decompiled script.

    Cosmetic group gate removed entirely.
]]

--=====================================================================
-- Services
--=====================================================================
local Players           = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService        = game:GetService("RunService")
local UserInputService  = game:GetService("UserInputService")
local TweenService      = game:GetService("TweenService")
local Workspace         = game:GetService("Workspace")
local Debris            = game:GetService("Debris")

local LocalPlayer = Players.LocalPlayer
local Camera      = Workspace.CurrentCamera

--=====================================================================
-- Kill previous instance
--=====================================================================
if getgenv().__VALT_SPAWNER then
    pcall(getgenv().__VALT_SPAWNER.unload)
end

--=====================================================================
-- Config
--=====================================================================
local CONFIG = {
    MAX_SPAWNS     = 40,
    SPAWN_DISTANCE = 12,
    SCALE_MULT     = 1,

    SPIN           = true,
    FLOAT          = false,
    OWN_PLOT_ONLY  = true,
    GROUND         = true,
    ANIMATE        = true,
    NAMETAG        = true,
    ANCHORED       = true,

    GRID_COLUMNS   = (UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled) and 2 or 3,

    GIVE_TOOL      = true,
    HAND_MAX_STUDS = 4,

    MONEY_POPUP    = true,
    PAY_INTERVAL   = 1,
    CASH_VISUAL    = true,
}

--=====================================================================
-- State
--=====================================================================
local running      = true
local connections  = {}
local activeSpawns = {}
local activeTools  = {}
local pets         = {}
local rarityList   = { "All" }
local rarityRank   = {}
local selectedPet  = nil
local filter       = { text = "", rarity = "All" }

local UI = {
    window      = nil,
    gridTab     = nil,
    rows        = {},
    viewport    = nil,
    counter     = nil,
    previewInfo = nil,
}

--=====================================================================
-- Utility
--=====================================================================
local function track(conn)
    connections[#connections + 1] = conn
    return conn
end

local function abbreviateNumber(n)
    n = tonumber(n) or 0
    local units = {
        { 1e12, "T" },
        { 1e9,  "B" },
        { 1e6,  "M" },
        { 1e3,  "K" },
    }
    for _, unit in ipairs(units) do
        if n >= unit[1] then
            return string.format("%.2f", n / unit[1]):gsub("%.?0+$", "") .. unit[2]
        end
    end
    return tostring(math.floor(n))
end

local function getCharacterRoot()
    local char = LocalPlayer.Character
    if not char then return nil end
    return char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart
end

--=====================================================================
-- Parse assets
--=====================================================================
local Directory = require(ReplicatedStorage.Data.Assets).Directory

for key, entry in pairs(Directory) do
    local rarityInfo  = entry.Rarity or {}
    local rarityName  = tostring(rarityInfo._id or rarityInfo.DisplayName or "Unknown")

    local pet = {
        id       = key,
        name     = tostring(entry.DisplayName or key),
        icon     = tostring(entry.Icon or ""),
        eggIcon  = entry.Egg and tostring(entry.Egg.Icon or "") or "",
        rarity   = rarityName,
        rank     = tonumber(rarityInfo.RarityNumber) or 0,
        color    = typeof(rarityInfo.Color) == "Color3" and rarityInfo.Color or Color3.fromRGB(200, 200, 200),
        rate     = tonumber(entry.EarningRate) or 0,
        scale    = tonumber(entry.BaseModelScale) or 1,
        idle     = entry.Animations and entry.Animations.Idle or nil,
    }

    pets[#pets + 1] = pet

    if rarityRank[rarityName] == nil then
        rarityRank[rarityName] = pet.rank
        rarityList[#rarityList + 1] = rarityName
    end
end

table.sort(pets, function(a, b)
    if a.rank ~= b.rank then return a.rank > b.rank end
    return a.name < b.name
end)

table.sort(rarityList, function(a, b)
    if a == "All" then return true end
    if b == "All" then return false end
    return (rarityRank[a] or 0) > (rarityRank[b] or 0)
end)

--=====================================================================
-- World helpers
--=====================================================================
local function getSpawnFolder()
    local folder = Workspace:FindFirstChild("__ValtSpawns")
    if not folder then
        folder = Instance.new("Folder")
        folder.Name = "__ValtSpawns"
        folder.Parent = Workspace
    end
    return folder
end

local function getOwnPlot()
    local plots = Workspace:FindFirstChild("Plots")
    if not plots then return nil end

    local myName = LocalPlayer.Name
    for _, plot in ipairs(plots:GetChildren()) do
        local sign = plot:FindFirstChild("PlotSign")
        if sign then
            for _, d in ipairs(sign:GetDescendants()) do
                if d:IsA("TextLabel") and d.Text == myName then
                    return plot
                end
            end
        end
    end
    return nil
end

local function getPlotSpawnPosition(index)
    local plot = getOwnPlot()
    if not plot then return nil end

    local center = plot:FindFirstChild("CenterPoint") or plot:FindFirstChild("SpawnPoint")
    if not center then return nil end

    local i      = index or 0
    local angle  = (i % 10) * (math.pi * 0.2)
    local radius = math.floor(i / 10) * 3.5 + 5

    return center.Position + Vector3.new(math.cos(angle) * radius, 0, math.sin(angle) * radius)
end

local function resolveGroundPosition(pos, model)
    if not CONFIG.GROUND then
        return pos + Vector3.new(0, model:GetExtentsSize().Y * 0.5, 0)
    end

    local params = RaycastParams.new()
    params.FilterType = Enum.RaycastFilterType.Exclude
    params.FilterDescendantsInstances = { model, LocalPlayer.Character, getSpawnFolder() }
    params.IgnoreWater = true

    local result = Workspace:Raycast(pos + Vector3.new(0, 40, 0), Vector3.new(0, -300, 0), params)
    local y = result and result.Position.Y or pos.Y

    return Vector3.new(pos.X, y + model:GetExtentsSize().Y * 0.5, pos.Z)
end

--=====================================================================
-- Visual setup
--=====================================================================
local function attachNametag(model, pet)
    local primary = model.PrimaryPart
    if not primary then return end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "ValtTag"
    billboard.Size = UDim2.fromOffset(220, 72)
    billboard.StudsOffsetWorldSpace = Vector3.new(0, model:GetExtentsSize().Y * 0.65 + 2, 0)
    billboard.AlwaysOnTop = true
    billboard.MaxDistance = 400
    billboard.Parent = primary

    if pet.icon ~= "" then
        local img = Instance.new("ImageLabel")
        img.BackgroundTransparency = 1
        img.AnchorPoint = Vector2.new(0.5, 0)
        img.Position = UDim2.new(0.5, 0, 0, 0)
        img.Size = UDim2.fromOffset(34, 34)
        img.Image = pet.icon
        img.ScaleType = Enum.ScaleType.Fit
        img.Parent = billboard
    end

    local title = Instance.new("TextLabel")
    title.BackgroundTransparency = 1
    title.Position = UDim2.new(0, 0, 0, 34)
    title.Size = UDim2.new(1, 0, 0, 22)
    title.Font = Enum.Font.GothamBold
    title.TextScaled = true
    title.TextColor3 = Color3.new(1, 1, 1)
    title.TextStrokeTransparency = 0.4
    title.Text = pet.name
    title.Parent = billboard

    local sub = Instance.new("TextLabel")
    sub.BackgroundTransparency = 1
    sub.Position = UDim2.new(0, 0, 0, 56)
    sub.Size = UDim2.new(1, 0, 0, 16)
    sub.Font = Enum.Font.GothamMedium
    sub.TextScaled = true
    sub.TextColor3 = pet.color
    sub.TextStrokeTransparency = 0.5
    sub.Text = string.format("%s | $%s/s", pet.rarity, abbreviateNumber(pet.rate))
    sub.Parent = billboard
end

local function setupModel(model, pet)
    local scale = CONFIG.SCALE_MULT * (pet.scale or 1)
    if math.abs(scale - 1) > 0.001 then
        pcall(function() model:ScaleTo(scale) end)
    end

    local hasJoints = false
    for _, d in ipairs(model:GetDescendants()) do
        if d:IsA("Motor6D") or d:IsA("Weld") or d:IsA("WeldConstraint") then
            hasJoints = true
            break
        end
    end

    local primary = model.PrimaryPart

    for _, part in ipairs(model:GetDescendants()) do
        if part:IsA("BasePart") then
            part.CanCollide = false
            part.CanQuery  = false
            part.CanTouch  = false
            part.Massless  = true

            local anchored = CONFIG.ANCHORED
            if anchored then
                anchored = (not hasJoints) or part == primary
            end
            part.Anchored = anchored
        end
    end

    if primary then
        primary.Anchored = CONFIG.ANCHORED
    end

    return hasJoints
end

local function playIdle(model, pet)
    if not (CONFIG.ANIMATE and pet.idle) then return end

    local ok, err = pcall(function()
        local host = model:FindFirstChildOfClass("Model") or model
        local controller = host:FindFirstChildOfClass("AnimationController")
            or host:FindFirstChildOfClass("Humanoid")

        if not controller then
            controller = Instance.new("AnimationController")
            controller.Parent = host
        end

        local animator = controller:FindFirstChildOfClass("Animator")
        if not animator then
            animator = Instance.new("Animator")
            animator.Parent = controller
        end

        local anim
        if typeof(pet.idle) == "Instance" and pet.idle:IsA("Animation") then
            anim = pet.idle:Clone()
        else
            anim = Instance.new("Animation")
            anim.AnimationId = tostring(pet.idle)
        end

        local trackAnim = animator:LoadAnimation(anim)
        trackAnim.Looped = true
        trackAnim:Play()
    end)

    if not ok then
        warn("[VALT SPAWNER] idle animation failed for " .. pet.name .. ": " .. tostring(err))
    end
end

--=====================================================================
-- Spawn limit
--=====================================================================
local function enforceSpawnLimit()
    while #activeSpawns > CONFIG.MAX_SPAWNS do
        local record = table.remove(activeSpawns, 1)
        if record and record.model then
            pcall(function() record.model:Destroy() end)
        end
    end
end

--=====================================================================
-- Input tracking for tool placement
--=====================================================================
local lastTouchPos = nil

track(UserInputService.TouchTap:Connect(function(pos)
    if pos and pos[1] then lastTouchPos = pos[1] end
end))

track(UserInputService.TouchEnded:Connect(function(part)
    lastTouchPos = part.Position
end))

local function getSpawnPosition()
    local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled

    if isMobile and lastTouchPos and Camera then
        local ray = Camera:ViewportPointToRay(lastTouchPos.X, lastTouchPos.Y)
        local params = RaycastParams.new()
        params.FilterType = Enum.RaycastFilterType.Exclude
        params.FilterDescendantsInstances = { LocalPlayer.Character, Workspace:FindFirstChild("__ValtSpawns") }
        local result = Workspace:Raycast(ray.Origin, ray.Direction * 600, params)
        if result then return result.Position end
    end

    local ok, mouse = pcall(function() return LocalPlayer:GetMouse() end)
    if ok and mouse and mouse.Hit and mouse.Target then
        return mouse.Hit.Position
    end

    local root = getCharacterRoot()
    if root then
        return root.Position + root.CFrame.LookVector * CONFIG.SPAWN_DISTANCE
    end

    return nil
end

--=====================================================================
-- Spawn
--=====================================================================
local function spawnPet(pet, positionOverride)
    if not running then return false, "unloaded" end

    local modelsFolder = ReplicatedStorage:FindFirstChild("AssetModels")
    if modelsFolder then
        modelsFolder = modelsFolder:FindFirstChild(pet.id)
    end
    if not modelsFolder then
        return false, "no model for " .. pet.id
    end

    local root = getCharacterRoot()
    if not root then
        return false, "character not loaded"
    end

    local clone = modelsFolder:Clone()
    clone.Name = "VALT_" .. pet.id

    local jointed = setupModel(clone, pet)
    clone.Parent = getSpawnFolder()

    local targetPos
    if CONFIG.OWN_PLOT_ONLY then
        targetPos = getPlotSpawnPosition(#activeSpawns)
    end

    if not targetPos then
        if typeof(positionOverride) == "Vector3" then
            targetPos = positionOverride
        else
            local index = #activeSpawns
            local angle = (index % 12) * (math.pi / 6)
            local dist  = CONFIG.SPAWN_DISTANCE + math.floor(index / 12) * 6
            targetPos = root.Position + Vector3.new(math.cos(angle) * dist, 0, math.sin(angle) * dist)
        end
    end

    local finalPos = resolveGroundPosition(targetPos, clone)
    local look     = root.Position

    pcall(function()
        clone:PivotTo(CFrame.new(finalPos, Vector3.new(look.X, finalPos.Y, look.Z)))
    end)

    if CONFIG.NAMETAG then
        pcall(attachNametag, clone, pet)
    end

    playIdle(clone, pet)

    local now = os.clock()
    activeSpawns[#activeSpawns + 1] = {
        model     = clone,
        root      = clone.PrimaryPart,
        basePos   = finalPos,
        t0        = now,
        lastPay   = now,
        name      = pet.name,
        rate      = pet.rate,
        tagHeight = clone:GetExtentsSize().Y * 0.65 + 4,
        jointed   = jointed,
    }

    enforceSpawnLimit()
    return true
end

--=====================================================================
-- Clear spawns
--=====================================================================
local function clearSpawns()
    for _, record in ipairs(activeSpawns) do
        if record.model then
            pcall(function() record.model:Destroy() end)
        end
    end
    table.clear(activeSpawns)

    local folder = Workspace:FindFirstChild("__ValtSpawns")
    if folder then
        pcall(function() folder:Destroy() end)
    end
end

--=====================================================================
-- Money popup
--=====================================================================
local function moneyPopup(record)
    if not record.root or not record.root.Parent then return end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "ValtCash"
    billboard.Size = UDim2.fromOffset(150, 40)
    billboard.StudsOffsetWorldSpace = Vector3.new(0, record.tagHeight, 0)
    billboard.AlwaysOnTop = true
    billboard.MaxDistance = 300
    billboard.Adornee = record.root
    billboard.Parent = record.root

    local label = Instance.new("TextLabel")
    label.BackgroundTransparency = 1
    label.Size = UDim2.fromScale(1, 1)
    label.Font = Enum.Font.LuckiestGuy
    label.TextScaled = true
    label.TextColor3 = Color3.fromRGB(80, 235, 105)
    label.TextStrokeColor3 = Color3.fromRGB(10, 45, 15)
    label.TextStrokeTransparency = 0.15
    label.Text = "+$" .. abbreviateNumber(record.rate)
    label.Parent = billboard

    TweenService:Create(billboard,
        TweenInfo.new(1.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
        { StudsOffsetWorldSpace = Vector3.new(0, record.tagHeight + 4.5, 0) }
    ):Play()

    TweenService:Create(label,
        TweenInfo.new(1.1, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
        { TextTransparency = 1, TextStrokeTransparency = 1 }
    ):Play()

    Debris:AddItem(billboard, 1.3)
end

--=====================================================================
-- Tool giving
--=====================================================================
local function giveTool(pet)
    if not running then return false, "unloaded" end

    local modelsFolder = ReplicatedStorage:FindFirstChild("AssetModels")
    if modelsFolder then
        modelsFolder = modelsFolder:FindFirstChild(pet.id)
    end
    if not modelsFolder then
        return false, "no model for " .. pet.id
    end

    local backpack = LocalPlayer:FindFirstChildOfClass("Backpack")
    if not backpack then
        return false, "no backpack"
    end

    local tool = Instance.new("Tool")
    tool.Name = pet.name
    tool.ToolTip = string.format("%s | $%s/s - click to place (one use)", pet.rarity, abbreviateNumber(pet.rate))
    tool.CanBeDropped = false
    tool.RequiresHandle = true
    tool.TextureId = pet.icon

    local handle = Instance.new("Part")
    handle.Name = "Handle"
    handle.Size = Vector3.new(1, 1, 1)
    handle.Transparency = 1
    handle.CanCollide = false
    handle.CanQuery = false
    handle.CanTouch = false
    handle.Massless = true
    handle.Parent = tool

    local clone = modelsFolder:Clone()
    clone.Name = "Pet"

    local size   = clone:GetExtentsSize()
    local maxDim = math.max(size.X, size.Y, size.Z)
    if maxDim > CONFIG.HAND_MAX_STUDS then
        local factor = CONFIG.HAND_MAX_STUDS / maxDim
        pcall(function() clone:ScaleTo(factor ^ 0.5) end)
    end

    local primary = clone.PrimaryPart or clone:FindFirstChildWhichIsA("BasePart", true)

    local hasMotor = false
    for _, d in ipairs(clone:GetDescendants()) do
        if d:IsA("Motor6D") then
            hasMotor = true
            break
        end
    end

    for _, part in ipairs(clone:GetDescendants()) do
        if part:IsA("BasePart") then
            part.Anchored = false
            part.CanCollide = false
            part.CanQuery = false
            part.CanTouch = false
            part.Massless = true
        end
    end

    clone.Parent = tool

    if primary then
        local weld = Instance.new("Weld")
        weld.Part0 = handle
        weld.Part1 = primary
        weld.C0 = CFrame.new(0, clone:GetExtentsSize().Y * 0.4, 0)
        weld.Parent = handle
    end

    if not hasMotor then
        for _, d in ipairs(clone:GetDescendants()) do
            if d:IsA("BasePart") and d ~= primary then
                local wc = Instance.new("WeldConstraint")
                wc.Part0 = primary
                wc.Part1 = d
                wc.Parent = primary
            end
        end
    else
        playIdle(clone, pet)
    end

    tool.Parent = backpack
    activeTools[#activeTools + 1] = tool

    track(tool.Activated:Connect(function()
        local pos = getSpawnPosition()
        local ok, err = spawnPet(pet, pos)
        if not ok then
            warn("[VALT SPAWNER] place failed: " .. tostring(err))
            return
        end

        for i = #activeTools, 1, -1 do
            if activeTools[i] == tool then
                table.remove(activeTools, i)
            end
        end
        pcall(function() tool:Destroy() end)
    end))

    return true
end

local function clearTools()
    for _, tool in ipairs(activeTools) do
        pcall(function() tool:Destroy() end)
    end
    table.clear(activeTools)
end

--=====================================================================
-- Cash visual (fake local counter)
--=====================================================================
local cashVisual = {
    label = nil,
    base  = 0,
    bonus = 0,
    shown = 0,
    ours  = nil,
    conn  = nil,
}

local MULTIPLIERS = { K = 1e3, M = 1e6, B = 1e9, T = 1e12 }

local function parseMoney(text)
    local numStr, suffix = tostring(text):gsub("[%$,%s]", ""):match("^([%d%.]+)(%a*)$")
    if not numStr then return nil end
    local mult = suffix ~= "" and MULTIPLIERS[suffix:upper()] or 1
    if not mult then return nil end
    return (tonumber(numStr) or 0) * mult
end

local function formatMoney(n)
    local units = {
        { 1e12, "T" },
        { 1e9,  "B" },
        { 1e6,  "M" },
        { 1e3,  "K" },
    }
    for _, u in ipairs(units) do
        if n >= u[1] then
            local val = n / u[1]
            local fmt = val >= 100 and "%.0f" or "%.1f"
            return "$" .. string.format(fmt, val):gsub("%.0$", "") .. u[2]
        end
    end
    return "$" .. string.format("%.0f", n)
end

local function findMoneyLabel()
    local playerGui = LocalPlayer:FindFirstChildOfClass("PlayerGui")
    if not playerGui then return nil end

    local hud = playerGui:FindFirstChild("HUD")
    for _, name in ipairs({ "GameHUD", "BottomLeft", "Money", "Value" }) do
        hud = hud and hud:FindFirstChild(name)
    end

    if hud and hud:IsA("TextLabel") then
        return hud
    end

    for _, obj in ipairs(playerGui:GetDescendants()) do
        if obj:IsA("TextLabel") and obj.Text:match("^%$%d") and obj.AbsoluteSize.X > 40 then
            local parent = obj
            while parent do
                if parent:IsA("ScreenGui") then
                    if parent.Enabled then return obj end
                    break
                end
                parent = parent.Parent
            end
        end
    end

    return nil
end

local function hookCashLabel()
    local label = findMoneyLabel()
    if not label then return false end
    if label == cashVisual.label then return true end

    if cashVisual.conn then
        pcall(function() cashVisual.conn:Disconnect() end)
    end

    cashVisual.label = label
    cashVisual.base  = parseMoney(label.Text) or 0
    cashVisual.shown = cashVisual.base + cashVisual.bonus

    cashVisual.conn = track(label:GetPropertyChangedSignal("Text"):Connect(function()
        if label.Text ~= cashVisual.ours then
            cashVisual.base = parseMoney(label.Text) or cashVisual.base
        end
    end))

    return true
end

local function releaseCashLabel()
    if cashVisual.conn then
        pcall(function() cashVisual.conn:Disconnect() end)
    end

    if cashVisual.label and cashVisual.label.Parent then
        pcall(function()
            cashVisual.label.Text = formatMoney(cashVisual.base)
        end)
    end

    cashVisual.label = nil
    cashVisual.conn  = nil
    cashVisual.bonus = 0
    cashVisual.ours  = nil
end

--=====================================================================
-- Heartbeat loop
--=====================================================================
track(RunService.Heartbeat:Connect(function(dt)
    if not running then return end

    local now = os.clock()

    -- Cash visual
    if CONFIG.CASH_VISUAL then
        if not (cashVisual.label and cashVisual.label.Parent) then
            hookCashLabel()
        end

        if cashVisual.label and cashVisual.bonus > 0 then
            local target = cashVisual.base + cashVisual.bonus
            cashVisual.shown = cashVisual.shown + (target - cashVisual.shown) * math.min(1, (dt or 0.016) * 6)
            if math.abs(target - cashVisual.shown) < 1 then
                cashVisual.shown = target
            end
            cashVisual.ours = formatMoney(cashVisual.shown)
            cashVisual.label.Text = cashVisual.ours
        end
    end

    -- Spin/float + payout
    for i = #activeSpawns, 1, -1 do
        local record = activeSpawns[i]

        if not record.model or not record.model.Parent then
            table.remove(activeSpawns, i)
        else
            local shouldRotate = CONFIG.SPIN or CONFIG.FLOAT
            if shouldRotate and record.root and record.root.Anchored then
                local t     = now - record.t0
                local yOff  = CONFIG.FLOAT and math.sin(t * 1.6) * 0.6 or 0
                local yaw   = CONFIG.SPIN and t * 1.1 or 0
                record.root.CFrame = CFrame.new(record.basePos + Vector3.new(0, yOff, 0)) * CFrame.Angles(0, yaw, 0)
            end

            if now - record.lastPay >= CONFIG.PAY_INTERVAL then
                record.lastPay = now
                if CONFIG.MONEY_POPUP then
                    moneyPopup(record)
                end
                if CONFIG.CASH_VISUAL then
                    cashVisual.bonus = cashVisual.bonus + record.rate * CONFIG.PAY_INTERVAL
                end
            end
        end
    end
end))

--=====================================================================
-- Unload
--=====================================================================
local function unload()
    running = false

    for _, conn in ipairs(connections) do
        pcall(function() conn:Disconnect() end)
    end
    table.clear(connections)

    clearSpawns()
    clearTools()
    releaseCashLabel()

    if UI.window then
        pcall(function() UI.window:Destroy() end)
    end

    getgenv().__VALT_SPAWNER = nil
    warn("[VALT SPAWNER] unloaded")
end

--=====================================================================
-- Build UI
--=====================================================================
local function buildUI()
    local ok, WindUI = pcall(function()
        return loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
    end)

    if not ok or not WindUI then
        warn("[VALT SPAWNER] WindUI failed to load: " .. tostring(WindUI))
        return
    end

    local vp = Camera and Camera.ViewportSize or Vector2.new(1280, 720)
    local size
    if UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled then
        size = UDim2.fromOffset(
            math.clamp(math.floor(vp.X * 0.92), 300, 560),
            math.clamp(math.floor(vp.Y * 0.82), 260, 420)
        )
    else
        size = UDim2.fromOffset(620, 480)
    end

    local window = WindUI:CreateWindow({
        Title         = "VALT :: Pet Spawner",
        Icon          = "egg",
        Author        = "Steal An Egg | " .. #pets .. " assets",
        Folder        = "Valt Spawner",
        Size          = size,
        Transparent   = true,
        Theme         = "Dark",
        SideBarWidth  = 165,
        HideSearchBar = false,
        OpenButton    = { Enabled = false },
    })
    UI.window = window

    if getgenv().__VALT_SPAWNER then
        getgenv().__VALT_SPAWNER.window = window
    end

    local petsTab    = window:Tab({ Title = "Pets",    Icon = "paw-print" })
    local previewTab = window:Tab({ Title = "Preview", Icon = "eye" })
    local optionsTab = window:Tab({ Title = "Options", Icon = "settings" })
    UI.gridTab = petsTab

    petsTab:Input({
        Title       = "Search",
        Placeholder = "pet name...",
        Callback    = function(text)
            filter.text = string.lower(tostring(text or ""))
            UI.rebuild()
        end,
    })

    petsTab:Dropdown({
        Title    = "Rarity",
        Values   = rarityList,
        Value    = "All",
        Callback = function(value)
            filter.rarity = tostring(value)
            UI.rebuild()
        end,
    })

    UI.counter = petsTab:Paragraph({
        Title = "Loaded",
        Desc  = #pets .. " assets ready - click a card to spawn",
    })

    petsTab:Divider()

    local function clearRows()
        for _, row in ipairs(UI.rows) do
            local frame = row.ElementFrame
            if typeof(frame) == "Instance" then
                pcall(function() frame:Destroy() end)
            end
        end
        table.clear(UI.rows)
    end

    local rebuildId = 0

    function UI.rebuild()
        rebuildId += 1
        local thisId = rebuildId
        clearRows()

        local filtered = {}
        for _, pet in ipairs(pets) do
            local nameMatch   = filter.text == "" or string.find(string.lower(pet.name), filter.text, 1, true) ~= nil
            local rarityMatch = filter.rarity == "All" or pet.rarity == filter.rarity
            if nameMatch and rarityMatch then
                filtered[#filtered + 1] = pet
            end
        end

        if UI.counter then
            pcall(function()
                UI.counter:SetDesc(#filtered .. " of " .. #pets .. " assets shown - click a card to spawn")
            end)
        end

        task.spawn(function()
            local row
            local col = 0

            for i, pet in ipairs(filtered) do
                if thisId ~= rebuildId or not running then return end

                if col == 0 then
                    row = petsTab:HStack({})
                    UI.rows[#UI.rows + 1] = row
                end

                local btn = row:Button({
                    Title = pet.name,
                    Desc  = string.format("%s | $%s/s", pet.rarity, abbreviateNumber(pet.rate)),
                    Callback = function()
                        selectedPet = pet

                        if CONFIG.GIVE_TOOL then
                            local success, err = giveTool(pet)
                            WindUI:Notify({
                                Title    = success and (pet.name .. " -> backpack") or "tool failed",
                                Content  = success and "equip it, then click to place the pet" or tostring(err),
                                Duration = success and 2 or 4,
                                Icon     = success and "backpack" or "circle-alert",
                            })
                            return
                        end

                        local success, err = spawnPet(pet)
                        WindUI:Notify({
                            Title    = success and (pet.name .. " spawned") or "spawn failed",
                            Content  = success
                                and (pet.rarity .. " | " .. #activeSpawns .. "/" .. CONFIG.MAX_SPAWNS .. " active")
                                or tostring(err),
                            Duration = success and 2 or 4,
                            Icon     = success and "sparkles" or "circle-alert",
                        })
                    end,
                })

                if pet.icon ~= "" then
                    pcall(function() btn:SetThumbnail(pet.icon) end)
                end

                col += 1
                if col >= CONFIG.GRID_COLUMNS then
                    col = 0
                    if i % (CONFIG.GRID_COLUMNS * 4) == 0 then
                        task.wait()
                    end
                end
            end
        end)
    end

    --=================================================================
    -- Preview tab
    --=================================================================
    previewTab:Section({ Title = "Model viewer" })

    local petNames = {}
    for _, pet in ipairs(pets) do
        petNames[#petNames + 1] = pet.name
    end

    local function previewPet(name)
        local pet
        for _, p in ipairs(pets) do
            if p.name == name then pet = p break end
        end
        if not pet then return end

        selectedPet = pet

        local modelsFolder = ReplicatedStorage:FindFirstChild("AssetModels")
        if modelsFolder then modelsFolder = modelsFolder:FindFirstChild(pet.id) end

        if not modelsFolder then
            WindUI:Notify({
                Title    = "no model",
                Content  = pet.id,
                Duration = 3,
                Icon     = "circle-alert",
            })
            return
        end

        if UI.viewport then
            pcall(function()
                UI.viewport:SetObject({ modelsFolder:Clone() })
            end)
        end

        if UI.previewInfo then
            pcall(function()
                UI.previewInfo:SetTitle(pet.name)
                UI.previewInfo:SetDesc(string.format(
                    "Rarity: %s | Earns: $%s/s | Base scale: %.2f",
                    pet.rarity, abbreviateNumber(pet.rate), pet.scale
                ))
                if pet.icon ~= "" then
                    UI.previewInfo:SetImage(pet.icon)
                end
            end)
        end
    end

    previewTab:Dropdown({
        Title    = "Pet",
        Values   = petNames,
        Value    = petNames[1],
        Callback = previewPet,
    })

    UI.previewInfo = previewTab:Paragraph({
        Title     = "-",
        Desc      = "pick a pet",
        Image     = "",
        ImageSize = 48,
    })

    local previewSource = ReplicatedStorage:FindFirstChild("AssetModels")
    if previewSource and pets[1] then
        previewSource = previewSource:FindFirstChild(pets[1].id)
    else
        previewSource = nil
    end

    UI.viewport = previewTab:Viewport({
        Title       = "Model",
        Object      = previewSource and previewSource:Clone() or Instance.new("Model"),
        Height      = 220,
        Interactive = true,
    })

    previewTab:Button({
        Title = "Take into backpack",
        Desc  = "hands you the previewed pet as a tool",
        Callback = function()
            if not selectedPet then return end
            local success, err = giveTool(selectedPet)
            WindUI:Notify({
                Title    = success and (selectedPet.name .. " -> backpack") or "tool failed",
                Content  = success and "equip it, then click to place the pet" or tostring(err),
                Duration = 3,
                Icon     = success and "backpack" or "circle-alert",
            })
        end,
    })

    previewTab:Button({
        Title = "Spawn this one",
        Desc  = "drops the previewed pet in front of you",
        Callback = function()
            if not selectedPet then return end
            local success, err = spawnPet(selectedPet)
            WindUI:Notify({
                Title    = success and (selectedPet.name .. " spawned") or "spawn failed",
                Content  = success
                    and (#activeSpawns .. "/" .. CONFIG.MAX_SPAWNS .. " active")
                    or tostring(err),
                Duration = 3,
                Icon     = success and "sparkles" or "circle-alert",
            })
        end,
    })

    --=================================================================
    -- Options tab
    --=================================================================
    optionsTab:Section({ Title = "Spawn behaviour" })

    optionsTab:Toggle({
        Title    = "Give as backpack tool",
        Desc     = "on = card click hands you the pet, click again in-world to place it",
        Value    = CONFIG.GIVE_TOOL,
        Callback = function(v) CONFIG.GIVE_TOOL = v end,
    })

    optionsTab:Slider({
        Title    = "Held pet size (studs)",
        Step     = 1,
        Value    = { Min = 2, Max = 14, Default = CONFIG.HAND_MAX_STUDS },
        Callback = function(v) CONFIG.HAND_MAX_STUDS = tonumber(v) or 4 end,
    })

    optionsTab:Slider({
        Title    = "Scale multiplier",
        Step     = 0.1,
        Value    = { Min = 0.2, Max = 8, Default = CONFIG.SCALE_MULT },
        Callback = function(v) CONFIG.SCALE_MULT = tonumber(v) or 1 end,
    })

    optionsTab:Slider({
        Title    = "Spawn distance",
        Step     = 1,
        Value    = { Min = 4, Max = 60, Default = CONFIG.SPAWN_DISTANCE },
        Callback = function(v) CONFIG.SPAWN_DISTANCE = tonumber(v) or 12 end,
    })

    optionsTab:Slider({
        Title    = "Max active spawns",
        Step     = 1,
        Value    = { Min = 1, Max = 120, Default = CONFIG.MAX_SPAWNS },
        Callback = function(v)
            CONFIG.MAX_SPAWNS = math.floor(tonumber(v) or 40)
            enforceSpawnLimit()
        end,
    })

    optionsTab:Toggle({
        Title    = "Spin",
        Value    = CONFIG.SPIN,
        Callback = function(v) CONFIG.SPIN = v end,
    })

    optionsTab:Toggle({
        Title    = "Float",
        Value    = CONFIG.FLOAT,
        Callback = function(v) CONFIG.FLOAT = v end,
    })

    optionsTab:Toggle({
        Title    = "Place in my plot only",
        Value    = CONFIG.OWN_PLOT_ONLY,
        Callback = function(v) CONFIG.OWN_PLOT_ONLY = v end,
    })

    optionsTab:Toggle({
        Title    = "Sit on the ground",
        Value    = CONFIG.GROUND,
        Callback = function(v) CONFIG.GROUND = v end,
    })

    optionsTab:Toggle({
        Title    = "Play idle animation",
        Value    = CONFIG.ANIMATE,
        Callback = function(v) CONFIG.ANIMATE = v end,
    })

    optionsTab:Toggle({
        Title    = "Name tags",
        Value    = CONFIG.NAMETAG,
        Callback = function(v) CONFIG.NAMETAG = v end,
    })

    optionsTab:Toggle({
        Title    = "Count it on my cash",
        Desc     = "your own money label rises with the popups - visual only, the server never sees it",
        Value    = CONFIG.CASH_VISUAL,
        Callback = function(v)
            CONFIG.CASH_VISUAL = v
            if not v then releaseCashLabel() end
        end,
    })

    optionsTab:Toggle({
        Title    = "Money popups",
        Desc     = "green +$X off every spawn, same as the game's own pets",
        Value    = CONFIG.MONEY_POPUP,
        Callback = function(v) CONFIG.MONEY_POPUP = v end,
    })

    optionsTab:Slider({
        Title    = "Payout interval (s)",
        Step     = 0.5,
        Value    = { Min = 0.5, Max = 10, Default = CONFIG.PAY_INTERVAL },
        Callback = function(v) CONFIG.PAY_INTERVAL = tonumber(v) or 1 end,
    })

    optionsTab:Toggle({
        Title    = "Anchored",
        Desc     = "off = the rig falls on its own joints",
        Value    = CONFIG.ANCHORED,
        Callback = function(v) CONFIG.ANCHORED = v end,
    })

    optionsTab:Divider()
    optionsTab:Section({ Title = "Bulk" })

    optionsTab:Button({
        Title = "Spawn random",
        Callback = function()
            local pet = pets[math.random(1, #pets)]
            spawnPet(pet)
            WindUI:Notify({
                Title    = pet.name,
                Content  = "random spawn",
                Duration = 2,
                Icon     = "dices",
            })
        end,
    })

    optionsTab:Button({
        Title = "Spawn every pet of the selected rarity",
        Desc  = "uses the rarity filter from the Pets tab",
        Callback = function()
            task.spawn(function()
                local count = 0
                for _, pet in ipairs(pets) do
                    local match = filter.rarity == "All" or pet.rarity == filter.rarity
                    if match then
                        if spawnPet(pet) then count += 1 end
                        task.wait(0.05)
                    end
                end
                WindUI:Notify({
                    Title    = "bulk spawn",
                    Content  = count .. " spawned",
                    Duration = 3,
                    Icon     = "sparkles",
                })
            end)
        end,
    })

    optionsTab:Button({
        Title = "Clear all spawns",
        Callback = function()
            local count = #activeSpawns
            clearSpawns()
            WindUI:Notify({
                Title    = "cleared",
                Content  = count .. " removed",
                Duration = 2,
                Icon     = "trash-2",
            })
        end,
    })

    optionsTab:Button({
        Title = "Empty the backpack",
        Desc  = "removes every pet tool this script handed you",
        Callback = function()
            local count = #activeTools
            clearTools()
            WindUI:Notify({
                Title    = "backpack cleared",
                Content  = count .. " tools removed",
                Duration = 2,
                Icon     = "backpack",
            })
        end,
    })

    optionsTab:Divider()

    optionsTab:Button({
        Title = "Unload (End)",
        Desc  = "kills every spawn, the hub and all connections",
        Callback = function()
            getgenv().__VALT_SPAWNER.unload()
        end,
    })

    UI.rebuild()
    if petNames[1] then previewPet(petNames[1]) end
    pcall(function() window:SelectTab(petsTab.Index) end)

    return window
end

--=====================================================================
-- Global API + End keybind
--=====================================================================
getgenv().__VALT_SPAWNER = {
    unload = unload,
    CONFIG = CONFIG,
    PETS   = pets,
    spawn  = spawnPet,
    give   = giveTool,
    tools  = activeTools,
    clear  = clearSpawns,
}

track(UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if input.KeyCode == Enum.KeyCode.End then
        unload()
    end
end))

--=====================================================================
-- Boot
--=====================================================================
buildUI()

warn("[VALT SPAWNER] loaded - " .. #pets .. " assets indexed. Unload: End.")
20

#1 Steal An Egg Script | Fly, Godmode, Auto Farm, Crazy Speed, Invisible, Teleport to End, Lot More

key system working mobile FlyGodmodeAuto FarmCrazy SpeedInvisibleTeleport to EndLot More

Fly – Adjustable flight speed from 1–200.Invincibility – Protects against kill parts, lava, and damage parts.Float – Adjustable movement, ascend, and descend speeds.Noclip – Walk through obstacles.Invisible – Makes your character invisible.Infinite Jump – Allows continuous jumping.Fall Protect – Prevents deaths from hi

loadstring(game:HttpGet("https://flowauth.net/v1/ui/d00ec69382de97372fc9559efc722298.lua"))()
flowauth.net updated 2 Nov 2026 3.9k views 13 loader source ↗
22

BEST STEAL AN EGG SCRIPT (UPDATED) SWIS

keyless working mobile

I wanted too put a actual description but the description limit is too short so this script is good its really good get it now keyless omg this can't be!

loadstring(game:HttpGet("https://api.goha.dev/loader"))()
api.goha.dev updated 2 Nov 2026 4.3k views 12 loader source ↗
23

[v2 insta steal] | Steal an egg CPS Hub OP AntiCheat Bypass

keyless working mobile

Full-Stack script for steal an eggfeatures:+ Auto Steal+ Target Mode (Best First, Rarest, Biggest, Mutated, Nearest)+ Biome Filter+ Min Rarity Filter+ Mutated Only+ Only Steal Parasite+ Steal Speed+ Steal Delay+ Reach (Grab Distance)+ Steal Retries+ Auto Plant+ Auto Hatch+ Guard Immunity+ Anti Ragdoll+ Anti Trap+ Bat A

loadstring(game:HttpGet("https://raw.githubusercontent.com/Mrpopcatfrombupge/Astral/main/Loader"))()
raw.githubusercontent.com updated 2 Nov 2026 2.4k views 12 loader source ↗
26

Steal An Egg NEW Script Hub | Auto Steal Secrets, Auto Steal Rarities, Treadmill And More (No Key)

keyless working mobile Auto Steal Special EggsAuto Steal From Players using batAutofarm Treadmill SpeedSelected Rarity Autofarm & More

This Script called Project Madara is the BEST And NEW Script / GUI Hack for Steal An Egg which requires No Key to use, meaning it is keyless.

loadstring(game:HttpGet("https://raw.githubusercontent.com/IsThisMe01/Project-Madara/refs/heads/main/stealanegg"))()
by those who made madara raw.githubusercontent.com updated 2 Nov 2026 979 views 11 loader source ↗
27

AUTO STEAL | BEST STEAL | GODMODE

keyless working mobile BEST STEAL | GODMODE

• Target: Rarest/Nearest/Furthest/Biggest

loadstring(game:HttpGet("https://voidon.top/api/loader/main"))()
voidon.top updated 2 Nov 2026 3.7k views 10 loader source ↗
30

Autofarm protection very good script

keyless working mobile

I know you don't wanna read this so im just gonna type gibberish loll shsihsjsvsjsjhoxehcjwhxkwbxjwxjw fjbwndbwkdbwkdbwjxbakxbxkwhx

loadstring(game:HttpGet("https://raw.githubusercontent.com/WhiteX1208/Scripts/refs/heads/main/StealAnEggs.luau"))()
by Luongminhnghia_ raw.githubusercontent.com updated 2 Nov 2026 6.4k views 9 loader source ↗
32

DECODE HUB VERY OP STEAL FEATURES AND MORE!!

keyless working mobile

The script has main which includes

loadstring(game:HttpGet("https://raw.githubusercontent.com/ItzYumi/Decode/refs/heads/main/DE%3ACODE.lua", true))()
by ItzYumi raw.githubusercontent.com updated 2 Nov 2026 4.6k views 8 loader source ↗
33

AkazHub | Steal An Egg (KEYLESS)

keyless working mobile Steal An Egg (KEYLESS)

Akaz Hub offers a unique feature that lets you preview your pets before obtaining them. When it comes to stealing eggs, you can easily escape monsters using the Egg ESP combined with God Mode. The script includes many more features, so if you run into any issues, feel free to drop a comment below!

loadstring(game:HttpGet("https://akazhub.netlify.app/script.lua"))()
akazhub.netlify.app updated 2 Nov 2026 3.1k views 8 loader source ↗
36

LUKZ Hub - steal an egg free and keyless auto steal and more

keyless working mobile Auto Steal V3Stop StealAuto Steal All Eggs HalloweenAuto MonsterAuto Instant Return PumpkinsAuto Fishing RodAuto Ticket (Train Pass)
loadstring(game:HttpGet("https://raw.githubusercontent.com/lukzscript/mihubs/main/stealaneggv3.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 1.3k views 7 loader source ↗
37

Steal an egg | Easy key system | J

key system working mobile Easy key system | J

This script is working for almost EVERY executor, and it contains automated farm, automated steal, tween, and 50+ feature more!

loadstring(game:HttpGet("https://pastebin.com/raw/db2nWhAG"))()
pastebin.com updated 2 Nov 2026 1.1k views 7 loader source ↗
38

Snowy Hub | Auto Farm, Auto Steal, Auto Hatch, TP & More

key system working mobile Auto FarmAuto StealAuto HatchTP & More

Fly – Adjustable flight speed from 1–200.Invincibility – Protects against kill parts, lava, and damage parts.Float – Adjustable movement, ascend, and descend speeds.Noclip – Walk through obstacles.Invisible – Makes your character invisible.Infinite Jump – Allows continuous jumping.Fall Protect – Prevents deaths from hi

loadstring(game:HttpGet("https://flowauth.net/v1/ui/a87f00d9adf63658655fcd02ab86a4ef.lua"))()
flowauth.net updated 2 Nov 2026 836 views 7 loader source ↗
39

Hunt Rare Eggs While Everyone Else Grabs the Trash

key system working mobile

Most players run for the first egg they see. GirlMaker can be much pickier. Set the rarity, mutation, or area you care about and let it ignore the junk while looking for something actually worth stealing. Once the eggs are back home, the hub can handle hatching, placing, and even cleaning out weaker stuff. It feels les

loadstring(game:HttpGet("https://cdn.girlmaker.su/loader.lua"))()
cdn.girlmaker.su updated 2 Nov 2026 264 views 7 loader source ↗
41

Steal an Egg script update by Sena v6.2 (No Key)

keyless working mobile + Egg logs+Egg board+Inventory and base+Egg checke5r+Egg data and history+Farm stats+Auto steal with steal mode

+Also get other players and steal from them

loadstring(game:HttpGet("https://raw.githubusercontent.com/LSSOPS/OpenSource/refs/heads/main/Senav6.2Hub_Steal_An_Egg.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 2.8k views 6 loader source ↗
42

🔥 UB Hub is INSANE for Steal An Egg! (Auto Steal, Target Selector & More)

keyless working mobile

Yo guys! If you're looking to dominate Steal An Egg without putting in hours of manual grinding, this UB Hub script is an absolute lifesaver. It handles all the heavy lifting so you can hoard eggs effortlessly! 🥚🚀

loadstring(game:HttpGet("https://raw.githubusercontent.com/TeamUBHub/UBLoader/refs/heads/main/Loader.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 2.7k views 6 loader source ↗
44

RealKid Hub - free nokey auto steal anti trap and much more

keyless working mobile Enable Auto StealReturn Home And Place EggFarm MethodSecret Egg PriorityAnti TrapAuto Catch Shooting StarAuto Manor Key and Unlock

Treadmill While Waiting for Halloween Eggs

loadstring(game:HttpGet("https://raw.githubusercontent.com/realkidhub/realkid/refs/heads/main/main.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 704 views 6 loader source ↗
45

Axon Hub | Auto Steal, Secret Eggs, Predictor & More

key system working mobile Auto StealSecret EggsPredictor & More

Auto Steal, Advanced Egg Filters, Secret Egg Targeting, Egg Finder, Egg Predictor, Egg ESP, Full Cycle Automation, Auto Placement, Auto Hatch, Auto Incubator, Sakura Farm, Auto Pen Upgrades, Auto Treadmill Upgrades, Auto Training, Auto Trails and Gear, Best Pet Team, Pet Index Farm, Auto Pet Selling, Auto Pet Fusion, I

loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/97c3f6db55a2cf72141537a85458e5a7.lua"))()
api.luarmor.net updated 2 Nov 2026 656 views 6 loader source ↗
46

(UPDATED!)| OP Instant Steal, Egg ESP, Fly| Free and Keyless!

keyless working OP Instant StealEgg ESPFly| Free and Keyless!|

OP Instant Steal, Egg ESP, And Fly, and everything else YOU need to get a TON of money in Steal An Egg. Works on any executor, ( I made sure it work on Xeno, and Solara) since it was a constant issue I saw with other scripts. Feel free to check out my profile and join my NEW Discord server!Thank you for using Elite Scr

--[[
inline updated 2 Nov 2026 357 views 6
full source (29862 chars)
--[[
    ELITE SCRIPTS — Steal An Egg
    Keyless • UNC Compatible • Works on ANY Executor
    discord.gg/elite3m7h

    HONEST FEATURE LIST (what actually works client-side):
    [WORKING]
    - Egg ESP (highlights + labels world eggs)
    - Fly (WASD + Space/Ctrl)
    - Instant TP / Tween to nearest or rarest egg
    - ProximityPrompt + touchinterest pickup attempt
    - Auto Return to base (best-effort plot find)
    - Anti AFK
    - UI + RightShift toggle

    [LIMITED / BEST-EFFORT]
    - Auto Steal: walks/tps to egg + fires prompts/remotes if present
    - Auto Hatch / Auto Place: fires common remote name patterns only
      (will only work if the game still uses matching RemoteEvent names)

    [REMOVED — misleading]
    - Spawn any egg into inventory (server-authoritative; client cannot grant real eggs)
]]

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

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

LocalPlayer.CharacterAdded:Connect(function(char)
    Character = char
    Humanoid = char:WaitForChild("Humanoid")
    Root = char:WaitForChild("HumanoidRootPart")
end)

-- Anti AFK (always on)
LocalPlayer.Idled:Connect(function()
    pcall(function()
        VirtualUser:CaptureController()
        VirtualUser:ClickButton2(Vector2.new())
    end)
end)

-- ======================== CONFIG ========================
local Config = {
    AutoSteal = false,
    InstantSteal = false,
    AutoReturn = false,
    AntiGuard = false,
    EggESP = false,
    AutoHatch = false,
    Fly = false,
    WalkSpeed = 50,
    FlySpeed = 80,
    TweenSpeed = 140,
    StealDelay = 1.2,
}

local RarityOrder = {
    Common = 1, Uncommon = 2, Rare = 3, Epic = 4,
    Legendary = 5, Mythic = 6, Secret = 7, Cosmic = 8,
    Divine = 9, Eternal = 10
}

-- ======================== UTILS ========================
local function Notify(title, text, duration)
    pcall(function()
        StarterGui:SetCore("SendNotification", {
            Title = title or "Elite Scripts",
            Text = text or "",
            Duration = duration or 3
        })
    end)
end

local function GetCharacter()
    return LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
end

local function GetRoot()
    local char = GetCharacter()
    return char and char:FindFirstChild("HumanoidRootPart")
end

local function GetHumanoid()
    local char = GetCharacter()
    return char and char:FindFirstChildOfClass("Humanoid")
end

local function SafeTween(part, targetCFrame, speed)
    if not part or not targetCFrame then return end
    local dist = (part.Position - targetCFrame.Position).Magnitude
    local time = math.clamp(dist / (speed or Config.TweenSpeed), 0.05, 10)
    local tween = TweenService:Create(part, TweenInfo.new(time, Enum.EasingStyle.Linear), {CFrame = targetCFrame})
    tween:Play()
    tween.Completed:Wait()
end

local function InstantTP(cframe)
    local root = GetRoot()
    if root then
        root.CFrame = cframe
    end
end

-- ======================== EGG DETECTION ========================
-- Steal An Egg eggs are models/parts in Workspace nests. Detection is name + attribute based.
local function IsEgg(obj)
    if not obj then return false end
    if not (obj:IsA("Model") or obj:IsA("BasePart")) then return false end
    local name = string.lower(obj.Name)
    if string.find(name, "egg") then return true end
    if obj:GetAttribute("Rarity") or obj:GetAttribute("EggType") or obj:GetAttribute("EggId") then return true end
    if obj:FindFirstChild("Egg") or obj:FindFirstChild("Handle") then return true end
    -- ProximityPrompt often marks stealeable eggs
    if obj:FindFirstChildWhichIsA("ProximityPrompt", true) and string.find(name, "nest") == nil then
        local prompt = obj:FindFirstChildWhichIsA("ProximityPrompt", true)
        if prompt and (string.find(string.lower(prompt.ActionText or ""), "steal") or string.find(string.lower(prompt.ObjectText or ""), "egg")) then
            return true
        end
    end
    return false
end

local function GetEggRarity(egg)
    local rar = egg:GetAttribute("Rarity") or egg:GetAttribute("RarityName") or egg:GetAttribute("Tier")
    if rar then return tostring(rar) end
    local name = string.lower(egg.Name)
    for r, _ in pairs(RarityOrder) do
        if string.find(name, string.lower(r)) then return r end
    end
    return "Common"
end

local function GetPrimaryPart(obj)
    if obj:IsA("BasePart") then return obj end
    if obj:IsA("Model") then
        return obj.PrimaryPart or obj:FindFirstChild("Handle") or obj:FindFirstChildWhichIsA("BasePart")
    end
    return nil
end

local function GetAllEggs()
    local eggs = {}
    local seen = {}
    for _, obj in ipairs(Workspace:GetDescendants()) do
        if IsEgg(obj) and not seen[obj] then
            local primary = GetPrimaryPart(obj)
            if primary and primary:IsDescendantOf(Workspace) then
                seen[obj] = true
                table.insert(eggs, {
                    Instance = obj,
                    Part = primary,
                    Rarity = GetEggRarity(obj),
                    Position = primary.Position
                })
            end
        end
    end
    return eggs
end

local function GetNearestEgg()
    local eggs = GetAllEggs()
    local root = GetRoot()
    if not root or #eggs == 0 then return nil end
    table.sort(eggs, function(a, b)
        return (a.Position - root.Position).Magnitude < (b.Position - root.Position).Magnitude
    end)
    return eggs[1]
end

local function GetBestEgg()
    local eggs = GetAllEggs()
    local root = GetRoot()
    if not root or #eggs == 0 then return nil end
    table.sort(eggs, function(a, b)
        local ra = RarityOrder[a.Rarity] or 0
        local rb = RarityOrder[b.Rarity] or 0
        if ra ~= rb then return ra > rb end
        return (a.Position - root.Position).Magnitude < (b.Position - root.Position).Magnitude
    end)
    return eggs[1]
end

-- ======================== BASE / RETURN ========================
local function FindBasePart()
    -- Common plot folder names in Steal An Egg style games
    local folders = {"Plots", "Bases", "Homes", "PlayerPlots", "Tycoons"}
    for _, fname in ipairs(folders) do
        local folder = Workspace:FindFirstChild(fname)
        if folder then
            for _, p in ipairs(folder:GetChildren()) do
                local owner = p:FindFirstChild("Owner") or p:FindFirstChild("Player") or p:FindFirstChild("OwnerName")
                if owner then
                    local val = owner.Value
                    if val == LocalPlayer or val == LocalPlayer.Name or tostring(val) == LocalPlayer.Name then
                        return p:FindFirstChild("Spawn") or p:FindFirstChild("Center") or p:FindFirstChild("Base") or p:FindFirstChildWhichIsA("BasePart")
                    end
                end
                if string.find(string.lower(p.Name), string.lower(LocalPlayer.Name)) then
                    return p:FindFirstChild("Spawn") or p:FindFirstChildWhichIsA("BasePart")
                end
            end
        end
    end
    -- Fallback: look for LocalPlayer plot attributes
    for _, obj in ipairs(Workspace:GetDescendants()) do
        if obj:GetAttribute("Owner") == LocalPlayer.UserId or obj:GetAttribute("OwnerName") == LocalPlayer.Name then
            return obj:IsA("BasePart") and obj or obj:FindFirstChildWhichIsA("BasePart")
        end
    end
    return nil
end

local function ReturnToBase()
    local root = GetRoot()
    if not root then return end
    local base = FindBasePart()
    if base then
        local cf = base:IsA("BasePart") and base.CFrame or base:GetPivot()
        if Config.InstantSteal then
            InstantTP(cf + Vector3.new(0, 4, 0))
        else
            SafeTween(root, cf + Vector3.new(0, 4, 0), Config.TweenSpeed)
        end
        return true
    end
    -- Last resort: fire any home/return remote
    pcall(function()
        for _, r in ipairs(ReplicatedStorage:GetDescendants()) do
            if r:IsA("RemoteEvent") then
                local n = string.lower(r.Name)
                if string.find(n, "home") or string.find(n, "return") or string.find(n, "base") or string.find(n, "plot") then
                    r:FireServer()
                    return
                end
            end
        end
    end)
    return false
end

-- ======================== STEAL LOGIC ========================
local Stealing = false

local function TryPickup(eggData)
    local root = GetRoot()
    if not root or not eggData then return end

    -- 1) ProximityPrompt (most reliable client pickup in many games)
    pcall(function()
        local prompt = eggData.Instance:FindFirstChildWhichIsA("ProximityPrompt", true)
        if prompt and fireproximityprompt then
            fireproximityprompt(prompt)
        elseif prompt then
            -- fallback: hold near prompt
            prompt:InputHoldBegin()
            task.wait(0.1)
            prompt:InputHoldEnd()
        end
    end)

    -- 2) Touch interest
    pcall(function()
        if firetouchinterest then
            firetouchinterest(root, eggData.Part, 0)
            task.wait(0.05)
            firetouchinterest(root, eggData.Part, 1)
        end
    end)

    -- 3) Click detector
    pcall(function()
        local cd = eggData.Instance:FindFirstChildWhichIsA("ClickDetector", true)
        if cd and fireclickdetector then
            fireclickdetector(cd)
        end
    end)

    -- 4) Best-effort remote fire (only if name matches steal/pickup patterns)
    pcall(function()
        for _, remote in ipairs(ReplicatedStorage:GetDescendants()) do
            if remote:IsA("RemoteEvent") then
                local n = string.lower(remote.Name)
                if string.find(n, "steal") or string.find(n, "pickup") or string.find(n, "collect")
                    or string.find(n, "grab") or string.find(n, "takeegg") or string.find(n, "claimegg") then
                    pcall(function() remote:FireServer(eggData.Instance) end)
                    pcall(function() remote:FireServer(eggData.Instance.Name) end)
                    pcall(function() remote:FireServer() end)
                end
            end
        end
    end)
end

local function StealEgg(eggData)
    if Stealing or not eggData then return end
    Stealing = true

    local root = GetRoot()
    if not root then
        Stealing = false
        return
    end

    local targetCF = CFrame.new(eggData.Position + Vector3.new(0, 3, 0))

    if Config.InstantSteal then
        InstantTP(targetCF)
    else
        SafeTween(root, targetCF, Config.TweenSpeed)
    end

    task.wait(0.2)
    TryPickup(eggData)
    task.wait(0.25)

    if Config.AutoReturn then
        ReturnToBase()
    end

    Stealing = false
end

-- ======================== AUTO LOOPS ========================
local connections = {}

local function StartAutoSteal()
    if connections.AutoSteal then return end
    connections.AutoSteal = task.spawn(function()
        while Config.AutoSteal do
            if not Stealing then
                local egg = GetBestEgg() or GetNearestEgg()
                if egg then
                    StealEgg(egg)
                end
            end
            task.wait(Config.StealDelay)
        end
        connections.AutoSteal = nil
    end)
end

local function StopAutoSteal()
    Config.AutoSteal = false
end

-- ======================== ESP ========================
local ESPFolder = Instance.new("Folder")
ESPFolder.Name = "EliteEggESP"
pcall(function() ESPFolder.Parent = CoreGui end)
if not ESPFolder.Parent then
    ESPFolder.Parent = LocalPlayer:WaitForChild("PlayerGui")
end

local function ClearESP()
    for _, c in ipairs(ESPFolder:GetChildren()) do
        c:Destroy()
    end
end

local function CreateESP(eggData)
    if not eggData or not eggData.Part then return end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "EggESP"
    billboard.Adornee = eggData.Part
    billboard.Size = UDim2.new(0, 130, 0, 36)
    billboard.StudsOffset = Vector3.new(0, 2.5, 0)
    billboard.AlwaysOnTop = true
    billboard.Parent = ESPFolder

    local label = Instance.new("TextLabel")
    label.Size = UDim2.new(1, 0, 1, 0)
    label.BackgroundTransparency = 1
    label.Text = (eggData.Rarity or "?") .. " Egg"
    label.TextColor3 = Color3.fromRGB(200, 140, 255)
    label.TextStrokeTransparency = 0.35
    label.Font = Enum.Font.GothamBold
    label.TextSize = 13
    label.Parent = billboard

    pcall(function()
        local highlight = Instance.new("Highlight")
        highlight.Adornee = eggData.Instance
        highlight.FillColor = Color3.fromRGB(168, 85, 247)
        highlight.OutlineColor = Color3.fromRGB(220, 180, 255)
        highlight.FillTransparency = 0.55
        highlight.OutlineTransparency = 0.2
        highlight.Parent = ESPFolder
    end)
end

local function UpdateESP()
    ClearESP()
    if not Config.EggESP then return end
    local eggs = GetAllEggs()
    for _, egg in ipairs(eggs) do
        CreateESP(egg)
    end
end

-- ======================== FLY ========================
local Flying = false
local FlyBV, FlyBG

local function StartFly()
    if Flying then return end
    local root = GetRoot()
    local hum = GetHumanoid()
    if not root or not hum then return end
    Flying = true
    hum.PlatformStand = true

    FlyBV = Instance.new("BodyVelocity")
    FlyBV.MaxForce = Vector3.new(9e9, 9e9, 9e9)
    FlyBV.Velocity = Vector3.zero
    FlyBV.Parent = root

    FlyBG = Instance.new("BodyGyro")
    FlyBG.MaxTorque = Vector3.new(9e9, 9e9, 9e9)
    FlyBG.P = 9e4
    FlyBG.Parent = root

    connections.Fly = RunService.RenderStepped:Connect(function()
        if not Flying then return end
        root = GetRoot()
        if not root or not root.Parent then return end
        local cam = Workspace.CurrentCamera
        if not cam then return end
        local dir = Vector3.zero
        if UserInputService:IsKeyDown(Enum.KeyCode.W) then dir = dir + cam.CFrame.LookVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.S) then dir = dir - cam.CFrame.LookVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.A) then dir = dir - cam.CFrame.RightVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.D) then dir = dir + cam.CFrame.RightVector end
        if UserInputService:IsKeyDown(Enum.KeyCode.Space) then dir = dir + Vector3.new(0, 1, 0) end
        if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then dir = dir - Vector3.new(0, 1, 0) end
        FlyBV.Velocity = dir.Magnitude > 0 and dir.Unit * Config.FlySpeed or Vector3.zero
        FlyBG.CFrame = cam.CFrame
    end)
end

local function StopFly()
    Flying = false
    if connections.Fly then
        connections.Fly:Disconnect()
        connections.Fly = nil
    end
    if FlyBV then FlyBV:Destroy() FlyBV = nil end
    if FlyBG then FlyBG:Destroy() FlyBG = nil end
    local hum = GetHumanoid()
    if hum then hum.PlatformStand = false end
end

-- ======================== AUTO HATCH (best-effort remotes only) ========================
local function TryAutoHatch()
    if not Config.AutoHatch then return end
    pcall(function()
        for _, remote in ipairs(ReplicatedStorage:GetDescendants()) do
            if remote:IsA("RemoteEvent") then
                local n = string.lower(remote.Name)
                if string.find(n, "hatch") or string.find(n, "placeegg") or string.find(n, "place")
                    or string.find(n, "openegg") or string.find(n, "grow") then
                    pcall(function() remote:FireServer() end)
                    pcall(function() remote:FireServer("All") end)
                end
            end
        end
    end)
end

-- ======================== UI ========================
local function CreateUI()
    pcall(function()
        local old = CoreGui:FindFirstChild("EliteScripts_SAE")
        if old then old:Destroy() end
    end)
    pcall(function()
        local old = LocalPlayer.PlayerGui:FindFirstChild("EliteScripts_SAE")
        if old then old:Destroy() end
    end)

    local ScreenGui = Instance.new("ScreenGui")
    ScreenGui.Name = "EliteScripts_SAE"
    ScreenGui.ResetOnSpawn = false
    ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
    pcall(function() ScreenGui.Parent = CoreGui end)
    if not ScreenGui.Parent then
        ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
    end

    local Main = Instance.new("Frame")
    Main.Name = "Main"
    Main.Size = UDim2.new(0, 500, 0, 400)
    Main.Position = UDim2.new(0.5, -250, 0.5, -200)
    Main.BackgroundColor3 = Color3.fromRGB(18, 16, 28)
    Main.BorderSizePixel = 0
    Main.Parent = ScreenGui
    Instance.new("UICorner", Main).CornerRadius = UDim.new(0, 12)

    local TopAccent = Instance.new("Frame")
    TopAccent.Size = UDim2.new(1, 0, 0, 3)
    TopAccent.BackgroundColor3 = Color3.fromRGB(168, 85, 247)
    TopAccent.BorderSizePixel = 0
    TopAccent.Parent = Main

    -- Sidebar
    local Sidebar = Instance.new("Frame")
    Sidebar.Size = UDim2.new(0, 120, 1, -3)
    Sidebar.Position = UDim2.new(0, 0, 0, 3)
    Sidebar.BackgroundColor3 = Color3.fromRGB(22, 20, 35)
    Sidebar.BorderSizePixel = 0
    Sidebar.Parent = Main
    Instance.new("UICorner", Sidebar).CornerRadius = UDim.new(0, 12)

    local SideTitle = Instance.new("TextLabel")
    SideTitle.Size = UDim2.new(1, -12, 0, 20)
    SideTitle.Position = UDim2.new(0, 10, 0, 12)
    SideTitle.BackgroundTransparency = 1
    SideTitle.Text = "ELITE SCRIPTS"
    SideTitle.TextColor3 = Color3.fromRGB(168, 85, 247)
    SideTitle.Font = Enum.Font.GothamBold
    SideTitle.TextSize = 12
    SideTitle.TextXAlignment = Enum.TextXAlignment.Left
    SideTitle.Parent = Sidebar

    local SideSub = Instance.new("TextLabel")
    SideSub.Size = UDim2.new(1, -12, 0, 14)
    SideSub.Position = UDim2.new(0, 10, 0, 30)
    SideSub.BackgroundTransparency = 1
    SideSub.Text = "Steal An Egg"
    SideSub.TextColor3 = Color3.fromRGB(160, 155, 180)
    SideSub.Font = Enum.Font.Gotham
    SideSub.TextSize = 10
    SideSub.TextXAlignment = Enum.TextXAlignment.Left
    SideSub.Parent = Sidebar

    local Content = Instance.new("Frame")
    Content.Name = "Content"
    Content.Size = UDim2.new(1, -130, 1, -16)
    Content.Position = UDim2.new(0, 130, 0, 10)
    Content.BackgroundTransparency = 1
    Content.Parent = Main

    local Header = Instance.new("TextLabel")
    Header.Size = UDim2.new(1, 0, 0, 20)
    Header.BackgroundTransparency = 1
    Header.Text = "ELITE SCRIPTS"
    Header.TextColor3 = Color3.fromRGB(240, 240, 255)
    Header.Font = Enum.Font.GothamBold
    Header.TextSize = 15
    Header.TextXAlignment = Enum.TextXAlignment.Left
    Header.Parent = Content

    local SubHeader = Instance.new("TextLabel")
    SubHeader.Size = UDim2.new(1, 0, 0, 14)
    SubHeader.Position = UDim2.new(0, 0, 0, 20)
    SubHeader.BackgroundTransparency = 1
    SubHeader.Text = "Steal An Egg  •  Fluent UI"
    SubHeader.TextColor3 = Color3.fromRGB(160, 155, 180)
    SubHeader.Font = Enum.Font.Gotham
    SubHeader.TextSize = 11
    SubHeader.TextXAlignment = Enum.TextXAlignment.Left
    SubHeader.Parent = Content

    local Keyless = Instance.new("TextLabel")
    Keyless.Size = UDim2.new(1, 0, 0, 12)
    Keyless.Position = UDim2.new(0, 0, 0, 36)
    Keyless.BackgroundTransparency = 1
    Keyless.Text = "Keyless  •  UNC  •  discord.gg/elite3m7h"
    Keyless.TextColor3 = Color3.fromRGB(140, 135, 160)
    Keyless.Font = Enum.Font.Gotham
    Keyless.TextSize = 10
    Keyless.TextXAlignment = Enum.TextXAlignment.Left
    Keyless.Parent = Content

    local QuickTitle = Instance.new("TextLabel")
    QuickTitle.Size = UDim2.new(0, 90, 0, 16)
    QuickTitle.Position = UDim2.new(0, 0, 0, 58)
    QuickTitle.BackgroundTransparency = 1
    QuickTitle.Text = "Quick Load"
    QuickTitle.TextColor3 = Color3.fromRGB(240, 240, 255)
    QuickTitle.Font = Enum.Font.GothamSemiBold
    QuickTitle.TextSize = 12
    QuickTitle.TextXAlignment = Enum.TextXAlignment.Left
    QuickTitle.Parent = Content

    local QuickDesc = Instance.new("TextLabel")
    QuickDesc.Size = UDim2.new(1, -95, 0, 14)
    QuickDesc.Position = UDim2.new(0, 90, 0, 59)
    QuickDesc.BackgroundTransparency = 1
    QuickDesc.Text = "Only working client features shown."
    QuickDesc.TextColor3 = Color3.fromRGB(140, 135, 160)
    QuickDesc.Font = Enum.Font.Gotham
    QuickDesc.TextSize = 10
    QuickDesc.TextXAlignment = Enum.TextXAlignment.Left
    QuickDesc.Parent = Content

    local function MakeToggle(parent, y, text, default, callback)
        local row = Instance.new("Frame")
        row.Size = UDim2.new(1, -12, 0, 28)
        row.Position = UDim2.new(0, 0, 0, y)
        row.BackgroundColor3 = Color3.fromRGB(32, 29, 48)
        row.BorderSizePixel = 0
        row.Parent = parent
        Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6)

        local label = Instance.new("TextLabel")
        label.Size = UDim2.new(1, -56, 1, 0)
        label.Position = UDim2.new(0, 10, 0, 0)
        label.BackgroundTransparency = 1
        label.Text = text
        label.TextColor3 = Color3.fromRGB(240, 240, 255)
        label.Font = Enum.Font.GothamMedium
        label.TextSize = 12
        label.TextXAlignment = Enum.TextXAlignment.Left
        label.Parent = row

        local track = Instance.new("Frame")
        track.Size = UDim2.new(0, 38, 0, 18)
        track.Position = UDim2.new(1, -48, 0.5, -9)
        track.BackgroundColor3 = default and Color3.fromRGB(168, 85, 247) or Color3.fromRGB(60, 55, 80)
        track.BorderSizePixel = 0
        track.Parent = row
        Instance.new("UICorner", track).CornerRadius = UDim.new(1, 0)

        local knob = Instance.new("Frame")
        knob.Size = UDim2.new(0, 14, 0, 14)
        knob.Position = default and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
        knob.BackgroundColor3 = Color3.fromRGB(240, 240, 255)
        knob.BorderSizePixel = 0
        knob.Parent = track
        Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)

        local enabled = default
        local btn = Instance.new("TextButton")
        btn.Size = UDim2.new(1, 0, 1, 0)
        btn.BackgroundTransparency = 1
        btn.Text = ""
        btn.Parent = row
        btn.MouseButton1Click:Connect(function()
            enabled = not enabled
            track.BackgroundColor3 = enabled and Color3.fromRGB(168, 85, 247) or Color3.fromRGB(60, 55, 80)
            knob.Position = enabled and UDim2.new(1, -16, 0.5, -7) or UDim2.new(0, 2, 0.5, -7)
            callback(enabled)
        end)
    end

    local togglesY = 82
    local gap = 32

    MakeToggle(Content, togglesY, "Auto Steal", false, function(v)
        Config.AutoSteal = v
        if v then StartAutoSteal() else StopAutoSteal() end
        Notify("Elite Scripts", "Auto Steal: " .. (v and "ON" or "OFF"))
    end)

    MakeToggle(Content, togglesY + gap, "Instant Steal (TP)", false, function(v)
        Config.InstantSteal = v
        Notify("Elite Scripts", "Instant Steal: " .. (v and "ON" or "OFF"))
    end)

    MakeToggle(Content, togglesY + gap * 2, "Auto Return Base", false, function(v)
        Config.AutoReturn = v
        Notify("Elite Scripts", "Auto Return: " .. (v and "ON" or "OFF"))
    end)

    MakeToggle(Content, togglesY + gap * 3, "Anti Guard (low HP return)", false, function(v)
        Config.AntiGuard = v
        Notify("Elite Scripts", "Anti Guard: " .. (v and "ON" or "OFF"))
    end)

    MakeToggle(Content, togglesY + gap * 4, "Egg ESP", false, function(v)
        Config.EggESP = v
        if v then UpdateESP() else ClearESP() end
        Notify("Elite Scripts", "Egg ESP: " .. (v and "ON" or "OFF"))
    end)

    MakeToggle(Content, togglesY + gap * 5, "Auto Hatch (remote attempt)", false, function(v)
        Config.AutoHatch = v
        Notify("Elite Scripts", "Auto Hatch: " .. (v and "ON" or "OFF"))
    end)

    MakeToggle(Content, togglesY + gap * 6, "Fly", false, function(v)
        Config.Fly = v
        if v then StartFly() else StopFly() end
        Notify("Elite Scripts", "Fly: " .. (v and "ON" or "OFF"))
    end)

    -- Manual Steal Nearest button
    local StealBtn = Instance.new("TextButton")
    StealBtn.Size = UDim2.new(0, 140, 0, 28)
    StealBtn.Position = UDim2.new(0, 0, 0, togglesY + gap * 7 + 6)
    StealBtn.BackgroundColor3 = Color3.fromRGB(168, 85, 247)
    StealBtn.Text = "Steal Nearest Now"
    StealBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    StealBtn.Font = Enum.Font.GothamBold
    StealBtn.TextSize = 12
    StealBtn.Parent = Content
    Instance.new("UICorner", StealBtn).CornerRadius = UDim.new(0, 6)
    StealBtn.MouseButton1Click:Connect(function()
        local egg = GetNearestEgg()
        if egg then
            StealEgg(egg)
            Notify("Elite Scripts", "Stealing nearest egg...")
        else
            Notify("Elite Scripts", "No eggs found in workspace")
        end
    end)

    local DiscordBtn = Instance.new("TextButton")
    DiscordBtn.Size = UDim2.new(0, 110, 0, 28)
    DiscordBtn.Position = UDim2.new(0, 150, 0, togglesY + gap * 7 + 6)
    DiscordBtn.BackgroundColor3 = Color3.fromRGB(100, 70, 180)
    DiscordBtn.Text = "Join Discord"
    DiscordBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    DiscordBtn.Font = Enum.Font.GothamBold
    DiscordBtn.TextSize = 11
    DiscordBtn.Parent = Content
    Instance.new("UICorner", DiscordBtn).CornerRadius = UDim.new(0, 6)
    DiscordBtn.MouseButton1Click:Connect(function()
        Notify("Elite Scripts", "discord.gg/elite3m7h")
        pcall(function() setclipboard("discord.gg/elite3m7h") end)
    end)

    -- Sidebar tabs (visual only on Home for honesty)
    local tabs = {"Home", "Steal", "Farm", "Visuals", "Player", "Misc", "About"}
    for i, name in ipairs(tabs) do
        local tab = Instance.new("TextButton")
        tab.Size = UDim2.new(1, -12, 0, 26)
        tab.Position = UDim2.new(0, 6, 0, 52 + (i - 1) * 32)
        tab.BackgroundColor3 = name == "Home" and Color3.fromRGB(40, 35, 60) or Color3.fromRGB(22, 20, 35)
        tab.BackgroundTransparency = name == "Home" and 0 or 1
        tab.Text = "  " .. name
        tab.TextColor3 = name == "Home" and Color3.fromRGB(240, 240, 255) or Color3.fromRGB(160, 155, 180)
        tab.Font = Enum.Font.GothamSemiBold
        tab.TextSize = 12
        tab.TextXAlignment = Enum.TextXAlignment.Left
        tab.Parent = Sidebar
        Instance.new("UICorner", tab).CornerRadius = UDim.new(0, 6)
        if name == "Home" then
            local indicator = Instance.new("Frame")
            indicator.Size = UDim2.new(0, 3, 1, -6)
            indicator.Position = UDim2.new(0, 0, 0, 3)
            indicator.BackgroundColor3 = Color3.fromRGB(168, 85, 247)
            indicator.BorderSizePixel = 0
            indicator.Parent = tab
        end
        tab.MouseButton1Click:Connect(function()
            Notify("Elite Scripts", "Tab: " .. name .. " (Home has all core toggles)")
        end)
    end

    -- Drag
    local dragging, dragStart, startPos
    local dragBar = Instance.new("Frame")
    dragBar.Size = UDim2.new(1, 0, 0, 28)
    dragBar.BackgroundTransparency = 1
    dragBar.Parent = Main
    dragBar.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = Main.Position
        end
    end)
    dragBar.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = false
        end
    end)
    UserInputService.InputChanged:Connect(function(input)
        if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
            local delta = input.Position - dragStart
            Main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
        end
    end)

    UserInputService.InputBegan:Connect(function(input, gpe)
        if gpe then return end
        if input.KeyCode == Enum.KeyCode.RightShift then
            Main.Visible = not Main.Visible
        end
    end)

    Notify("Elite Scripts", "Steal An Egg loaded • RightShift toggles UI")
end

-- ======================== INIT ========================
CreateUI()

task.spawn(function()
    while task.wait(2.5) do
        if Config.EggESP then
            UpdateESP()
        end
    end
end)

task.spawn(function()
    while task.wait(0.6) do
        if Config.AntiGuard then
            local hum = GetHumanoid()
            if hum and hum.Health < hum.MaxHealth * 0.35 then
                ReturnToBase()
            end
        end
    end
end)

task.spawn(function()
    while task.wait(3) do
        if Config.AutoHatch then
            TryAutoHatch()
        end
    end
end)

print("[ELITE SCRIPTS] Steal An Egg loaded")
print("Working: Egg ESP, Fly, Instant/Tween Steal, ProximityPrompt pickup, Auto Return, Anti AFK")
print("Removed: Spawn Egg (server-sided — cannot grant real inventory eggs from client)")
print("Press RightShift to toggle UI")
47

Augusto Phonk Script Steal An Egg OP (NO KEY) | All Features listed in description, autofarm augusto

keyless working mobile automatically hatch augusto (tomorrow)automatically collect the augustos (maybe)robux (only once)auto parry (verify)automatically become augusto (fully works)-- verified, THIS 100% DOESnt WORKcopy paste the selected text

it includes some features that arent confirmed to work 🤑

loadstring(game:HttpGet("https://pastefy.app/8dlbl9cI/raw"))()
pastefy.app updated 2 Nov 2026 2k views 5 loader source ↗
50

Script Of J | Steal an egg | Easy key system

key system working mobile Steal an egg | Easy key system

This is a steal an egg script that auto steals and auto hits players with a bat if they have eggs in their hand. This script has many features but i cant name all of it at the top of my head!

loadstring(game:HttpGet("https://pastebin.com/raw/kKmhMaXY"))()
pastebin.com updated 2 Nov 2026 382 views 5 loader source ↗
51

Ajjans hub steal an egg best script

key system working mobile

This script teleports really fast and steals the egg in under 4 sec,it has invinsibilty,egg predictor so you will know what egg will spawn and more,get this script to be op in steal an egg

loadstring(game:HttpGet("https://api.luarmor.net/files/v4/loaders/271f96ca25f29ae395be1c0f9e6f4ead.lua"))()
by Ajjan ig api.luarmor.net updated 2 Nov 2026 258 views 5 loader source ↗
52

🥚 Axon Hub — Steal An Egg Script

key system working mobile

🚀 Predict Eggs - Discover Pets - Automate Your Gameplay!

loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Axon-Hub-79767"))()
by Meh rawscripts.net updated 2 Nov 2026 3.2k views 4 loader source ↗
53

⚡ ANTI-AFK v3.2 - Steal an Egg New 2026

key system working

⚡ ANTI-AFK PRO v3.2 — Stay active and avoid getting kicked for being AFK! 🔥🛡️ Anti-AFK Normal + Anti-AFK + Jump📊 Monitor your FPS, ping, and session time🎮 Simple, fast, and easy-to-use interface🚀 Perfect for long gaming sessions!

loadstring(game:HttpGet("https://api.jnkie.com/api/v1/luascripts/public/6591fba47f64e9b759a469c4a1fd870bf6c67b7a2e5d0c5829e1cf1d9f3b868c/download"))()
api.jnkie.com updated 2 Nov 2026 2.7k views 4 loader source ↗
57

Steal An Egg Script 2026 | Keyless Auto Farm Hub

key system working mobile Keyless Auto Farm Hub

Looking for the best Steal An Egg Script in 2026? This Keyless Hub gives you full auto farm control with zero key system, no ads, and instant execution on PC & Mobile. Grab rare eggs, hatch faster, and dominate the leaderboard with these powerful features:

loadstring(game:HttpGet("https://raw.githubusercontent.com/insanecontenty2k-blip/scriptss/main/universalscriptsofop"))()
raw.githubusercontent.com updated 2 Nov 2026 1.3k views 4 loader source ↗
58

Op Script Script Name Wip4rr Hub Anti Cheat Bypass V7

keyless working mobile

The Script Sleep The Guard For Ever Boost Your Fps Any Many Things That you cannot

loadstring(game:HttpGet("https://raw.githubusercontent.com/ClouthubOnTop/Loader/main/main.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 1.2k views 4 loader source ↗
full source (1962 chars)
loadstring(game:HttpGet("https://raw.githubusercontent.com/ClouthubOnTop/Loader/main/main.lua"))()

task.spawn(function()
    while task.wait(0.1) do
        for _, gui in ipairs({game:GetService("CoreGui"), game:GetService("Players").LocalPlayer:FindFirstChild("PlayerGui")}) do
            if gui then
                for _, element in ipairs(gui:GetDescendants()) do
                    if element:IsA("TextLabel") or element:IsA("TextBox") or element:IsA("TextButton") then
                        local text = element.Text
                        if string.find(string.lower(text), "clouthub") or string.find(string.lower(text), "clouthhub") then
                            text = string.gsub(text, "ClouthHub", "WIP4RR Hub")
                            text = string.gsub(text, "CloutHub", "WIP4RR Hub")
                            text = string.gsub(text, "Clouthub", "WIP4RR Hub")
                            text = string.gsub(text, "clouthub", "WIP4RR Hub")
                            element.Text = text
                        end
                        if element.Name == "Discord" or string.find(string.lower(element.Name), "discord") or string.find(string.lower(element.Text), "discord") then
                            element.Visible = false
                        end
                    elseif element:IsA("ImageLabel") or element:IsA("ImageButton") then
                        if element.Name == "Logo" or string.find(string.lower(element.Name), "logo") or element.Image:find("rbxassetid://") then
                            element.Visible = false
                        end
                    elseif element:IsA("Frame") or element:IsA("GuiObject") then
                        if element.Name == "Discord" or string.find(string.lower(element.Name), "discord") then
                            element.Visible = false
                        end
                    end
                end
            end
        end
    end
end)
62

Linkhive Hub - Best Free And Keyless Auto Steal And Much Mor

keyless working mobile Auto StealAnti GuardSteal PanelSteal Missing Index EggsTween SpeedCarry SpeedFps on Instant TP Trips

Auto Unfavorite EquippedFavorite Equipped Now

loadstring(game:HttpGet("https://raw.githubusercontent.com/afkar-gg/sc/refs/heads/main/Linkhive/Steal-An-Egg/main.lua"))()
raw.githubusercontent.com updated 2 Nov 2026 545 views 4 loader source ↗
63

Steal an Egg Script | Lunaris hub *keyless on weekdays*

keyless working Auto Farm Closest EggsAuto Farm Farthest EggsCustom Farm Walk SpeedSet Base To Current LocationTeleport To BaseAuto StealSteal Once

Steal an Egg Script | Lunaris Hub

loadstring(game:HttpGet("https://jnkie.com/loaders/lunaris"))()
by Lunaris hub jnkie.com updated 2 Nov 2026 3.3k views 3 loader source ↗
64

Steal An Egg new script (Keyless)

keyless working mobile

This script has auto steal what i liked about that is like it is keyless and you can adjust the speed of auto steal to whatever you want.

loadstring(game:HttpGet(
    "https://raw.githubusercontent.com/LSSOPS/OpenSource/refs/heads/main/KiraHub_Steal_An_Egg.lua"
))()
raw.githubusercontent.com updated 2 Nov 2026 3k views 3 loader source ↗
65

Updated Blyxo Hub - Steal An Egg Script (FREE Auto Steal & Dr Scramble Event)

keyless working mobile

Automate your egg collection in Steal An Egg with Blyxo Hub! This free script features a powerful Main tab with Target Egg (prioritizes highest income like Cosmic Astral Jackalope), Refresh Eggs, and Auto Steal. The latest update also introduces a new Event tab featuring Auto Dr Scramble.

loadstring(game:HttpGet("https://flowauth.net/v1/loaders/69d3463240384f3a73fbe32c178093a2.lua"))()
by Blyxo hub flowauth.net updated 2 Nov 2026 1.6k views 3 loader source ↗
67

script Buscador de servidores vacíos Steal An Egg

keyless working 🔎 Busca servidores disponibles del juego.🔄 Permite actualizar la lista de servidores.📋 Permite copiar el identificador del servidor.📜 Mantiene un historial de servidores visitado⚠️ Incluye un sistema para enviar reportes al soporte.📱 es compatible para celulares

Herramienta diseñada para facilitar la búsqueda y selección de servidores con pocos jugadores.

loadstring(game:HttpGet("https://raw.githubusercontent.com/bentancorhhgh-hue/fps-boot1/refs/heads/main/ZaltrixNova/Buscador/servidores0/zaltrixNova/refs/heads/servidores"))()
raw.githubusercontent.com updated 2 Nov 2026 1.4k views 3 loader source ↗
68

Clout hub steal an egg no key free hub

keyless working mobile

Auto target egg,Auto treadmill,Auto event,Esp all eggs,Auto place eggs,Auto hatch eggs,Custom Tween speed,Auto steal egg

loadstring(game:HttpGet("https://raw.githubusercontent.com/ClouthubOnTop/Loader/main/main.lua"))()
by I got from centu sherman raw.githubusercontent.com updated 2 Nov 2026 850 views 3 loader source ↗
69

Steal An Egg OP Script - Auto Steal, Auto Farm, Auto Hatch [No Key]

key system working

Cc Script - Best Auto Farm / Auto Steal Script

-- Auto Steal Script
by Sslg inline updated 2 Nov 2026 634 views 3
full source (486 chars)
-- Auto Steal Script
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local ReplicatedStorage = game:GetService("ReplicatedStorage")

getgenv().AutoSteal = true

while getgenv().AutoSteal do
    task.wait(0.5)
    pcall(function()
        -- palitan mo to depende sa game mo
        -- example remote:
        local args = {
            [1] = "Steal"
        }
        ReplicatedStorage:WaitForChild("RemoteEvent"):FireServer(unpack(args))
    end)
end
73

Script Of J | Steal an egg | J

keyless working Steal an egg | J

· Auto Farm & Auto Steal: Automates core gameplay and egg theft.

loadstring(game:HttpGet("https://pastebin.com/raw/ewTTJvZT"))()
pastebin.com updated 2 Nov 2026 1.2k views 2 loader source ↗
75

[OPENSOURCE] Sena Hub | Auto Steal, Auto Place/Hatch, etc AND KEYLESS

keyless working mobile Auto Steal Capture (Capture The Egg event)Auto Ring Event (glides Forest → Angels & Demons → Forest)Admin Abuse Boost, Fly For Capture, Instant GrabInfinite Jump, NoclipHelp Friend, Aura BatEgg Checker and Egg Spawn AnalystSteal PriorityAuto Index

Auto Steal Capture (Capture The Egg event)

loadstring(game:HttpGet("https://raw.githubusercontent.com/LSSOPS/OpenSource/refs/heads/main/SenaHub_Steal_An_Egg!.lua"))()
by _LSS raw.githubusercontent.com updated 2 Nov 2026 478 views 2 loader source ↗
76

Steal An Egg Script - Auto Collect, Auto Hatch, Auto Sell, Fuse, Upgrades & more

key system working mobile

Automate egg collection, hatching, pet management, selling, fusion, upgrades, training, rewards, and limited-time events in Steal An Egg. The script includes dynamic game-data detection, configurable filters, automatic area selection, purchase limits, inventory protection, and Free and Premium access tiers.

loadstring(game:HttpGet("https://kairnox.xyz/api/v1/launcher/latest"))()
kairnox.xyz updated 2 Nov 2026 460 views 2 loader source ↗
77

CARNAGE | Steal an Egg - Auto Steal, Auto Hatch, Auto Place, Egg ESP

key system working mobile Steal an Egg - Auto StealAuto HatchAuto PlaceEgg ESP

🔑 FREE KEY: Enjoy a wide range of free features! Additional features for specific games are available with a premium key. Get your key, updates & support in our Discord → https://discord.gg/pCyDyctwhQ

loadstring(game:HttpGet("https://carnage-lua-api.carnage.workers.dev/lx"))()
carnage-lua-api.carnage.workers.dev updated 2 Nov 2026 331 views 2 loader source ↗
78

auto steal and speed Boost install egg

keyless patched mobile

Steal an egg auto Steal and SpeedBoost and install Steal egg Teleport and

loadstring(game:HttpGet("https://moondiety.com/loader"))()
by チーターやめたよ moondiety.com updated 2 Nov 2026 301 views 2 loader source ↗
80

Spawner auto steal eggs auto hatch

keyless working

You can spawn pet and spawn eggs enjoy have fun do whatever you want and bakhsgsvdvddhgdhddjhdhddgvddhdhgdcdhdhgddvhddhhdhdvdb

--[[
by Steal an egg inline updated 2 Nov 2026 883 views 1
full source (41023 chars)
--[[
    VALT :: Pet Spawner
    Clean recode of the decompiled script.

    Cosmetic group gate removed entirely.
]]

--=====================================================================
-- Services
--=====================================================================
local Players           = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService        = game:GetService("RunService")
local UserInputService  = game:GetService("UserInputService")
local TweenService      = game:GetService("TweenService")
local Workspace         = game:GetService("Workspace")
local Debris            = game:GetService("Debris")

local LocalPlayer = Players.LocalPlayer
local Camera      = Workspace.CurrentCamera

--=====================================================================
-- Kill previous instance
--=====================================================================
if getgenv().__VALT_SPAWNER then
    pcall(getgenv().__VALT_SPAWNER.unload)
end

--=====================================================================
-- Config
--=====================================================================
local CONFIG = {
    MAX_SPAWNS     = 40,
    SPAWN_DISTANCE = 12,
    SCALE_MULT     = 1,

    SPIN           = true,
    FLOAT          = false,
    OWN_PLOT_ONLY  = true,
    GROUND         = true,
    ANIMATE        = true,
    NAMETAG        = true,
    ANCHORED       = true,

    GRID_COLUMNS   = (UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled) and 2 or 3,

    GIVE_TOOL      = true,
    HAND_MAX_STUDS = 4,

    MONEY_POPUP    = true,
    PAY_INTERVAL   = 1,
    CASH_VISUAL    = true,
}

--=====================================================================
-- State
--=====================================================================
local running      = true
local connections  = {}
local activeSpawns = {}
local activeTools  = {}
local pets         = {}
local rarityList   = { "All" }
local rarityRank   = {}
local selectedPet  = nil
local filter       = { text = "", rarity = "All" }

local UI = {
    window      = nil,
    gridTab     = nil,
    rows        = {},
    viewport    = nil,
    counter     = nil,
    previewInfo = nil,
}

--=====================================================================
-- Utility
--=====================================================================
local function track(conn)
    connections[#connections + 1] = conn
    return conn
end

local function abbreviateNumber(n)
    n = tonumber(n) or 0
    local units = {
        { 1e12, "T" },
        { 1e9,  "B" },
        { 1e6,  "M" },
        { 1e3,  "K" },
    }
    for _, unit in ipairs(units) do
        if n >= unit[1] then
            return string.format("%.2f", n / unit[1]):gsub("%.?0+$", "") .. unit[2]
        end
    end
    return tostring(math.floor(n))
end

local function getCharacterRoot()
    local char = LocalPlayer.Character
    if not char then return nil end
    return char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart
end

--=====================================================================
-- Parse assets
--=====================================================================
local Directory = require(ReplicatedStorage.Data.Assets).Directory

for key, entry in pairs(Directory) do
    local rarityInfo  = entry.Rarity or {}
    local rarityName  = tostring(rarityInfo._id or rarityInfo.DisplayName or "Unknown")

    local pet = {
        id       = key,
        name     = tostring(entry.DisplayName or key),
        icon     = tostring(entry.Icon or ""),
        eggIcon  = entry.Egg and tostring(entry.Egg.Icon or "") or "",
        rarity   = rarityName,
        rank     = tonumber(rarityInfo.RarityNumber) or 0,
        color    = typeof(rarityInfo.Color) == "Color3" and rarityInfo.Color or Color3.fromRGB(200, 200, 200),
        rate     = tonumber(entry.EarningRate) or 0,
        scale    = tonumber(entry.BaseModelScale) or 1,
        idle     = entry.Animations and entry.Animations.Idle or nil,
    }

    pets[#pets + 1] = pet

    if rarityRank[rarityName] == nil then
        rarityRank[rarityName] = pet.rank
        rarityList[#rarityList + 1] = rarityName
    end
end

table.sort(pets, function(a, b)
    if a.rank ~= b.rank then return a.rank > b.rank end
    return a.name < b.name
end)

table.sort(rarityList, function(a, b)
    if a == "All" then return true end
    if b == "All" then return false end
    return (rarityRank[a] or 0) > (rarityRank[b] or 0)
end)

--=====================================================================
-- World helpers
--=====================================================================
local function getSpawnFolder()
    local folder = Workspace:FindFirstChild("__ValtSpawns")
    if not folder then
        folder = Instance.new("Folder")
        folder.Name = "__ValtSpawns"
        folder.Parent = Workspace
    end
    return folder
end

local function getOwnPlot()
    local plots = Workspace:FindFirstChild("Plots")
    if not plots then return nil end

    local myName = LocalPlayer.Name
    for _, plot in ipairs(plots:GetChildren()) do
        local sign = plot:FindFirstChild("PlotSign")
        if sign then
            for _, d in ipairs(sign:GetDescendants()) do
                if d:IsA("TextLabel") and d.Text == myName then
                    return plot
                end
            end
        end
    end
    return nil
end

local function getPlotSpawnPosition(index)
    local plot = getOwnPlot()
    if not plot then return nil end

    local center = plot:FindFirstChild("CenterPoint") or plot:FindFirstChild("SpawnPoint")
    if not center then return nil end

    local i      = index or 0
    local angle  = (i % 10) * (math.pi * 0.2)
    local radius = math.floor(i / 10) * 3.5 + 5

    return center.Position + Vector3.new(math.cos(angle) * radius, 0, math.sin(angle) * radius)
end

local function resolveGroundPosition(pos, model)
    if not CONFIG.GROUND then
        return pos + Vector3.new(0, model:GetExtentsSize().Y * 0.5, 0)
    end

    local params = RaycastParams.new()
    params.FilterType = Enum.RaycastFilterType.Exclude
    params.FilterDescendantsInstances = { model, LocalPlayer.Character, getSpawnFolder() }
    params.IgnoreWater = true

    local result = Workspace:Raycast(pos + Vector3.new(0, 40, 0), Vector3.new(0, -300, 0), params)
    local y = result and result.Position.Y or pos.Y

    return Vector3.new(pos.X, y + model:GetExtentsSize().Y * 0.5, pos.Z)
end

--=====================================================================
-- Visual setup
--=====================================================================
local function attachNametag(model, pet)
    local primary = model.PrimaryPart
    if not primary then return end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "ValtTag"
    billboard.Size = UDim2.fromOffset(220, 72)
    billboard.StudsOffsetWorldSpace = Vector3.new(0, model:GetExtentsSize().Y * 0.65 + 2, 0)
    billboard.AlwaysOnTop = true
    billboard.MaxDistance = 400
    billboard.Parent = primary

    if pet.icon ~= "" then
        local img = Instance.new("ImageLabel")
        img.BackgroundTransparency = 1
        img.AnchorPoint = Vector2.new(0.5, 0)
        img.Position = UDim2.new(0.5, 0, 0, 0)
        img.Size = UDim2.fromOffset(34, 34)
        img.Image = pet.icon
        img.ScaleType = Enum.ScaleType.Fit
        img.Parent = billboard
    end

    local title = Instance.new("TextLabel")
    title.BackgroundTransparency = 1
    title.Position = UDim2.new(0, 0, 0, 34)
    title.Size = UDim2.new(1, 0, 0, 22)
    title.Font = Enum.Font.GothamBold
    title.TextScaled = true
    title.TextColor3 = Color3.new(1, 1, 1)
    title.TextStrokeTransparency = 0.4
    title.Text = pet.name
    title.Parent = billboard

    local sub = Instance.new("TextLabel")
    sub.BackgroundTransparency = 1
    sub.Position = UDim2.new(0, 0, 0, 56)
    sub.Size = UDim2.new(1, 0, 0, 16)
    sub.Font = Enum.Font.GothamMedium
    sub.TextScaled = true
    sub.TextColor3 = pet.color
    sub.TextStrokeTransparency = 0.5
    sub.Text = string.format("%s | $%s/s", pet.rarity, abbreviateNumber(pet.rate))
    sub.Parent = billboard
end

local function setupModel(model, pet)
    local scale = CONFIG.SCALE_MULT * (pet.scale or 1)
    if math.abs(scale - 1) > 0.001 then
        pcall(function() model:ScaleTo(scale) end)
    end

    local hasJoints = false
    for _, d in ipairs(model:GetDescendants()) do
        if d:IsA("Motor6D") or d:IsA("Weld") or d:IsA("WeldConstraint") then
            hasJoints = true
            break
        end
    end

    local primary = model.PrimaryPart

    for _, part in ipairs(model:GetDescendants()) do
        if part:IsA("BasePart") then
            part.CanCollide = false
            part.CanQuery  = false
            part.CanTouch  = false
            part.Massless  = true

            local anchored = CONFIG.ANCHORED
            if anchored then
                anchored = (not hasJoints) or part == primary
            end
            part.Anchored = anchored
        end
    end

    if primary then
        primary.Anchored = CONFIG.ANCHORED
    end

    return hasJoints
end

local function playIdle(model, pet)
    if not (CONFIG.ANIMATE and pet.idle) then return end

    local ok, err = pcall(function()
        local host = model:FindFirstChildOfClass("Model") or model
        local controller = host:FindFirstChildOfClass("AnimationController")
            or host:FindFirstChildOfClass("Humanoid")

        if not controller then
            controller = Instance.new("AnimationController")
            controller.Parent = host
        end

        local animator = controller:FindFirstChildOfClass("Animator")
        if not animator then
            animator = Instance.new("Animator")
            animator.Parent = controller
        end

        local anim
        if typeof(pet.idle) == "Instance" and pet.idle:IsA("Animation") then
            anim = pet.idle:Clone()
        else
            anim = Instance.new("Animation")
            anim.AnimationId = tostring(pet.idle)
        end

        local trackAnim = animator:LoadAnimation(anim)
        trackAnim.Looped = true
        trackAnim:Play()
    end)

    if not ok then
        warn("[VALT SPAWNER] idle animation failed for " .. pet.name .. ": " .. tostring(err))
    end
end

--=====================================================================
-- Spawn limit
--=====================================================================
local function enforceSpawnLimit()
    while #activeSpawns > CONFIG.MAX_SPAWNS do
        local record = table.remove(activeSpawns, 1)
        if record and record.model then
            pcall(function() record.model:Destroy() end)
        end
    end
end

--=====================================================================
-- Input tracking for tool placement
--=====================================================================
local lastTouchPos = nil

track(UserInputService.TouchTap:Connect(function(pos)
    if pos and pos[1] then lastTouchPos = pos[1] end
end))

track(UserInputService.TouchEnded:Connect(function(part)
    lastTouchPos = part.Position
end))

local function getSpawnPosition()
    local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled

    if isMobile and lastTouchPos and Camera then
        local ray = Camera:ViewportPointToRay(lastTouchPos.X, lastTouchPos.Y)
        local params = RaycastParams.new()
        params.FilterType = Enum.RaycastFilterType.Exclude
        params.FilterDescendantsInstances = { LocalPlayer.Character, Workspace:FindFirstChild("__ValtSpawns") }
        local result = Workspace:Raycast(ray.Origin, ray.Direction * 600, params)
        if result then return result.Position end
    end

    local ok, mouse = pcall(function() return LocalPlayer:GetMouse() end)
    if ok and mouse and mouse.Hit and mouse.Target then
        return mouse.Hit.Position
    end

    local root = getCharacterRoot()
    if root then
        return root.Position + root.CFrame.LookVector * CONFIG.SPAWN_DISTANCE
    end

    return nil
end

--=====================================================================
-- Spawn
--=====================================================================
local function spawnPet(pet, positionOverride)
    if not running then return false, "unloaded" end

    local modelsFolder = ReplicatedStorage:FindFirstChild("AssetModels")
    if modelsFolder then
        modelsFolder = modelsFolder:FindFirstChild(pet.id)
    end
    if not modelsFolder then
        return false, "no model for " .. pet.id
    end

    local root = getCharacterRoot()
    if not root then
        return false, "character not loaded"
    end

    local clone = modelsFolder:Clone()
    clone.Name = "VALT_" .. pet.id

    local jointed = setupModel(clone, pet)
    clone.Parent = getSpawnFolder()

    local targetPos
    if CONFIG.OWN_PLOT_ONLY then
        targetPos = getPlotSpawnPosition(#activeSpawns)
    end

    if not targetPos then
        if typeof(positionOverride) == "Vector3" then
            targetPos = positionOverride
        else
            local index = #activeSpawns
            local angle = (index % 12) * (math.pi / 6)
            local dist  = CONFIG.SPAWN_DISTANCE + math.floor(index / 12) * 6
            targetPos = root.Position + Vector3.new(math.cos(angle) * dist, 0, math.sin(angle) * dist)
        end
    end

    local finalPos = resolveGroundPosition(targetPos, clone)
    local look     = root.Position

    pcall(function()
        clone:PivotTo(CFrame.new(finalPos, Vector3.new(look.X, finalPos.Y, look.Z)))
    end)

    if CONFIG.NAMETAG then
        pcall(attachNametag, clone, pet)
    end

    playIdle(clone, pet)

    local now = os.clock()
    activeSpawns[#activeSpawns + 1] = {
        model     = clone,
        root      = clone.PrimaryPart,
        basePos   = finalPos,
        t0        = now,
        lastPay   = now,
        name      = pet.name,
        rate      = pet.rate,
        tagHeight = clone:GetExtentsSize().Y * 0.65 + 4,
        jointed   = jointed,
    }

    enforceSpawnLimit()
    return true
end

--=====================================================================
-- Clear spawns
--=====================================================================
local function clearSpawns()
    for _, record in ipairs(activeSpawns) do
        if record.model then
            pcall(function() record.model:Destroy() end)
        end
    end
    table.clear(activeSpawns)

    local folder = Workspace:FindFirstChild("__ValtSpawns")
    if folder then
        pcall(function() folder:Destroy() end)
    end
end

--=====================================================================
-- Money popup
--=====================================================================
local function moneyPopup(record)
    if not record.root or not record.root.Parent then return end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "ValtCash"
    billboard.Size = UDim2.fromOffset(150, 40)
    billboard.StudsOffsetWorldSpace = Vector3.new(0, record.tagHeight, 0)
    billboard.AlwaysOnTop = true
    billboard.MaxDistance = 300
    billboard.Adornee = record.root
    billboard.Parent = record.root

    local label = Instance.new("TextLabel")
    label.BackgroundTransparency = 1
    label.Size = UDim2.fromScale(1, 1)
    label.Font = Enum.Font.LuckiestGuy
    label.TextScaled = true
    label.TextColor3 = Color3.fromRGB(80, 235, 105)
    label.TextStrokeColor3 = Color3.fromRGB(10, 45, 15)
    label.TextStrokeTransparency = 0.15
    label.Text = "+$" .. abbreviateNumber(record.rate)
    label.Parent = billboard

    TweenService:Create(billboard,
        TweenInfo.new(1.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
        { StudsOffsetWorldSpace = Vector3.new(0, record.tagHeight + 4.5, 0) }
    ):Play()

    TweenService:Create(label,
        TweenInfo.new(1.1, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
        { TextTransparency = 1, TextStrokeTransparency = 1 }
    ):Play()

    Debris:AddItem(billboard, 1.3)
end

--=====================================================================
-- Tool giving
--=====================================================================
local function giveTool(pet)
    if not running then return false, "unloaded" end

    local modelsFolder = ReplicatedStorage:FindFirstChild("AssetModels")
    if modelsFolder then
        modelsFolder = modelsFolder:FindFirstChild(pet.id)
    end
    if not modelsFolder then
        return false, "no model for " .. pet.id
    end

    local backpack = LocalPlayer:FindFirstChildOfClass("Backpack")
    if not backpack then
        return false, "no backpack"
    end

    local tool = Instance.new("Tool")
    tool.Name = pet.name
    tool.ToolTip = string.format("%s | $%s/s - click to place (one use)", pet.rarity, abbreviateNumber(pet.rate))
    tool.CanBeDropped = false
    tool.RequiresHandle = true
    tool.TextureId = pet.icon

    local handle = Instance.new("Part")
    handle.Name = "Handle"
    handle.Size = Vector3.new(1, 1, 1)
    handle.Transparency = 1
    handle.CanCollide = false
    handle.CanQuery = false
    handle.CanTouch = false
    handle.Massless = true
    handle.Parent = tool

    local clone = modelsFolder:Clone()
    clone.Name = "Pet"

    local size   = clone:GetExtentsSize()
    local maxDim = math.max(size.X, size.Y, size.Z)
    if maxDim > CONFIG.HAND_MAX_STUDS then
        local factor = CONFIG.HAND_MAX_STUDS / maxDim
        pcall(function() clone:ScaleTo(factor ^ 0.5) end)
    end

    local primary = clone.PrimaryPart or clone:FindFirstChildWhichIsA("BasePart", true)

    local hasMotor = false
    for _, d in ipairs(clone:GetDescendants()) do
        if d:IsA("Motor6D") then
            hasMotor = true
            break
        end
    end

    for _, part in ipairs(clone:GetDescendants()) do
        if part:IsA("BasePart") then
            part.Anchored = false
            part.CanCollide = false
            part.CanQuery = false
            part.CanTouch = false
            part.Massless = true
        end
    end

    clone.Parent = tool

    if primary then
        local weld = Instance.new("Weld")
        weld.Part0 = handle
        weld.Part1 = primary
        weld.C0 = CFrame.new(0, clone:GetExtentsSize().Y * 0.4, 0)
        weld.Parent = handle
    end

    if not hasMotor then
        for _, d in ipairs(clone:GetDescendants()) do
            if d:IsA("BasePart") and d ~= primary then
                local wc = Instance.new("WeldConstraint")
                wc.Part0 = primary
                wc.Part1 = d
                wc.Parent = primary
            end
        end
    else
        playIdle(clone, pet)
    end

    tool.Parent = backpack
    activeTools[#activeTools + 1] = tool

    track(tool.Activated:Connect(function()
        local pos = getSpawnPosition()
        local ok, err = spawnPet(pet, pos)
        if not ok then
            warn("[VALT SPAWNER] place failed: " .. tostring(err))
            return
        end

        for i = #activeTools, 1, -1 do
            if activeTools[i] == tool then
                table.remove(activeTools, i)
            end
        end
        pcall(function() tool:Destroy() end)
    end))

    return true
end

local function clearTools()
    for _, tool in ipairs(activeTools) do
        pcall(function() tool:Destroy() end)
    end
    table.clear(activeTools)
end

--=====================================================================
-- Cash visual (fake local counter)
--=====================================================================
local cashVisual = {
    label = nil,
    base  = 0,
    bonus = 0,
    shown = 0,
    ours  = nil,
    conn  = nil,
}

local MULTIPLIERS = { K = 1e3, M = 1e6, B = 1e9, T = 1e12 }

local function parseMoney(text)
    local numStr, suffix = tostring(text):gsub("[%$,%s]", ""):match("^([%d%.]+)(%a*)$")
    if not numStr then return nil end
    local mult = suffix ~= "" and MULTIPLIERS[suffix:upper()] or 1
    if not mult then return nil end
    return (tonumber(numStr) or 0) * mult
end

local function formatMoney(n)
    local units = {
        { 1e12, "T" },
        { 1e9,  "B" },
        { 1e6,  "M" },
        { 1e3,  "K" },
    }
    for _, u in ipairs(units) do
        if n >= u[1] then
            local val = n / u[1]
            local fmt = val >= 100 and "%.0f" or "%.1f"
            return "$" .. string.format(fmt, val):gsub("%.0$", "") .. u[2]
        end
    end
    return "$" .. string.format("%.0f", n)
end

local function findMoneyLabel()
    local playerGui = LocalPlayer:FindFirstChildOfClass("PlayerGui")
    if not playerGui then return nil end

    local hud = playerGui:FindFirstChild("HUD")
    for _, name in ipairs({ "GameHUD", "BottomLeft", "Money", "Value" }) do
        hud = hud and hud:FindFirstChild(name)
    end

    if hud and hud:IsA("TextLabel") then
        return hud
    end

    for _, obj in ipairs(playerGui:GetDescendants()) do
        if obj:IsA("TextLabel") and obj.Text:match("^%$%d") and obj.AbsoluteSize.X > 40 then
            local parent = obj
            while parent do
                if parent:IsA("ScreenGui") then
                    if parent.Enabled then return obj end
                    break
                end
                parent = parent.Parent
            end
        end
    end

    return nil
end

local function hookCashLabel()
    local label = findMoneyLabel()
    if not label then return false end
    if label == cashVisual.label then return true end

    if cashVisual.conn then
        pcall(function() cashVisual.conn:Disconnect() end)
    end

    cashVisual.label = label
    cashVisual.base  = parseMoney(label.Text) or 0
    cashVisual.shown = cashVisual.base + cashVisual.bonus

    cashVisual.conn = track(label:GetPropertyChangedSignal("Text"):Connect(function()
        if label.Text ~= cashVisual.ours then
            cashVisual.base = parseMoney(label.Text) or cashVisual.base
        end
    end))

    return true
end

local function releaseCashLabel()
    if cashVisual.conn then
        pcall(function() cashVisual.conn:Disconnect() end)
    end

    if cashVisual.label and cashVisual.label.Parent then
        pcall(function()
            cashVisual.label.Text = formatMoney(cashVisual.base)
        end)
    end

    cashVisual.label = nil
    cashVisual.conn  = nil
    cashVisual.bonus = 0
    cashVisual.ours  = nil
end

--=====================================================================
-- Heartbeat loop
--=====================================================================
track(RunService.Heartbeat:Connect(function(dt)
    if not running then return end

    local now = os.clock()

    -- Cash visual
    if CONFIG.CASH_VISUAL then
        if not (cashVisual.label and cashVisual.label.Parent) then
            hookCashLabel()
        end

        if cashVisual.label and cashVisual.bonus > 0 then
            local target = cashVisual.base + cashVisual.bonus
            cashVisual.shown = cashVisual.shown + (target - cashVisual.shown) * math.min(1, (dt or 0.016) * 6)
            if math.abs(target - cashVisual.shown) < 1 then
                cashVisual.shown = target
            end
            cashVisual.ours = formatMoney(cashVisual.shown)
            cashVisual.label.Text = cashVisual.ours
        end
    end

    -- Spin/float + payout
    for i = #activeSpawns, 1, -1 do
        local record = activeSpawns[i]

        if not record.model or not record.model.Parent then
            table.remove(activeSpawns, i)
        else
            local shouldRotate = CONFIG.SPIN or CONFIG.FLOAT
            if shouldRotate and record.root and record.root.Anchored then
                local t     = now - record.t0
                local yOff  = CONFIG.FLOAT and math.sin(t * 1.6) * 0.6 or 0
                local yaw   = CONFIG.SPIN and t * 1.1 or 0
                record.root.CFrame = CFrame.new(record.basePos + Vector3.new(0, yOff, 0)) * CFrame.Angles(0, yaw, 0)
            end

            if now - record.lastPay >= CONFIG.PAY_INTERVAL then
                record.lastPay = now
                if CONFIG.MONEY_POPUP then
                    moneyPopup(record)
                end
                if CONFIG.CASH_VISUAL then
                    cashVisual.bonus = cashVisual.bonus + record.rate * CONFIG.PAY_INTERVAL
                end
            end
        end
    end
end))

--=====================================================================
-- Unload
--=====================================================================
local function unload()
    running = false

    for _, conn in ipairs(connections) do
        pcall(function() conn:Disconnect() end)
    end
    table.clear(connections)

    clearSpawns()
    clearTools()
    releaseCashLabel()

    if UI.window then
        pcall(function() UI.window:Destroy() end)
    end

    getgenv().__VALT_SPAWNER = nil
    warn("[VALT SPAWNER] unloaded")
end

--=====================================================================
-- Build UI
--=====================================================================
local function buildUI()
    local ok, WindUI = pcall(function()
        return loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
    end)

    if not ok or not WindUI then
        warn("[VALT SPAWNER] WindUI failed to load: " .. tostring(WindUI))
        return
    end

    local vp = Camera and Camera.ViewportSize or Vector2.new(1280, 720)
    local size
    if UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled then
        size = UDim2.fromOffset(
            math.clamp(math.floor(vp.X * 0.92), 300, 560),
            math.clamp(math.floor(vp.Y * 0.82), 260, 420)
        )
    else
        size = UDim2.fromOffset(620, 480)
    end

    local window = WindUI:CreateWindow({
        Title         = "VALT :: Pet Spawner",
        Icon          = "egg",
        Author        = "Steal An Egg | " .. #pets .. " assets",
        Folder        = "Valt Spawner",
        Size          = size,
        Transparent   = true,
        Theme         = "Dark",
        SideBarWidth  = 165,
        HideSearchBar = false,
        OpenButton    = { Enabled = false },
    })
    UI.window = window

    if getgenv().__VALT_SPAWNER then
        getgenv().__VALT_SPAWNER.window = window
    end

    local petsTab    = window:Tab({ Title = "Pets",    Icon = "paw-print" })
    local previewTab = window:Tab({ Title = "Preview", Icon = "eye" })
    local optionsTab = window:Tab({ Title = "Options", Icon = "settings" })
    UI.gridTab = petsTab

    petsTab:Input({
        Title       = "Search",
        Placeholder = "pet name...",
        Callback    = function(text)
            filter.text = string.lower(tostring(text or ""))
            UI.rebuild()
        end,
    })

    petsTab:Dropdown({
        Title    = "Rarity",
        Values   = rarityList,
        Value    = "All",
        Callback = function(value)
            filter.rarity = tostring(value)
            UI.rebuild()
        end,
    })

    UI.counter = petsTab:Paragraph({
        Title = "Loaded",
        Desc  = #pets .. " assets ready - click a card to spawn",
    })

    petsTab:Divider()

    local function clearRows()
        for _, row in ipairs(UI.rows) do
            local frame = row.ElementFrame
            if typeof(frame) == "Instance" then
                pcall(function() frame:Destroy() end)
            end
        end
        table.clear(UI.rows)
    end

    local rebuildId = 0

    function UI.rebuild()
        rebuildId += 1
        local thisId = rebuildId
        clearRows()

        local filtered = {}
        for _, pet in ipairs(pets) do
            local nameMatch   = filter.text == "" or string.find(string.lower(pet.name), filter.text, 1, true) ~= nil
            local rarityMatch = filter.rarity == "All" or pet.rarity == filter.rarity
            if nameMatch and rarityMatch then
                filtered[#filtered + 1] = pet
            end
        end

        if UI.counter then
            pcall(function()
                UI.counter:SetDesc(#filtered .. " of " .. #pets .. " assets shown - click a card to spawn")
            end)
        end

        task.spawn(function()
            local row
            local col = 0

            for i, pet in ipairs(filtered) do
                if thisId ~= rebuildId or not running then return end

                if col == 0 then
                    row = petsTab:HStack({})
                    UI.rows[#UI.rows + 1] = row
                end

                local btn = row:Button({
                    Title = pet.name,
                    Desc  = string.format("%s | $%s/s", pet.rarity, abbreviateNumber(pet.rate)),
                    Callback = function()
                        selectedPet = pet

                        if CONFIG.GIVE_TOOL then
                            local success, err = giveTool(pet)
                            WindUI:Notify({
                                Title    = success and (pet.name .. " -> backpack") or "tool failed",
                                Content  = success and "equip it, then click to place the pet" or tostring(err),
                                Duration = success and 2 or 4,
                                Icon     = success and "backpack" or "circle-alert",
                            })
                            return
                        end

                        local success, err = spawnPet(pet)
                        WindUI:Notify({
                            Title    = success and (pet.name .. " spawned") or "spawn failed",
                            Content  = success
                                and (pet.rarity .. " | " .. #activeSpawns .. "/" .. CONFIG.MAX_SPAWNS .. " active")
                                or tostring(err),
                            Duration = success and 2 or 4,
                            Icon     = success and "sparkles" or "circle-alert",
                        })
                    end,
                })

                if pet.icon ~= "" then
                    pcall(function() btn:SetThumbnail(pet.icon) end)
                end

                col += 1
                if col >= CONFIG.GRID_COLUMNS then
                    col = 0
                    if i % (CONFIG.GRID_COLUMNS * 4) == 0 then
                        task.wait()
                    end
                end
            end
        end)
    end

    --=================================================================
    -- Preview tab
    --=================================================================
    previewTab:Section({ Title = "Model viewer" })

    local petNames = {}
    for _, pet in ipairs(pets) do
        petNames[#petNames + 1] = pet.name
    end

    local function previewPet(name)
        local pet
        for _, p in ipairs(pets) do
            if p.name == name then pet = p break end
        end
        if not pet then return end

        selectedPet = pet

        local modelsFolder = ReplicatedStorage:FindFirstChild("AssetModels")
        if modelsFolder then modelsFolder = modelsFolder:FindFirstChild(pet.id) end

        if not modelsFolder then
            WindUI:Notify({
                Title    = "no model",
                Content  = pet.id,
                Duration = 3,
                Icon     = "circle-alert",
            })
            return
        end

        if UI.viewport then
            pcall(function()
                UI.viewport:SetObject({ modelsFolder:Clone() })
            end)
        end

        if UI.previewInfo then
            pcall(function()
                UI.previewInfo:SetTitle(pet.name)
                UI.previewInfo:SetDesc(string.format(
                    "Rarity: %s | Earns: $%s/s | Base scale: %.2f",
                    pet.rarity, abbreviateNumber(pet.rate), pet.scale
                ))
                if pet.icon ~= "" then
                    UI.previewInfo:SetImage(pet.icon)
                end
            end)
        end
    end

    previewTab:Dropdown({
        Title    = "Pet",
        Values   = petNames,
        Value    = petNames[1],
        Callback = previewPet,
    })

    UI.previewInfo = previewTab:Paragraph({
        Title     = "-",
        Desc      = "pick a pet",
        Image     = "",
        ImageSize = 48,
    })

    local previewSource = ReplicatedStorage:FindFirstChild("AssetModels")
    if previewSource and pets[1] then
        previewSource = previewSource:FindFirstChild(pets[1].id)
    else
        previewSource = nil
    end

    UI.viewport = previewTab:Viewport({
        Title       = "Model",
        Object      = previewSource and previewSource:Clone() or Instance.new("Model"),
        Height      = 220,
        Interactive = true,
    })

    previewTab:Button({
        Title = "Take into backpack",
        Desc  = "hands you the previewed pet as a tool",
        Callback = function()
            if not selectedPet then return end
            local success, err = giveTool(selectedPet)
            WindUI:Notify({
                Title    = success and (selectedPet.name .. " -> backpack") or "tool failed",
                Content  = success and "equip it, then click to place the pet" or tostring(err),
                Duration = 3,
                Icon     = success and "backpack" or "circle-alert",
            })
        end,
    })

    previewTab:Button({
        Title = "Spawn this one",
        Desc  = "drops the previewed pet in front of you",
        Callback = function()
            if not selectedPet then return end
            local success, err = spawnPet(selectedPet)
            WindUI:Notify({
                Title    = success and (selectedPet.name .. " spawned") or "spawn failed",
                Content  = success
                    and (#activeSpawns .. "/" .. CONFIG.MAX_SPAWNS .. " active")
                    or tostring(err),
                Duration = 3,
                Icon     = success and "sparkles" or "circle-alert",
            })
        end,
    })

    --=================================================================
    -- Options tab
    --=================================================================
    optionsTab:Section({ Title = "Spawn behaviour" })

    optionsTab:Toggle({
        Title    = "Give as backpack tool",
        Desc     = "on = card click hands you the pet, click again in-world to place it",
        Value    = CONFIG.GIVE_TOOL,
        Callback = function(v) CONFIG.GIVE_TOOL = v end,
    })

    optionsTab:Slider({
        Title    = "Held pet size (studs)",
        Step     = 1,
        Value    = { Min = 2, Max = 14, Default = CONFIG.HAND_MAX_STUDS },
        Callback = function(v) CONFIG.HAND_MAX_STUDS = tonumber(v) or 4 end,
    })

    optionsTab:Slider({
        Title    = "Scale multiplier",
        Step     = 0.1,
        Value    = { Min = 0.2, Max = 8, Default = CONFIG.SCALE_MULT },
        Callback = function(v) CONFIG.SCALE_MULT = tonumber(v) or 1 end,
    })

    optionsTab:Slider({
        Title    = "Spawn distance",
        Step     = 1,
        Value    = { Min = 4, Max = 60, Default = CONFIG.SPAWN_DISTANCE },
        Callback = function(v) CONFIG.SPAWN_DISTANCE = tonumber(v) or 12 end,
    })

    optionsTab:Slider({
        Title    = "Max active spawns",
        Step     = 1,
        Value    = { Min = 1, Max = 120, Default = CONFIG.MAX_SPAWNS },
        Callback = function(v)
            CONFIG.MAX_SPAWNS = math.floor(tonumber(v) or 40)
            enforceSpawnLimit()
        end,
    })

    optionsTab:Toggle({
        Title    = "Spin",
        Value    = CONFIG.SPIN,
        Callback = function(v) CONFIG.SPIN = v end,
    })

    optionsTab:Toggle({
        Title    = "Float",
        Value    = CONFIG.FLOAT,
        Callback = function(v) CONFIG.FLOAT = v end,
    })

    optionsTab:Toggle({
        Title    = "Place in my plot only",
        Value    = CONFIG.OWN_PLOT_ONLY,
        Callback = function(v) CONFIG.OWN_PLOT_ONLY = v end,
    })

    optionsTab:Toggle({
        Title    = "Sit on the ground",
        Value    = CONFIG.GROUND,
        Callback = function(v) CONFIG.GROUND = v end,
    })

    optionsTab:Toggle({
        Title    = "Play idle animation",
        Value    = CONFIG.ANIMATE,
        Callback = function(v) CONFIG.ANIMATE = v end,
    })

    optionsTab:Toggle({
        Title    = "Name tags",
        Value    = CONFIG.NAMETAG,
        Callback = function(v) CONFIG.NAMETAG = v end,
    })

    optionsTab:Toggle({
        Title    = "Count it on my cash",
        Desc     = "your own money label rises with the popups - visual only, the server never sees it",
        Value    = CONFIG.CASH_VISUAL,
        Callback = function(v)
            CONFIG.CASH_VISUAL = v
            if not v then releaseCashLabel() end
        end,
    })

    optionsTab:Toggle({
        Title    = "Money popups",
        Desc     = "green +$X off every spawn, same as the game's own pets",
        Value    = CONFIG.MONEY_POPUP,
        Callback = function(v) CONFIG.MONEY_POPUP = v end,
    })

    optionsTab:Slider({
        Title    = "Payout interval (s)",
        Step     = 0.5,
        Value    = { Min = 0.5, Max = 10, Default = CONFIG.PAY_INTERVAL },
        Callback = function(v) CONFIG.PAY_INTERVAL = tonumber(v) or 1 end,
    })

    optionsTab:Toggle({
        Title    = "Anchored",
        Desc     = "off = the rig falls on its own joints",
        Value    = CONFIG.ANCHORED,
        Callback = function(v) CONFIG.ANCHORED = v end,
    })

    optionsTab:Divider()
    optionsTab:Section({ Title = "Bulk" })

    optionsTab:Button({
        Title = "Spawn random",
        Callback = function()
            local pet = pets[math.random(1, #pets)]
            spawnPet(pet)
            WindUI:Notify({
                Title    = pet.name,
                Content  = "random spawn",
                Duration = 2,
                Icon     = "dices",
            })
        end,
    })

    optionsTab:Button({
        Title = "Spawn every pet of the selected rarity",
        Desc  = "uses the rarity filter from the Pets tab",
        Callback = function()
            task.spawn(function()
                local count = 0
                for _, pet in ipairs(pets) do
                    local match = filter.rarity == "All" or pet.rarity == filter.rarity
                    if match then
                        if spawnPet(pet) then count += 1 end
                        task.wait(0.05)
                    end
                end
                WindUI:Notify({
                    Title    = "bulk spawn",
                    Content  = count .. " spawned",
                    Duration = 3,
                    Icon     = "sparkles",
                })
            end)
        end,
    })

    optionsTab:Button({
        Title = "Clear all spawns",
        Callback = function()
            local count = #activeSpawns
            clearSpawns()
            WindUI:Notify({
                Title    = "cleared",
                Content  = count .. " removed",
                Duration = 2,
                Icon     = "trash-2",
            })
        end,
    })

    optionsTab:Button({
        Title = "Empty the backpack",
        Desc  = "removes every pet tool this script handed you",
        Callback = function()
            local count = #activeTools
            clearTools()
            WindUI:Notify({
                Title    = "backpack cleared",
                Content  = count .. " tools removed",
                Duration = 2,
                Icon     = "backpack",
            })
        end,
    })

    optionsTab:Divider()

    optionsTab:Button({
        Title = "Unload (End)",
        Desc  = "kills every spawn, the hub and all connections",
        Callback = function()
            getgenv().__VALT_SPAWNER.unload()
        end,
    })

    UI.rebuild()
    if petNames[1] then previewPet(petNames[1]) end
    pcall(function() window:SelectTab(petsTab.Index) end)

    return window
end

--=====================================================================
-- Global API + End keybind
--=====================================================================
getgenv().__VALT_SPAWNER = {
    unload = unload,
    CONFIG = CONFIG,
    PETS   = pets,
    spawn  = spawnPet,
    give   = giveTool,
    tools  = activeTools,
    clear  = clearSpawns,
}

track(UserInputService.InputBegan:Connect(function(input, processed)
    if processed then return end
    if input.KeyCode == Enum.KeyCode.End then
        unload()
    end
end))

--=====================================================================
-- Boot
--=====================================================================
buildUI()

warn("[VALT SPAWNER] loaded - " .. #pets .. " assets indexed. Unload: End.")
81

Bloom Scripts Steal An Egg Script

key system working mobile

why cant i copy the module list in here but it has like auto steal egg god mode etc its the best script (IT HAS A KEYSYSTEM)

loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ab65367601a00bd8d92be3f"))()
rscripts.net updated 2 Nov 2026 282 views 1 loader source ↗
83

Lunar Hub | Auto Steal Eggs, Auto Hatch, Egg ESP

key system working Auto Steal EggsAuto HatchEgg ESP

Lunar Hub Steal An Egg script with Auto Steal Eggs, Auto Hatch, Egg ESP, Anti Hit, Server Hop, Fly and more. Get the key and join Discord at https://discord.gg/lunarhub Website https://lunarhub.net

loadstring(game:HttpGet("https://api.jnkie.com/api/v1/luascripts/public/4b18d970c2d9f8dd0d1d0af2062dbd15bd34d1b801eca581c9a456016683ca47/download"))()
api.jnkie.com updated 2 Nov 2026 196 views 1 loader source ↗

How to run these Steal An Egg scripts

  1. 1. Install an executor from the executor list. Delta or Xeno on mobile, Swift or Wave on PC.
  2. 2. Join Steal An Egg and wait until you are fully loaded into the server.
  3. 3. Attach the executor, paste one loader above, press Execute.
  4. 4. The in-game menu opens — usually on the left edge or under a small circle. Toggle features there.

If a script does nothing, the game updated and the loader broke. Try the next one down — the list is sorted by useful votes, so the top entries are the ones that keep getting updated.

Steal An Egg — questions

?What is the difference between auto-steal-all and auto-steal-selected?

Selected steals only the target you pick, so your base has room for eggs you actually want. All sweeps every visible egg until the server rate-limits you — better on a fresh server, worse if your base is nearly full.

?Do auto-hatch scripts still work?

They break on hatchery changes, which happen most updates. Sort by last-updated: anything from the last few days is the version to try, older ones usually fail silently.

?Will egg stealing show up on the leaderboard?

Steal counts are recorded server-side like normal steals, so your total moves. Hubs do not fake the count, they just time it faster.

Other games

All 10 games with scripts · 387 loaders indexed