local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local VirtualUser = game:GetService("VirtualUser") local RunService = game:GetService("RunService") local lp = Players.LocalPlayer local ws = game.Workspace -- ── Anti-idle ──────────────────────────────────────────────────────────────── lp.Idled:Connect(function() VirtualUser:Button2Down(Vector2.new(0,0), ws.CurrentCamera.CFrame) task.wait(1) VirtualUser:Button2Up(Vector2.new(0,0), ws.CurrentCamera.CFrame) end) -- ── State ──────────────────────────────────────────────────────────────────── local enabled = false local collected = {} -- [instance] = true local loopThread = nil local status = "Idle" -- ── Helpers ────────────────────────────────────────────────────────────────── local function tp(pos) local char = lp.Character if char and char.PrimaryPart then char:SetPrimaryPartCFrame(CFrame.new(pos)) end end local function firepp(prompt, skip) if not prompt or prompt.ClassName ~= "ProximityPrompt" then return end local hold = prompt.HoldDuration if skip then prompt.HoldDuration = 0 end prompt:InputHoldBegin() task.wait(skip and 0 or hold) prompt:InputHoldEnd() if skip then prompt.HoldDuration = hold end end local function getPrompt(inst) return inst:FindFirstChildOfClass("ProximityPrompt") or inst:FindFirstChild("ProximityPrompt") end local function collectItem(inst) if collected[inst] then return end local ok, _ = pcall(function() local pos = inst:IsA("Model") and inst.PrimaryPart and inst.PrimaryPart.Position or (inst:IsA("BasePart") and inst.Position) if pos then tp(pos) task.wait(0.5) end local prompt = getPrompt(inst) if prompt then firepp(prompt, false) end end) if ok then collected[inst] = true end end -- ── Ghost walls (optional, toggle-able separately below) ───────────────────── local wallsHidden = false local function hideWalls() if wallsHidden then return end for _, v in pairs(ws:GetDescendants()) do pcall(function() v.Transparency = 1 end) end wallsHidden = true end -- ── Game detection ─────────────────────────────────────────────────────────── -- Returns a string key for the loop strategy to use. local function detectGame() -- Pattern: Workspace.Morphs (UnionOperation collect) if ws:FindFirstChild("Morphs") then return "morphs" end -- Pattern: Workspace.Wild (player-named folders, proximity prompt + remote) if ws:FindFirstChild("Wild") then return "wild" end -- Pattern: generic — scan all descendants for ProximityPrompts return "generic" end -- ── Remote fire (EarnScore pattern) ───────────────────────────────────────── local function tryFireRemote() local re = ReplicatedStorage:FindFirstChild("RemoteEvent") or ReplicatedStorage:FindFirstChildWhichIsA("RemoteEvent") if re then pcall(function() re:FireServer("EarnScore") end) end end -- ── Loop strategies ────────────────────────────────────────────────────────── local strategies = {} -- Morphs strategy (Collect The Body, Collect All Pets, etc.) strategies.morphs = function() local folder = ws:FindFirstChild("Morphs") if not folder then return end for _, inst in pairs(folder:GetChildren()) do if not enabled then return end if inst:IsA("UnionOperation") and not collected[inst] then collectItem(inst) task.wait(0.7) end end -- Re-scan for newly added instances task.wait(2) end -- Wild strategy (player-named collect objects + remote score) strategies.wild = function() local folder = ws:FindFirstChild("Wild") if not folder then return end local myName = lp.Name for _, v in pairs(folder:GetChildren()) do if not enabled then return end local parts = string.split(v.Name, "/") if parts[1] == myName then local target = v:FindFirstChild(parts[2]) if target then pcall(function() lp.Character:MoveTo(target.Position) task.wait(0.2) local pp = target:FindFirstChild("ProximityPrompt") or target:FindFirstChildOfClass("ProximityPrompt") if pp then firepp(pp, false) end task.wait(0.2) end) end else -- Destroy other players' prompts so they can't compete pcall(function() local target = v:FindFirstChild(string.split(v.Name, "/")[2]) if target then local pp = target:FindFirstChild("ProximityPrompt") if pp then pp:Destroy() end end end) end end tryFireRemote() task.wait(1) end -- Generic strategy — brute scan everything with a ProximityPrompt strategies.generic = function() for _, inst in pairs(ws:GetDescendants()) do if not enabled then return end local prompt = inst:FindFirstChildOfClass("ProximityPrompt") if prompt and not collected[inst] then collectItem(inst) task.wait(0.5) end end tryFireRemote() task.wait(2) end -- ── Main loop ──────────────────────────────────────────────────────────────── local function runLoop() local game_type = detectGame() status = "Running · " .. game_type while enabled do local ok, err = pcall(strategies[game_type]) if not ok then status = "Error: " .. tostring(err) task.wait(2) end task.wait(0) end status = "Stopped" end local function startLoop() if loopThread then return end enabled = true collected = {} loopThread = task.spawn(runLoop) end local function stopLoop() enabled = false if loopThread then task.cancel(loopThread) loopThread = nil end status = "Idle" end -- ── GUI ────────────────────────────────────────────────────────────────────── -- Destroy existing if re-running local existing = lp.PlayerGui:FindFirstChild("CollectorUI") if existing then existing:Destroy() end local sg = Instance.new("ScreenGui") sg.Name = "CollectorUI" sg.ResetOnSpawn = false sg.ZIndexBehavior = Enum.ZIndexBehavior.Sibling sg.Parent = lp.PlayerGui -- Main frame local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 240, 0, 160) frame.Position = UDim2.new(0.5, -120, 0, 20) frame.BackgroundColor3 = Color3.fromRGB(18, 18, 22) frame.BorderSizePixel = 0 frame.Active = true frame.Draggable = true frame.Parent = sg Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 8) -- Title bar local titleBar = Instance.new("Frame") titleBar.Size = UDim2.new(1, 0, 0, 32) titleBar.BackgroundColor3 = Color3.fromRGB(30, 30, 38) titleBar.BorderSizePixel = 0 titleBar.Parent = frame Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 8) local titleLabel = Instance.new("TextLabel") titleLabel.Size = UDim2.new(1, -10, 1, 0) titleLabel.Position = UDim2.new(0, 10, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "🥔 Universal Collector" titleLabel.TextColor3 = Color3.fromRGB(220, 220, 255) titleLabel.TextSize = 14 titleLabel.Font = Enum.Font.GothamBold titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Parent = titleBar -- Status label local statusLabel = Instance.new("TextLabel") statusLabel.Size = UDim2.new(1, -20, 0, 20) statusLabel.Position = UDim2.new(0, 10, 0, 40) statusLabel.BackgroundTransparency = 1 statusLabel.Text = "Status: Idle" statusLabel.TextColor3 = Color3.fromRGB(160, 160, 180) statusLabel.TextSize = 12 statusLabel.Font = Enum.Font.Gotham statusLabel.TextXAlignment = Enum.TextXAlignment.Left statusLabel.Parent = frame -- Game label local gameLabel = Instance.new("TextLabel") gameLabel.Size = UDim2.new(1, -20, 0, 20) gameLabel.Position = UDim2.new(0, 10, 0, 62) gameLabel.BackgroundTransparency = 1 gameLabel.Text = "Game: " .. detectGame() gameLabel.TextColor3 = Color3.fromRGB(120, 120, 150) gameLabel.TextSize = 11 gameLabel.Font = Enum.Font.Gotham gameLabel.TextXAlignment = Enum.TextXAlignment.Left gameLabel.Parent = frame -- Toggle button local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.new(1, -20, 0, 36) toggleBtn.Position = UDim2.new(0, 10, 0, 90) toggleBtn.BackgroundColor3 = Color3.fromRGB(80, 200, 120) toggleBtn.Text = "▶ Start Collecting" toggleBtn.TextColor3 = Color3.fromRGB(10, 10, 10) toggleBtn.TextSize = 13 toggleBtn.Font = Enum.Font.GothamBold toggleBtn.BorderSizePixel = 0 toggleBtn.Parent = frame Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(0, 6) -- Walls button local wallsBtn = Instance.new("TextButton") wallsBtn.Size = UDim2.new(1, -20, 0, 24) wallsBtn.Position = UDim2.new(0, 10, 0, 132) wallsBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 70) wallsBtn.Text = "👻 Hide Walls" wallsBtn.TextColor3 = Color3.fromRGB(180, 180, 255) wallsBtn.TextSize = 11 wallsBtn.Font = Enum.Font.Gotham wallsBtn.BorderSizePixel = 0 wallsBtn.Parent = frame Instance.new("UICorner", wallsBtn).CornerRadius = UDim.new(0, 5) -- ── Button wiring ───────────────────────────────────────────────────────────── toggleBtn.MouseButton1Click:Connect(function() if not enabled then startLoop() toggleBtn.Text = "⏹ Stop" toggleBtn.BackgroundColor3 = Color3.fromRGB(220, 70, 70) else stopLoop() toggleBtn.Text = "▶ Start Collecting" toggleBtn.BackgroundColor3 = Color3.fromRGB(80, 200, 120) end end) wallsBtn.MouseButton1Click:Connect(function() hideWalls() wallsBtn.Text = "👻 Walls Hidden" wallsBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 50) end) -- Status update loop task.spawn(function() while task.wait(0.5) do statusLabel.Text = "Status: " .. status gameLabel.Text = "Game: " .. detectGame() end end)