Inf Money GUI Open Source
Key Required Patched

Inf Money GUI Open Source

[☯️] My Pooping Pigeons!SouljaWitchSrcSouljaWitchSrc 3.8K views 24 executesUpdated Dec 23, 2025
3.3/ 5(3 votes)
2167% Positive
Lua Script•347 lines (12295 chars)
-- 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 SoundService = game:GetService("SoundService")

-- VARIABLES
local localPlayer = Players.LocalPlayer
local plots = workspace.Map.Plots
local pigeonCollectRemote = ReplicatedStorage:WaitForChild("Remotes"):WaitForChild("PigeonCollectRequest")

local collecting = false
local multiFireCount = 4
local requestsThisFrame = 0
local totalCollected = 0
local maxSafeRequests = 20 -- safe max per frame
local miniMode = false

-- PREVENT DUPLICATE GUI
if localPlayer.PlayerGui:FindFirstChild("PigeonCollectorGUI") then
    localPlayer.PlayerGui.PigeonCollectorGUI:Destroy()
end

-- GUI SETUP
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "PigeonCollectorGUI"
screenGui.Parent = localPlayer:WaitForChild("PlayerGui")

-- MAIN FRAME
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 320, 0, 300)
frame.Position = UDim2.new(0.5, -160, 0.3, 0)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
frame.BorderSizePixel = 0
frame.AnchorPoint = Vector2.new(0.5, 0)
frame.Parent = screenGui

local frameCorner = Instance.new("UICorner")
frameCorner.CornerRadius = UDim.new(0, 15)
frameCorner.Parent = frame

local frameStroke = Instance.new("UIStroke")
frameStroke.Thickness = 2
frameStroke.Transparency = 0.5
frameStroke.Parent = frame

-- TITLE BAR
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 30)
titleBar.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
titleBar.BorderSizePixel = 0
titleBar.Parent = frame

local titleText = Instance.new("TextLabel")
titleText.Size = UDim2.new(1, -30, 1, 0)
titleText.Position = UDim2.new(0, 10, 0, 0)
titleText.BackgroundTransparency = 1
titleText.Text = "Pigeon Collector PRO"
titleText.TextColor3 = Color3.new(1,1,1)
titleText.Font = Enum.Font.GothamBold
titleText.TextSize = 18
titleText.TextXAlignment = Enum.TextXAlignment.Left
titleText.Parent = titleBar

-- CLOSE BUTTON
local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 30, 1, 0)
closeButton.Position = UDim2.new(1, -30, 0, 0)
closeButton.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
closeButton.TextColor3 = Color3.new(1,1,1)
closeButton.Font = Enum.Font.GothamBold
closeButton.TextSize = 18
closeButton.Text = "X"
closeButton.Parent = titleBar

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 5)
closeCorner.Parent = closeButton

closeButton.MouseButton1Click:Connect(function()
    screenGui:Destroy()
    collecting=false
end)

-- STATUS LABEL
local statusLabel = Instance.new("TextLabel")
statusLabel.Size = UDim2.new(1, -20, 0, 20)
statusLabel.Position = UDim2.new(0, 10, 0, 35)
statusLabel.BackgroundTransparency = 1
statusLabel.Text = "Status: Stopped"
statusLabel.TextColor3 = Color3.fromRGB(200,200,200)
statusLabel.Font = Enum.Font.Gotham
statusLabel.TextSize = 16
statusLabel.TextXAlignment = Enum.TextXAlignment.Left
statusLabel.Parent = frame

-- REQUESTS PER SECOND
local rpsLabel = Instance.new("TextLabel")
rpsLabel.Size = UDim2.new(1, -20, 0, 20)
rpsLabel.Position = UDim2.new(0, 10, 0, 55)
rpsLabel.BackgroundTransparency = 1
rpsLabel.Text = "Requests/sec: 0"
rpsLabel.TextColor3 = Color3.fromRGB(180,180,255)
rpsLabel.Font = Enum.Font.Gotham
rpsLabel.TextSize = 14
rpsLabel.TextXAlignment = Enum.TextXAlignment.Left
rpsLabel.Parent = frame

-- COLLECT COUNT
local collectLabel = Instance.new("TextLabel")
collectLabel.Size = UDim2.new(1, -20, 0, 20)
collectLabel.Position = UDim2.new(0, 10, 0, 75)
collectLabel.BackgroundTransparency = 1
collectLabel.Text = "Collected: 0"
collectLabel.TextColor3 = Color3.fromRGB(100,255,100)
collectLabel.Font = Enum.Font.Gotham
collectLabel.TextSize = 14
collectLabel.TextXAlignment = Enum.TextXAlignment.Left
collectLabel.Parent = frame

-- ERROR / WARNING LABEL
local errorLabel = Instance.new("TextLabel")
errorLabel.Size = UDim2.new(1, -20, 0, 18)
errorLabel.Position = UDim2.new(0, 10, 0, 95)
errorLabel.BackgroundTransparency = 1
errorLabel.Text = ""
errorLabel.TextColor3 = Color3.fromRGB(255,100,100)
errorLabel.Font = Enum.Font.Gotham
errorLabel.TextSize = 14
errorLabel.TextXAlignment = Enum.TextXAlignment.Left
errorLabel.Parent = frame

-- TOGGLE BUTTON
local toggleButton = Instance.new("TextButton")
toggleButton.Size = UDim2.new(0, 200, 0, 50)
toggleButton.Position = UDim2.new(0.5, -100, 0, 120)
toggleButton.BackgroundColor3 = Color3.fromRGB(80, 80, 255)
toggleButton.TextColor3 = Color3.new(1,1,1)
toggleButton.Font = Enum.Font.GothamBold
toggleButton.TextSize = 24
toggleButton.Text = "Start Collecting"
toggleButton.AutoButtonColor = false
toggleButton.Parent = frame

local buttonCorner = Instance.new("UICorner")
buttonCorner.CornerRadius = UDim.new(0, 12)
buttonCorner.Parent = toggleButton

-- HOVER + CLICK ANIMATION
toggleButton.MouseEnter:Connect(function()
    TweenService:Create(toggleButton, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(100, 100, 255)}):Play()
end)
toggleButton.MouseLeave:Connect(function()
    TweenService:Create(toggleButton, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(80, 80, 255)}):Play()
end)
toggleButton.MouseButton1Click:Connect(function()
    TweenService:Create(toggleButton, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0,210,0,55)}):Play()
    task.delay(0.1,function()
        TweenService:Create(toggleButton, TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0,200,0,50)}):Play()
    end)
    collecting = not collecting
    toggleButton.Text = collecting and "Stop Collecting" or "Start Collecting"
end)

-- SLIDER SETUP
local sliderFrame = Instance.new("Frame")
sliderFrame.Size = UDim2.new(0, 260, 0, 50)
sliderFrame.Position = UDim2.new(0.5, -130, 0, 180)
sliderFrame.BackgroundTransparency = 1
sliderFrame.Parent = frame

local sliderLabel = Instance.new("TextLabel")
sliderLabel.Size = UDim2.new(1, 0, 0, 20)
sliderLabel.Position = UDim2.new(0, 0, 0, 0)
sliderLabel.BackgroundTransparency = 1
sliderLabel.Text = "Requests per frame: "..multiFireCount
sliderLabel.TextColor3 = Color3.new(1,1,1)
sliderLabel.Font = Enum.Font.Gotham
sliderLabel.TextSize = 16
sliderLabel.TextXAlignment = Enum.TextXAlignment.Left
sliderLabel.Parent = sliderFrame

local sliderTrack = Instance.new("Frame")
sliderTrack.Size = UDim2.new(1, -20, 0, 10)
sliderTrack.Position = UDim2.new(0, 10, 0, 25)
sliderTrack.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
sliderTrack.Parent = sliderFrame

local trackCorner = Instance.new("UICorner")
trackCorner.CornerRadius = UDim.new(0, 5)
trackCorner.Parent = sliderTrack

local sliderKnob = Instance.new("Frame")
sliderKnob.Size = UDim2.new(multiFireCount/100,0,1,0)
sliderKnob.Position = UDim2.new(0,0,0,0)
sliderKnob.BackgroundColor3 = Color3.fromRGB(100,100,255)
sliderKnob.Parent = sliderTrack

local knobCorner = Instance.new("UICorner")
knobCorner.CornerRadius = UDim.new(0,5)
knobCorner.Parent = sliderKnob

-- SLIDER TOOLTIP
local sliderTooltip = Instance.new("TextLabel")
sliderTooltip.Size = UDim2.new(0,60,0,20)
sliderTooltip.BackgroundColor3 = Color3.fromRGB(50,50,50)
sliderTooltip.TextColor3 = Color3.new(1,1,1)
sliderTooltip.Font = Enum.Font.Gotham
sliderTooltip.TextSize = 14
sliderTooltip.Text = multiFireCount
sliderTooltip.Visible = false
sliderTooltip.AnchorPoint = Vector2.new(0.5,1)
sliderTooltip.Parent = sliderFrame

-- DRAGGING SLIDER LOGIC
local draggingSlider=false
sliderKnob.InputBegan:Connect(function(input)
    if input.UserInputType==Enum.UserInputType.MouseButton1 then
        draggingSlider=true
        sliderTooltip.Visible=true
    end
end)
sliderKnob.InputEnded:Connect(function(input)
    if input.UserInputType==Enum.UserInputType.MouseButton1 then
        draggingSlider=false
        sliderTooltip.Visible=false
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if draggingSlider and input.UserInputType==Enum.UserInputType.MouseMovement then
        local relative=math.clamp((input.Position.X - sliderTrack.AbsolutePosition.X)/sliderTrack.AbsoluteSize.X,0,1)
        multiFireCount = math.max(1, math.floor(relative*100))
        TweenService:Create(sliderKnob, TweenInfo.new(0.05), {Size=UDim2.new(relative,0,1,0)}):Play()
        sliderLabel.Text="Requests per frame: "..multiFireCount
        sliderTooltip.Position=UDim2.new(relative,0,0,0)
        sliderTooltip.Text=multiFireCount
    end
end)

-- DRAGGABLE GUI
local dragging, dragInput, mousePos, framePos
local function update(input)
    local delta=input.Position-mousePos
    frame.Position=UDim2.new(framePos.X.Scale, framePos.X.Offset+delta.X, framePos.Y.Scale, framePos.Y.Offset+delta.Y)
end
titleBar.InputBegan:Connect(function(input)
    if input.UserInputType==Enum.UserInputType.MouseButton1 then
        dragging=true
        mousePos=input.Position
        framePos=frame.Position
        input.Changed:Connect(function()
            if input.UserInputState==Enum.UserInputState.End then dragging=false end
        end)
    end
end)
titleBar.InputChanged:Connect(function(input)
    if input.UserInputType==Enum.UserInputType.MouseMovement then dragInput=input end
end)
UserInputService.InputChanged:Connect(function(input)
    if input==dragInput and dragging then update(input) end
end)

-- KEYBOARD SHORTCUTS
UserInputService.InputBegan:Connect(function(input,gameProcessed)
    if gameProcessed then return end
    if input.KeyCode==Enum.KeyCode.C then
        collecting=not collecting
        toggleButton.Text=collecting and "Stop Collecting" or "Start Collecting"
    elseif input.KeyCode==Enum.KeyCode.RightControl then
        screenGui:Destroy()
        collecting=false
    elseif input.KeyCode==Enum.KeyCode.Up then
        multiFireCount=math.min(100,multiFireCount+1)
    elseif input.KeyCode==Enum.KeyCode.Down then
        multiFireCount=math.max(1,multiFireCount-1)
    end
end)

-- HELPER FUNCTIONS
local function findPlayerPlot()
    local plrUserId=localPlayer.UserId
    for _, plot in pairs(plots:GetChildren()) do
        if plot:GetAttribute("OwnerUserId")==plrUserId then return plot end
    end
    errorLabel.Text="Couldn't find plot!"
    return nil
end

local function getPigeons(plot)
    if not plot then return {} end
    local pigeons=plot:FindFirstChild("Pigeons")
    if pigeons then
        local list={}
        for _, model in pairs(pigeons:GetChildren()) do
            local id=model:GetAttribute("PigeonID")
            if id then table.insert(list,id) end
        end
        return list
    end
    errorLabel.Text="No pigeons found on plot!"
    return {}
end

local plot=findPlayerPlot()
local pigeonList=getPigeons(plot)
if #pigeonList==0 then return end
local pigeonId=pigeonList[1] -- default first pigeon (multi-pigeon selection can be added later)

-- SOUND EFFECT
local collectSound = Instance.new("Sound")
collectSound.SoundId="rbxassetid://9118811807" -- soft click/pop sound
collectSound.Volume=0.3
collectSound.Parent=SoundService

-- COLLECTION LOOP
task.spawn(function()
    while true do
        RunService.Heartbeat:Wait()
        requestsThisFrame=0
        if collecting then
            if multiFireCount>maxSafeRequests then
                errorLabel.Text="Warning: Multi-fire above safe max!"
            else
                errorLabel.Text=""
            end
            statusLabel.Text="Status: Collecting ("..multiFireCount.." per frame)"
            for i=1,multiFireCount do
                if not collecting then break end
                -- FIRE SERVER
                local success,err = pcall(function()
                    pigeonCollectRemote:FireServer(pigeonId, math.huge+0.9439858923809532)
                end)
                if success then
                    requestsThisFrame=requestsThisFrame+1
                    totalCollected=totalCollected+1
                    collectLabel.Text="Collected: "..totalCollected
                    collectSound:Play()
                end
            end
        else
            statusLabel.Text="Status: Stopped"
        end
        rpsLabel.Text="Requests/sec: "..requestsThisFrame
    end
end)

Features & Information

Pigeon Collector PRO – Script Description Pigeon Collector PRO is a sleek and professional GUI designed to automate pigeon collection in your game. With real-time feedback, adjustable speed, and an easy-to-use interface, this tool makes collecting pigeons faster, smoother, and more efficient than ever. ✨ Features: Start/Stop Collecting: Toggle collecting at any time with a single click or hotkey (C). Fast Collection: Adjustable requests-per-frame slider to maximize collection speed. Request Safety Warnings: Prevents sending too many requests at once. Status & Feedback: Real-time display of collecting status, requests/sec, and total pigeons collected. Error Handling: Alerts if no plot or pigeons are found. Draggable & Clean GUI: Move the interface anywhere on your screen with a polished dark theme. Keyboard Shortcuts: C: Toggle collecting Up/Down arrows: Increase/decrease requests per frame Right Control: Close GUI Audio Feedback: Subtle sound when a pigeon is collected. Customizable Slider: Drag to adjust requests-per-frame with a live tooltip display.
#Pigeon Collector#Inf Money#Open Source

Community Comments (5)

dprtqdprtqDec 26, 2025

doesnt work+probably ai coded

Replying to @dprtq
SouljaWitchSrcSouljaWitchSrcDec 27, 2025

@dprtq did u have a pigeon already on ur base if not then thats the problem, and the GUI is partially ai coded as i already had a UI i made ages ago, just updated it for a quick script yk

wrlyxikwrlyxikDec 27, 2025

when i used it it gave me random number and very low like 50k/tick and i had pigeons worth way more

Replying to @wrlyxik
SouljaWitchSrcSouljaWitchSrcDec 27, 2025

@wrlyx it may have been parshly patched now?

wrlyxikwrlyxikDec 28, 2025

yeah its patched

More Scripts for [☯️] My Pooping Pigeons!