M
Description
Auto Egg Collect Auto Training (Bonuses) script might take a second or two when starting some of the features lmk if there are any issues/problems or if you want me to make scripts for any other games
GAMEOpen Sea For Animals!
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6abaf4b574d4348f2bb0b895"))()
end)
end)
--[[rscripts:analytics:end]]
-- Auto Train Bonus + Auto Wave + Egg Collector
local RS = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local VIM = game:GetService("VirtualInputManager")
local VirtualUser = game:GetService("VirtualUser")
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
-- ============================================================
-- REMOTES
-- ============================================================
local Services = RS.Packages._Index["sleitnick_knit@1.7.0"].knit.Services
local TrainingService = Services.TrainingService
local WaveService = Services.WaveService
local ClaimBonus = TrainingService.RF.ClaimBonus
local StartTraining = TrainingService.RF.StartTraining
local StopTraining = TrainingService.RF.StopTraining
local SpawnBonus = TrainingService.RE.SpawnBonus
local WaveStart = WaveService.RF.Start
local WaveFinished = WaveService.RF.Finished
-- ============================================================
-- EGG OPTIONS
-- ============================================================
local EGG_OPTIONS = {
{ display = "Any Egg", pattern = "" },
{ display = "Chicken/Parrot", pattern = "basic" },
{ display = "Frog", pattern = "frog" },
{ display = "Diamond Frog", pattern = "diamond" },
{ display = "Bat", pattern = "bat" },
{ display = "T-Rex", pattern = "trex" },
{ display = "Tiger", pattern = "tiger" },
{ display = "Capybara", pattern = "capybara" },
{ display = "Snake", pattern = "snake" },
{ display = "Ostrich", pattern = "ostrich" },
{ display = "Gold Gorilla", pattern = "gorilla" },
{ display = "Lava", pattern = "lava" },
{ display = "Special", pattern = "special" },
{ display = "Radioactive", pattern = "radio" },
{ display = "Polar Bear", pattern = "polar" },
}
-- ============================================================
-- CONFIG
-- ============================================================
local Config = {
AutoTrainBonus = false,
TrainInterval = 3.0,
AutoWave = false,
StaffHoldTime = 0.5,
ReleaseWait = 0.8,
EggPollTimeout = 4,
HoldEDuration = 0.6,
WaveTimeFallback = 12,
EggYOffset = 6,
PastLinePos = Vector3.new(655, 75, 327),
SelectedEggDisplay = "Any Egg",
SelectedEggPattern = "",
Debug = true,
}
-- ============================================================
-- STATE
-- ============================================================
local Stats = {
TrainsStarted = 0,
TrainsFailed = 0,
TrainsStopped = 0,
WavesStarted = 0,
WavesFinished = 0,
StaffActivations = 0,
StaffFails = 0,
EggsSpotted = 0,
EggsCollected = 0,
EggRetries = 0,
TargetSkipped = 0,
BonusClaimsOK = 0,
BonusClaimsFail = 0,
SlotChecks = 0,
SlotPresses = 0,
LastUuid = "—",
LastReturn = "—",
LastWaveTime = 0,
}
local function log(m) if Config.Debug then print("[Auto] " .. m) end end
-- ============================================================
-- BASIC HELPERS
-- ============================================================
local function getRoot()
local char = LocalPlayer.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
local function getHumanoid()
local char = LocalPlayer.Character
return char and char:FindFirstChildOfClass("Humanoid")
end
local function getEquippedTool()
local char = LocalPlayer.Character
if not char then return nil end
return char:FindFirstChildOfClass("Tool")
end
local function getPosition(obj)
if not obj or not obj.Parent then return nil end
if obj:IsA("BasePart") then return obj.Position end
if obj:IsA("Model") then
local ppp = obj:FindFirstChild("PPP", true)
if ppp and ppp:IsA("BasePart") then return ppp.Position end
local pp = obj.PrimaryPart
if pp then return pp.Position end
local part = obj:FindFirstChildWhichIsA("BasePart")
if part then return part.Position end
local ok, pivot = pcall(function() return obj:GetPivot() end)
if ok and pivot then return pivot.Position end
end
return nil
end
-- ============================================================
-- EGG MATCHING
-- ============================================================
local function normalize(s)
return (s:lower():gsub("[_%-%s]", ""))
end
local function eggMatchesPattern(egg, pattern)
if not pattern or pattern == "" or pattern == "Any Egg" then
return true
end
local name = normalize(egg.Name)
return name:find(normalize(pattern), 1, true) ~= nil
end
-- ============================================================
-- SLOT MANAGEMENT
-- ============================================================
local function ensureFirstSlot()
Stats.SlotChecks += 1
local hum = getHumanoid()
if hum then
pcall(function() hum:UnequipTools() end)
task.wait(0.1)
end
pressKey(0x31)
Stats.SlotPresses += 1
task.wait(0.1)
local stillHolding = getEquippedTool()
if stillHolding then
log("WARNING: still holding " .. stillHolding.Name .. " after unequip")
return false
end
log("Slot 1 confirmed (nothing equipped)")
return true
end
-- ============================================================
-- KEY PRESS HELPER
-- ============================================================
function pressKey(keyCode)
if keypress and keyrelease then
local ok = pcall(function()
keypress(keyCode); task.wait(0.05); keyrelease(keyCode)
end)
if ok then return true end
end
if VIM then
local enumKey = keyCode
if type(keyCode) == "number" and keyCode == 0x31 then
enumKey = Enum.KeyCode.One
end
local ok = pcall(function()
VIM:SendKeyEvent(true, enumKey, false, game)
task.wait(0.05)
VIM:SendKeyEvent(false, enumKey, false, game)
end)
if ok then return true end
end
return false
end
-- ============================================================
-- SAFE SPOT / SLOT 1
-- ============================================================
local function goToSafeSpotAndSelectSlot()
local root = getRoot()
if not root then return false end
root.CFrame = CFrame.new(Config.PastLinePos)
task.wait(0.4)
ensureFirstSlot()
return true
end
-- ============================================================
-- AUTO TRAIN BONUS
-- ============================================================
local function doStartTraining()
if not StartTraining then return false end
Stats.TrainsStarted += 1
local ok = pcall(function() return StartTraining:InvokeServer(unpack({})) end)
if ok then
log("StartTraining OK")
return true
end
Stats.TrainsFailed += 1
return false
end
local function doStopTraining()
if not StopTraining then return false end
local ok = pcall(function() return StopTraining:InvokeServer(unpack({})) end)
if ok then
Stats.TrainsStopped += 1
log("StopTraining OK")
return true
end
return false
end
task.spawn(function()
while true do
if Config.AutoTrainBonus then doStartTraining() end
task.wait(Config.TrainInterval)
end
end)
-- ============================================================
-- BONUS LISTENER
-- ============================================================
local function extractUuid(v)
if type(v) == "string" then
local id = v:match("(%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x)")
if id then return id end
if #v >= 8 and v:match("^%x") then return v end
elseif type(v) == "table" then
for _, sub in pairs(v) do
local id = extractUuid(sub)
if id then return id end
end
end
return nil
end
local function doClaimBonus(id, reason)
if not id or #id == 0 or not ClaimBonus then return false end
Stats.LastUuid = id
local ok = pcall(function() return ClaimBonus:InvokeServer(id) end)
if ok then Stats.BonusClaimsOK += 1; return true end
Stats.BonusClaimsFail += 1
return false
end
SpawnBonus.OnClientEvent:Connect(function(...)
local args = {...}
local uuid
for _, v in ipairs(args) do
uuid = extractUuid(v)
if uuid then break end
end
if uuid then
task.wait(0.2)
doClaimBonus(uuid, "spawn")
end
end)
-- ============================================================
-- STAFF ACTIVATION
-- ============================================================
local function findStaff()
local char = LocalPlayer.Character
if char then
local equipped = char:FindFirstChildOfClass("Tool")
if equipped then return equipped end
end
local backpack = LocalPlayer:FindFirstChild("Backpack")
if not backpack then return nil end
local keywords = { "staff", "trident", "wave", "poseidon", "sea", "scepter" }
local firstTool = nil
for _, tool in ipairs(backpack:GetChildren()) do
if tool:IsA("Tool") then
if not firstTool then firstTool = tool end
local lower = tool.Name:lower()
for _, kw in ipairs(keywords) do
if lower:find(kw, 1, true) then return tool end
end
end
end
return firstTool
end
local function equipTool(tool)
local hum = getHumanoid()
if not hum or not tool then return false end
pcall(function() hum:EquipTool(tool) end)
task.wait(0.2)
return true
end
local function holdLeftMouse(duration)
duration = duration or 0.5
if mouse1press and mouse1release then
local ok = pcall(function()
mouse1press(); task.wait(duration); mouse1release()
end)
if ok then return true end
end
if VirtualUser then
local ok = pcall(function()
VirtualUser:Button1Down(Vector2.new(0, 0), Camera.CFrame)
task.wait(duration)
VirtualUser:Button1Up(Vector2.new(0, 0), Camera.CFrame)
end)
if ok then return true end
end
if VIM then
local ok = pcall(function()
VIM:SendMouseButtonEvent(0, 0, 0, true, game, 0)
task.wait(duration)
VIM:SendMouseButtonEvent(0, 0, 0, false, game, 0)
end)
if ok then return true end
end
return false
end
local function activateStaff()
Stats.StaffActivations += 1
local tool = findStaff()
if not tool then Stats.StaffFails += 1; return false end
if not equipTool(tool) then Stats.StaffFails += 1; return false end
local root = getRoot()
if root then
root.CFrame = CFrame.new(root.Position, root.Position + Vector3.new(0, 0, -1))
end
task.wait(0.1)
if not holdLeftMouse(Config.StaffHoldTime) then
Stats.StaffFails += 1
return false
end
task.wait(0.2)
return true
end
-- ============================================================
-- E-KEY HOLD
-- ============================================================
local function holdE(duration)
duration = duration or 0.5
if keypress and keyrelease then
local ok = pcall(function()
keypress(0x45); task.wait(duration); keyrelease(0x45)
end)
if ok then return true end
end
if VIM then
local ok = pcall(function()
VIM:SendKeyEvent(true, Enum.KeyCode.E, false, game)
task.wait(duration)
VIM:SendKeyEvent(false, Enum.KeyCode.E, false, game)
end)
if ok then return true end
end
return false
end
-- ============================================================
-- WAVE LOGIC
-- ============================================================
local function findEggs()
local folder = Workspace:FindFirstChild("SpawnedItems")
if not folder then return {} end
local list = {}
for _, obj in ipairs(folder:GetChildren()) do
if obj:IsA("Model") then
local pos = getPosition(obj)
if pos then table.insert(list, { obj = obj, position = pos, name = obj.Name }) end
end
end
return list
end
local function findTargetEgg()
local root = getRoot()
if not root then return nil end
local myPos = root.Position
local allEggs = findEggs()
log("--- Egg search ---")
log(" Pattern: '" .. tostring(Config.SelectedEggPattern) .. "' (display: " .. Config.SelectedEggDisplay .. ")")
log(" Total eggs found: " .. #allEggs)
local best, bestDist = nil, math.huge
for i, egg in ipairs(allEggs) do
local matches = eggMatchesPattern(egg.obj, Config.SelectedEggPattern)
log(" [" .. i .. "] " .. egg.name .. " — matches: " .. tostring(matches))
if matches then
local d = (egg.position - myPos).Magnitude
if d < bestDist then best, bestDist = egg, d end
end
end
if best then
log(" → Best target: " .. best.name .. " (dist " .. math.floor(bestDist) .. ")")
else
log(" → No matching egg")
end
return best
end
-- Improved collectEgg — waits for landing, verifies pickup, retries on failure
local function collectEgg(egg)
if not egg then return false end
local root = getRoot()
if not root then return false end
for attempt = 1, 3 do
if not Config.AutoWave then return false end
-- 1. Teleport slightly above the egg
root.CFrame = CFrame.new(egg.position + Vector3.new(0, Config.EggYOffset, 0))
-- 2. Wait for the character to actually land
local landDeadline = os.clock() + 1.0
while os.clock() < landDeadline do
local vel = root.AssemblyLinearVelocity
local horizSpeed = math.sqrt(vel.X * vel.X + vel.Z * vel.Z)
local dist = (root.Position - egg.position).Magnitude
if horizSpeed < 2 and dist < 15 then break end
task.wait(0.05)
end
-- 3. Extra settle
task.wait(0.15)
-- 4. Nudge directly onto the egg if we're still too far
local distToEgg = (root.Position - egg.position).Magnitude
if distToEgg > 6 then
root.CFrame = CFrame.new(egg.position + Vector3.new(0, 3, 0))
task.wait(0.2)
end
-- 5. Face the egg
local lookPos = Vector3.new(egg.position.X, root.Position.Y, egg.position.Z)
if (lookPos - root.Position).Magnitude > 0.1 then
root.CFrame = CFrame.new(root.Position, lookPos)
task.wait(0.05)
end
-- 6. Hold E
holdE(Config.HoldEDuration)
-- 7. Wait for the egg to disappear (confirm pickup)
local pickupDeadline = os.clock() + 1.0
local pickedUp = false
while os.clock() < pickupDeadline do
if not egg.obj.Parent then
pickedUp = true
break
end
task.wait(0.05)
end
if pickedUp then
Stats.EggsCollected += 1
log("Egg collected: " .. egg.name .. " (attempt " .. attempt .. ")")
return true
else
Stats.EggRetries += 1
log("Attempt " .. attempt .. " didn't pick up " .. egg.name .. " — retrying")
root.CFrame = CFrame.new(egg.position + Vector3.new(0, Config.EggYOffset, 0))
task.wait(0.2)
end
end
log("Failed to collect " .. egg.name .. " after 3 attempts")
return false
end
local function startWaveDirect()
local ok, ret = pcall(function() return WaveStart:InvokeServer(5) end)
if not ok then return nil end
if typeof(ret) == "table" then
Stats.LastWaveTime = ret.time or Config.WaveTimeFallback
else
Stats.LastWaveTime = Config.WaveTimeFallback
end
Stats.WavesStarted += 1
return ret
end
local function finishWave()
local ok = pcall(function() WaveFinished:InvokeServer({}) end)
if ok then Stats.WavesFinished += 1 end
return ok
end
local function runWaveCycle()
if getEquippedTool() then ensureFirstSlot() end
local ok = activateStaff()
if not ok then
log("Staff activation failed — falling back to direct Start")
startWaveDirect()
end
task.wait(Config.ReleaseWait)
local deadline = os.clock() + Config.EggPollTimeout
local eggs = {}
while os.clock() < deadline do
eggs = findEggs()
if #eggs > 0 then break end
task.wait(0.1)
end
if #eggs == 0 then
log("No eggs appeared in SpawnedItems within " .. Config.EggPollTimeout .. "s")
else
Stats.EggsSpotted += #eggs
log("Found " .. #eggs .. " eggs in SpawnedItems")
end
local target = findTargetEgg()
if target then
collectEgg(target)
task.wait(0.2)
else
Stats.TargetSkipped += 1
end
goToSafeSpotAndSelectSlot()
task.wait(0.3)
finishWave()
task.wait(1.0)
end
task.spawn(function()
while true do
if Config.AutoWave then
runWaveCycle()
task.wait(0.5)
else
task.wait(0.5)
end
end
end)
-- ============================================================
-- GUI
-- ============================================================
local gui = Instance.new("ScreenGui")
gui.Name = "AutoBonusWave"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Global
gui.Parent = game:GetService("CoreGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 340, 0, 560)
frame.Position = UDim2.new(0.5, -170, 0.5, -280)
frame.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.ZIndex = 10
frame.Parent = gui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 10)
corner.Parent = frame
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 30)
title.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
title.Text = "Auto Train + Wave Farm"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Font = Enum.Font.GothamBold
title.TextSize = 14
title.ZIndex = 11
title.Parent = frame
local tc = Instance.new("UICorner")
tc.CornerRadius = UDim.new(0, 10)
tc.Parent = title
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 22, 0, 22)
closeBtn.Position = UDim2.new(1, -26, 0, 4)
closeBtn.BackgroundColor3 = Color3.fromRGB(140, 40, 40)
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.Text = "X"
closeBtn.Font = Enum.Font.GothamBold
closeBtn.TextSize = 12
closeBtn.ZIndex = 12
closeBtn.Parent = frame
local cbc = Instance.new("UICorner")
cbc.CornerRadius = UDim.new(0, 6)
cbc.Parent = closeBtn
closeBtn.MouseButton1Click:Connect(function()
Config.AutoTrainBonus = false
Config.AutoWave = false
task.spawn(doStopTraining)
gui:Destroy()
end)
local tabBar = Instance.new("Frame")
tabBar.Size = UDim2.new(1, -20, 0, 32)
tabBar.Position = UDim2.new(0, 10, 0, 36)
tabBar.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
tabBar.BorderSizePixel = 0
tabBar.ZIndex = 11
tabBar.Parent = frame
local tbc = Instance.new("UICorner")
tbc.CornerRadius = UDim.new(0, 6)
tbc.Parent = tabBar
local autoTabBtn = Instance.new("TextButton")
autoTabBtn.Size = UDim2.new(0.5, -2, 1, -4)
autoTabBtn.Position = UDim2.new(0, 2, 0, 2)
autoTabBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 180)
autoTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
autoTabBtn.Font = Enum.Font.GothamBold
autoTabBtn.TextSize = 13
autoTabBtn.Text = "Auto"
autoTabBtn.ZIndex = 12
autoTabBtn.Parent = tabBar
local atbc = Instance.new("UICorner")
atbc.CornerRadius = UDim.new(0, 5)
atbc.Parent = autoTabBtn
local manualTabBtn = Instance.new("TextButton")
manualTabBtn.Size = UDim2.new(0.5, -2, 1, -4)
manualTabBtn.Position = UDim2.new(0.5, 0, 0, 2)
manualTabBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
manualTabBtn.TextColor3 = Color3.fromRGB(200, 200, 210)
manualTabBtn.Font = Enum.Font.GothamBold
manualTabBtn.TextSize = 13
manualTabBtn.Text = "Manual"
manualTabBtn.ZIndex = 12
manualTabBtn.Parent = tabBar
local mtbc = Instance.new("UICorner")
mtbc.CornerRadius = UDim.new(0, 5)
mtbc.Parent = manualTabBtn
-- AUTO TAB
local autoTab = Instance.new("Frame")
autoTab.Size = UDim2.new(1, 0, 1, -78)
autoTab.Position = UDim2.new(0, 0, 0, 78)
autoTab.BackgroundTransparency = 1
autoTab.ZIndex = 11
autoTab.Parent = frame
local eggLabel = Instance.new("TextLabel")
eggLabel.Size = UDim2.new(0, 300, 0, 16)
eggLabel.Position = UDim2.new(0, 14, 0, 4)
eggLabel.BackgroundTransparency = 1
eggLabel.Text = "Target Egg:"
eggLabel.TextColor3 = Color3.fromRGB(180, 187, 198)
eggLabel.Font = Enum.Font.Gotham
eggLabel.TextSize = 11
eggLabel.TextXAlignment = Enum.TextXAlignment.Left
eggLabel.ZIndex = 11
eggLabel.Parent = autoTab
local dropdownBtn = Instance.new("TextButton")
dropdownBtn.Size = UDim2.new(0, 312, 0, 28)
dropdownBtn.Position = UDim2.new(0, 14, 0, 22)
dropdownBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 70)
dropdownBtn.TextColor3 = Color3.fromRGB(240, 242, 245)
dropdownBtn.Font = Enum.Font.GothamBold
dropdownBtn.TextSize = 12
dropdownBtn.Text = "▼ " .. Config.SelectedEggDisplay
dropdownBtn.TextXAlignment = Enum.TextXAlignment.Left
dropdownBtn.ZIndex = 15
dropdownBtn.Parent = autoTab
local dbc = Instance.new("UICorner")
dbc.CornerRadius = UDim.new(0, 5)
dbc.Parent = dropdownBtn
local dbStroke = Instance.new("UIStroke")
dbStroke.Thickness = 1
dbStroke.Color = Color3.fromRGB(90, 90, 110)
dbStroke.Parent = dropdownBtn
local backdrop = Instance.new("TextButton")
backdrop.Size = UDim2.new(1, 0, 1, 0)
backdrop.BackgroundTransparency = 1
backdrop.Text = ""
backdrop.Visible = false
backdrop.ZIndex = 40
backdrop.Parent = gui
local dropdownList = Instance.new("ScrollingFrame")
dropdownList.Size = UDim2.new(0, 312, 0, 0)
dropdownList.Position = UDim2.new(0, 14, 0, 52)
dropdownList.BackgroundColor3 = Color3.fromRGB(45, 45, 60)
dropdownList.BorderSizePixel = 0
dropdownList.ScrollBarThickness = 6
dropdownList.CanvasSize = UDim2.new(0, 0, 0, 0)
dropdownList.Visible = false
dropdownList.ZIndex = 50
dropdownList.Parent = autoTab
local dlc = Instance.new("UICorner")
dlc.CornerRadius = UDim.new(0, 5)
dlc.Parent = dropdownList
local listLayout = Instance.new("UIListLayout")
listLayout.Padding = UDim.new(0, 2)
listLayout.Parent = dropdownList
local dropdownOpen = false
local function rebuildOptions()
for _, child in ipairs(dropdownList:GetChildren()) do
if child:IsA("TextButton") then child:Destroy() end
end
for i, opt in ipairs(EGG_OPTIONS) do
local isSelected = (opt.display == Config.SelectedEggDisplay)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -10, 0, 26)
btn.Position = UDim2.new(0, 5, 0, 0)
btn.BackgroundColor3 = isSelected and Color3.fromRGB(0, 130, 210) or Color3.fromRGB(60, 60, 80)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 12
btn.Text = (isSelected and "● " or " ") .. opt.display
btn.TextXAlignment = Enum.TextXAlignment.Left
btn.LayoutOrder = i
btn.ZIndex = 52
btn.Parent = dropdownList
btn.MouseButton1Click:Connect(function()
Config.SelectedEggDisplay = opt.display
Config.SelectedEggPattern = opt.pattern
dropdownBtn.Text = "▼ " .. opt.display
dropdownOpen = false
dropdownList.Visible = false
dropdownList.Size = UDim2.new(0, 312, 0, 0)
backdrop.Visible = false
log("Target egg: " .. opt.display .. " (pattern='" .. tostring(opt.pattern) .. "')")
end)
end
dropdownList.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 10)
end
dropdownBtn.MouseButton1Click:Connect(function()
if dropdownOpen then
dropdownList.Visible = false
dropdownList.Size = UDim2.new(0, 312, 0, 0)
backdrop.Visible = false
dropdownOpen = false
else
rebuildOptions()
local height = math.min(200, #EGG_OPTIONS * 28 + 12)
dropdownList.Size = UDim2.new(0, 312, 0, height)
dropdownList.Visible = true
backdrop.Visible = true
dropdownOpen = true
end
end)
backdrop.MouseButton1Click:Connect(function()
if dropdownOpen then
dropdownList.Visible = false
dropdownList.Size = UDim2.new(0, 312, 0, 0)
backdrop.Visible = false
dropdownOpen = false
end
end)
local function makeToggle(parent, text, y, key, default, onEnable, onDisable)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.9, 0, 0, 34)
btn.Position = UDim2.new(0.05, 0, 0, y)
btn.BackgroundColor3 = default and Color3.fromRGB(0, 160, 0) or Color3.fromRGB(180, 50, 50)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 13
btn.Text = text .. ": " .. (default and "ON" or "OFF")
btn.ZIndex = 11
btn.Parent = parent
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, 6)
c.Parent = btn
btn.MouseButton1Click:Connect(function()
Config[key] = not Config[key]
btn.BackgroundColor3 = Config[key] and Color3.fromRGB(0, 160, 0) or Color3.fromRGB(180, 50, 50)
btn.Text = text .. ": " .. (Config[key] and "ON" or "OFF")
if Config[key] and onEnable then onEnable() end
if not Config[key] and onDisable then onDisable() end
end)
return btn
end
makeToggle(autoTab, "Auto Train Bonus", 84, "AutoTrainBonus", false, nil, function()
task.spawn(doStopTraining)
end)
makeToggle(autoTab, "Auto Wave + Egg Farm", 124, "AutoWave", false, function()
task.spawn(function()
log("Auto Wave ON — going to safe spot + slot 1")
goToSafeSpotAndSelectSlot()
end)
end)
local infoPanel = Instance.new("TextLabel")
infoPanel.Size = UDim2.new(0.9, 0, 0, 68)
infoPanel.Position = UDim2.new(0.05, 0, 0, 166)
infoPanel.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
infoPanel.TextColor3 = Color3.fromRGB(180, 190, 210)
infoPanel.Font = Enum.Font.Gotham
infoPanel.TextSize = 10
infoPanel.TextWrapped = true
infoPanel.TextXAlignment = Enum.TextXAlignment.Left
infoPanel.TextYAlignment = Enum.TextYAlignment.Top
infoPanel.Text = " Cycle: Ensure slot 1 → Open wave →\n Wait eggs → Match target → Collect →\n Safe spot + slot 1 → Close wave → repeat"
infoPanel.ZIndex = 11
infoPanel.Parent = autoTab
local ipc = Instance.new("UICorner")
ipc.CornerRadius = UDim.new(0, 6)
ipc.Parent = infoPanel
local stats = Instance.new("TextLabel")
stats.Size = UDim2.new(0.9, 0, 0, 240)
stats.Position = UDim2.new(0.05, 0, 0, 242)
stats.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
stats.TextColor3 = Color3.fromRGB(210, 210, 220)
stats.Font = Enum.Font.Code
stats.TextSize = 11
stats.TextXAlignment = Enum.TextXAlignment.Left
stats.TextYAlignment = Enum.TextYAlignment.Top
stats.ZIndex = 11
stats.Parent = autoTab
local slc = Instance.new("UICorner")
slc.CornerRadius = UDim.new(0, 6)
slc.Parent = stats
task.spawn(function()
while gui.Parent do
stats.Text = table.concat({
" Target: " .. Config.SelectedEggDisplay,
" ── Training ──",
" Started: " .. Stats.TrainsStarted,
" Stopped: " .. Stats.TrainsStopped,
"",
" ── Wave ──",
" Started: " .. Stats.WavesStarted,
" Closed: " .. Stats.WavesFinished,
" Eggs spotted: " .. Stats.EggsSpotted,
" Eggs collected: " .. Stats.EggsCollected,
" Egg retries: " .. Stats.EggRetries,
" Target skipped: " .. Stats.TargetSkipped,
"",
" ── Slot ──",
" Checks: " .. Stats.SlotChecks,
" Presses: " .. Stats.SlotPresses,
"",
" ── Staff ──",
" Activations: " .. Stats.StaffActivations,
" Failed: " .. Stats.StaffFails,
}, "\n")
task.wait(0.4)
end
end)
-- MANUAL TAB
local manualTab = Instance.new("Frame")
manualTab.Size = UDim2.new(1, 0, 1, -78)
manualTab.Position = UDim2.new(0, 0, 0, 78)
manualTab.BackgroundTransparency = 1
manualTab.Visible = false
manualTab.ZIndex = 11
manualTab.Parent = frame
local function makeBtn(parent, text, x, y, w, h, color, onClick)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, w, 0, h or 32)
btn.Position = UDim2.new(0, x, 0, y)
btn.BackgroundColor3 = color
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Font = Enum.Font.GothamBold
btn.TextSize = 11
btn.Text = text
btn.TextWrapped = true
btn.ZIndex = 11
btn.Parent = parent
local c = Instance.new("UICorner")
c.CornerRadius = UDim.new(0, 6)
c.Parent = btn
btn.MouseButton1Click:Connect(onClick)
return btn
end
makeBtn(manualTab, "Start Training", 14, 10, 150, 34, Color3.fromRGB(0, 120, 180), function()
doStartTraining()
end)
makeBtn(manualTab, "Stop Training", 176, 10, 150, 34, Color3.fromRGB(140, 60, 60), function()
doStopTraining()
end)
makeBtn(manualTab, "Activate Staff (hold LMB)", 14, 52, 312, 34, Color3.fromRGB(180, 140, 40), function()
activateStaff()
end)
makeBtn(manualTab, "Start Wave (direct)", 14, 92, 150, 32, Color3.fromRGB(120, 100, 200), function()
startWaveDirect()
end)
makeBtn(manualTab, "Close Wave", 176, 92, 150, 32, Color3.fromRGB(140, 60, 60), function()
finishWave()
end)
makeBtn(manualTab, "Collect Nearest Target", 14, 130, 150, 32, Color3.fromRGB(180, 140, 40), function()
local egg = findTargetEgg()
if egg then collectEgg(egg) end
end)
makeBtn(manualTab, "Safe Spot + Slot 1", 176, 130, 150, 32, Color3.fromRGB(80, 130, 200), function()
goToSafeSpotAndSelectSlot()
end)
makeBtn(manualTab, "Force Unequip (API)", 14, 168, 150, 32, Color3.fromRGB(80, 140, 80), function()
local hum = getHumanoid()
if hum then
pcall(function() hum:UnequipTools() end)
log("Called UnequipTools")
end
end)
makeBtn(manualTab, "Test LMB Hold (0.5s)", 176, 168, 150, 32, Color3.fromRGB(80, 140, 80), function()
holdLeftMouse(0.5)
end)
makeBtn(manualTab, "Check Current Slot", 14, 206, 150, 32, Color3.fromRGB(100, 100, 140), function()
print("[Auto] Equipped:", getEquippedTool() and getEquippedTool().Name or "none")
end)
makeBtn(manualTab, "Press 1 Now", 176, 206, 150, 32, Color3.fromRGB(80, 100, 160), function()
pressKey(0x31)
end)
makeBtn(manualTab, "List Current Eggs", 14, 244, 312, 32, Color3.fromRGB(100, 80, 140), function()
local eggs = findEggs()
print("[Auto] " .. #eggs .. " eggs in SpawnedItems:")
print("[Auto] Current pattern: '" .. tostring(Config.SelectedEggPattern) .. "'")
for i, e in ipairs(eggs) do
print(" " .. i .. ". " .. e.name .. " — matches: " .. tostring(eggMatchesPattern(e.obj, Config.SelectedEggPattern)))
end
end)
makeBtn(manualTab, "Clear Stats", 14, 284, 312, 32, Color3.fromRGB(120, 60, 60), function()
for k in pairs(Stats) do
if type(Stats[k]) == "number" then Stats[k] = 0 end
end
end)
local function switchTab(tab)
if tab == "auto" then
autoTab.Visible = true; manualTab.Visible = false
autoTabBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 180)
manualTabBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
autoTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
manualTabBtn.TextColor3 = Color3.fromRGB(200, 200, 210)
else
autoTab.Visible = false; manualTab.Visible = true
autoTabBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
manualTabBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 180)
autoTabBtn.TextColor3 = Color3.fromRGB(200, 200, 210)
manualTabBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
end
end
autoTabBtn.MouseButton1Click:Connect(function() switchTab("auto") end)
manualTabBtn.MouseButton1Click:Connect(function() switchTab("manual") end)
print("[Auto] Loaded.")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place