-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. 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 Rscripts 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.")