-- LocalScript in StarterPlayerScripts local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local ReplicatedStorage = game:GetService("ReplicatedStorage") if _G.AutoClickerRunId then _G.AutoClickerRunId += 1 else _G.AutoClickerRunId = 1 end local myRun = _G.AutoClickerRunId local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local old = playerGui:FindFirstChild("AutoClickerGUI") if old then old:Destroy() end local function tycoonNameOfClicker(clicker: Instance): string local ok, res = pcall(function() return clicker.Parent.Parent.Parent.Parent.Name end) if ok and res then return res end return "?" end local function tycoonNameOfGiver(giver: Instance): string local ok, res = pcall(function() return giver.Parent.Parent.Name end) if ok and res then return res end return "?" end local function collectClickers() local found = {} local tyRoot = workspace:FindFirstChild("Tycoons") if not tyRoot then return found end local ok, desc = pcall(function() return tyRoot:GetDescendants() end) if not ok or not desc then return found end for _, d in ipairs(desc) do if d:IsA("ClickDetector") and d.Parent and d.Parent.Name == "Clicker" then local model = d.Parent.Parent local mine = model and model.Parent if model and model.Name == "Model" and mine then table.insert(found, { clicker = d.Parent, detector = d, model = model, mine = mine, tycoon = tycoonNameOfClicker(d.Parent), }) if #found >= 50 then break end end end end return found end local function collectGivers() local found = {} local tyRoot = workspace:FindFirstChild("Tycoons") if not tyRoot then return found end local ok, desc = pcall(function() return tyRoot:GetDescendants() end) if not ok or not desc then return found end for _, d in ipairs(desc) do if d:IsA("BasePart") and d.Name == "Giver" and d:FindFirstChild("Attachment") then table.insert(found, { part = d, tycoon = tycoonNameOfGiver(d), }) if #found >= 50 then break end end end return found end local entries = collectClickers() local givers = collectGivers() local KEYWORDS = { "click", "mine", "drop", "upgrade", "tycoon", "speed", "button", "ore" } local function nameMatches(n: string): boolean local l = string.lower(n) for _, k in ipairs(KEYWORDS) do if string.find(l, k, 1, true) then return true end end return false end local allRemotes: any = {} local seen: any = {} local function addRemote(r: any) if r and r:IsA("RemoteEvent") and not seen[r] then seen[r] = true table.insert(allRemotes, r) end end local function scanRoot(root: any, cap: number, onlyMatching: boolean) if not root then return end local ok, desc = pcall(function() return root:GetDescendants() end) if not ok or not desc then return end local n = 0 for _, d in ipairs(desc) do n += 1 if n > cap then break end if d:IsA("RemoteEvent") then if not onlyMatching or nameMatches(d.Name) then addRemote(d) end if #allRemotes >= 25 then return end end end end for _, e in ipairs(entries) do scanRoot(e.clicker, 50, false) scanRoot(e.model, 100, false) scanRoot(e.mine, 200, false) end scanRoot(ReplicatedStorage, 2000, true) local hasFireClick = (typeof(fireclickdetector) == "function") local hasFireTouch = (typeof(firetouchinterest) == "function") local clickNames: any = {} for _, e in ipairs(entries) do table.insert(clickNames, e.tycoon) end print("[AutoClicker] Click tycoons (" .. tostring(#entries) .. "): " .. table.concat(clickNames, ", ")) local giverNames: any = {} for _, g in ipairs(givers) do table.insert(giverNames, g.tycoon .. "=" .. g.part:GetFullName()) end print("[AutoClicker] Money givers (" .. tostring(#givers) .. "): " .. table.concat(giverNames, " | ")) if #entries == 0 then warn("[AutoClicker] No ClickDetectors found under workspace.Tycoons.") end if #givers == 0 then warn("[AutoClicker] No Giver+Attachment parts found under workspace.Tycoons.") end if not hasFireClick then warn("[AutoClicker] fireclickdetector() missing in Studio. Remote fallback will be used.") end if not hasFireTouch then warn("[AutoClicker] firetouchinterest() missing in Studio. Collect falls back to teleporting your character.") end local screenGui = Instance.new("ScreenGui") screenGui.Name = "AutoClickerGUI" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.Parent = playerGui local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 220, 0, 196) mainFrame.Position = UDim2.new(0.5, -110, 0.3, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Parent = screenGui local frameCorner = Instance.new("UICorner") frameCorner.CornerRadius = UDim.new(0, 8) frameCorner.Parent = mainFrame local dragBar = Instance.new("TextLabel") dragBar.Name = "DragBar" dragBar.Size = UDim2.new(1, 0, 0, 22) dragBar.BackgroundColor3 = Color3.fromRGB(25, 25, 25) dragBar.BorderSizePixel = 0 dragBar.Text = "DRAG HERE" dragBar.TextColor3 = Color3.fromRGB(170, 170, 170) dragBar.Font = Enum.Font.SourceSansBold dragBar.TextSize = 13 dragBar.Active = true dragBar.Parent = mainFrame local toggleBtn = Instance.new("TextButton") toggleBtn.Size = UDim2.new(0, 160, 0, 44) toggleBtn.Position = UDim2.new(0, 10, 0, 30) toggleBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) toggleBtn.BorderSizePixel = 0 toggleBtn.Text = "Auto Click: OFF" toggleBtn.TextColor3 = Color3.new(1, 1, 1) toggleBtn.Font = Enum.Font.SourceSansBold toggleBtn.TextSize = 16 toggleBtn.AutoButtonColor = false toggleBtn.Parent = mainFrame local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 6) toggleCorner.Parent = toggleBtn local collectBtn = Instance.new("TextButton") collectBtn.Size = UDim2.new(0, 160, 0, 44) collectBtn.Position = UDim2.new(0, 10, 0, 80) collectBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) collectBtn.BorderSizePixel = 0 collectBtn.Text = "Auto Collect: OFF" collectBtn.TextColor3 = Color3.new(1, 1, 1) collectBtn.Font = Enum.Font.SourceSansBold collectBtn.TextSize = 16 collectBtn.AutoButtonColor = false collectBtn.Parent = mainFrame local collectCorner = Instance.new("UICorner") collectCorner.CornerRadius = UDim.new(0, 6) collectCorner.Parent = collectBtn local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 30, 0, 30) closeBtn.Position = UDim2.new(1, -40, 0, 35) closeBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) closeBtn.BorderSizePixel = 0 closeBtn.Text = "X" closeBtn.TextColor3 = Color3.new(1, 1, 1) closeBtn.Font = Enum.Font.SourceSansBold closeBtn.TextSize = 18 closeBtn.Parent = mainFrame local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 6) closeCorner.Parent = closeBtn local statusLabel = Instance.new("TextLabel") statusLabel.Size = UDim2.new(1, -20, 0, 62) statusLabel.Position = UDim2.new(0, 10, 0, 128) statusLabel.BackgroundTransparency = 1 statusLabel.TextXAlignment = Enum.TextXAlignment.Left statusLabel.TextYAlignment = Enum.TextYAlignment.Top statusLabel.Font = Enum.Font.SourceSans statusLabel.TextSize = 12 statusLabel.TextColor3 = Color3.fromRGB(180, 180, 180) statusLabel.TextWrapped = true statusLabel.Text = "starting..." statusLabel.Parent = mainFrame local enabled = false local collectEnabled = false local dragging = false local dragStart = Vector2.new(0, 0) local startPos = mainFrame.Position local fires = 0 local collects = 0 local connections = {} local function refreshStatus() local methodText = "NONE" if hasFireClick and #allRemotes > 0 then methodText = "fireclick+" .. tostring(#allRemotes) .. " remote(s)" elseif hasFireClick then methodText = "fireclick" elseif #allRemotes > 0 then methodText = tostring(#allRemotes) .. " remote(s)" end local touchText = if hasFireTouch then "invisible" else "teleport" statusLabel.Text = "Clickers: " .. tostring(#entries) .. " | " .. methodText .. "\nMoneyGivers: " .. tostring(#givers) .. " (" .. touchText .. ") | Fires: " .. tostring(fires) .. " | Collects: " .. tostring(collects) end refreshStatus() local function cleanup() enabled = false collectEnabled = false dragging = false _G.AutoClickerRunId += 1 for _, c in ipairs(connections) do pcall(function() c:Disconnect() end) end table.clear(connections) screenGui:Destroy() collectgarbage("collect") end table.insert(connections, dragBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = mainFrame.Position end end)) table.insert(connections, UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart mainFrame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end)) table.insert(connections, UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end)) table.insert(connections, toggleBtn.Activated:Connect(function() enabled = not enabled if enabled then toggleBtn.Text = "Auto Click: ON" toggleBtn.BackgroundColor3 = Color3.fromRGB(0, 170, 85) else toggleBtn.Text = "Auto Click: OFF" toggleBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) end refreshStatus() end)) table.insert(connections, collectBtn.Activated:Connect(function() collectEnabled = not collectEnabled if collectEnabled then collectBtn.Text = "Auto Collect: ON" collectBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 200) else collectBtn.Text = "Auto Collect: OFF" collectBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) end refreshStatus() end)) table.insert(connections, closeBtn.Activated:Connect(cleanup)) local function doCollectAll() local char = player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end if hasFireTouch then for _, g in ipairs(givers) do if myRun ~= _G.AutoClickerRunId or not collectEnabled then break end pcall(function() firetouchinterest(hrp, g.part, 0) task.wait() firetouchinterest(hrp, g.part, 1) end) end else local saved: CFrame = hrp.CFrame for _, g in ipairs(givers) do if myRun ~= _G.AutoClickerRunId or not collectEnabled then break end pcall(function() hrp.CFrame = g.part.CFrame + Vector3.new(0, 3, 0) end) task.wait(0.25) end pcall(function() hrp.CFrame = saved end) end collects += 1 refreshStatus() end task.spawn(function() while myRun == _G.AutoClickerRunId do if collectEnabled and #givers > 0 then pcall(doCollectAll) end local waited = 0 while waited < 5 and myRun == _G.AutoClickerRunId do task.wait(0.1) waited += 0.1 end end end) local hbConn hbConn = RunService.Heartbeat:Connect(function() if myRun ~= _G.AutoClickerRunId then pcall(function() hbConn:Disconnect() end) return end if not enabled then return end fires += 1 if hasFireClick then for _, e in ipairs(entries) do pcall(fireclickdetector, e.detector) end end for _, r in ipairs(allRemotes) do pcall(function() r:FireServer() end) end if fires % 15 == 0 then refreshStatus() end end) table.insert(connections, hbConn)