
Keyless Patched

-- 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)


doesnt work+probably ai coded
@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
when i used it it gave me random number and very low like 50k/tick and i had pigeons worth way more
@wrlyx it may have been parshly patched now?
yeah its patched