
KeylessUniversal

-- Simple LocalScript for Roblox Studio.
-- Place this in StarterPlayer > StarterPlayerScripts.
-- Polished, draggable GUI that RECURSIVELY searches ALL remotes (RemoteEvent/RemoteFunction)
-- in ReplicatedStorage (including inside folders like "Remotes").
-- Each button fires/invokes the remote with args: [remoteName, 42, true].
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TweenService = game:GetService("TweenService")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "RemoteFirer"
screenGui.Parent = playerGui
-- Main Frame (window-like, draggable with Active=true)
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 320, 0, 420)
mainFrame.Position = UDim2.new(0, 10, 0, 10)
mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
mainFrame.BorderSizePixel = 0
mainFrame.Active = true -- Enables input handling for dragging
mainFrame.Draggable = true -- Built-in dragging enabled!
mainFrame.Parent = screenGui
-- Rounded corners for mainFrame
local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 12)
mainCorner.Parent = mainFrame
-- Title Bar
local titleBar = Instance.new("Frame")
titleBar.Name = "TitleBar"
titleBar.Size = UDim2.new(1, 0, 0, 40)
titleBar.Position = UDim2.new(0, 0, 0, 0)
titleBar.BackgroundColor3 = Color3.fromRGB(45, 45, 50)
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
-- Rounded top corners for titleBar
local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 12)
titleCorner.Parent = titleBar
-- Title Text
local titleLabel = Instance.new("TextLabel")
titleLabel.Name = "TitleLabel"
titleLabel.Size = UDim2.new(1, -60, 1, 0)
titleLabel.Position = UDim2.new(0, 10, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "Remote Firer"
titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
titleLabel.TextScaled = true
titleLabel.Font = Enum.Font.GothamBold
titleLabel.Active = false -- Ensures input passes to titleBar/mainFrame for dragging
titleLabel.Parent = titleBar
-- Refresh Button in title bar
local refreshButton = Instance.new("TextButton")
refreshButton.Name = "RefreshButton"
refreshButton.Size = UDim2.new(0, 40, 0, 30)
refreshButton.Position = UDim2.new(1, -50, 0, 5)
refreshButton.BackgroundColor3 = Color3.fromRGB(70, 70, 75)
refreshButton.BorderSizePixel = 0
refreshButton.Text = "⟳"
refreshButton.TextColor3 = Color3.fromRGB(255, 255, 255)
refreshButton.TextScaled = true
refreshButton.Font = Enum.Font.GothamBold
refreshButton.Active = true
refreshButton.Parent = titleBar
local refreshCorner = Instance.new("UICorner")
refreshCorner.CornerRadius = UDim.new(0, 6)
refreshCorner.Parent = refreshButton
-- Gradient for titleBar
local titleGradient = Instance.new("UIGradient")
titleGradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(60, 60, 65)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(45, 45, 50))
}
titleGradient.Rotation = 90
titleGradient.Parent = titleBar
-- ScrollingFrame for content
local scrollingFrame = Instance.new("ScrollingFrame")
scrollingFrame.Name = "ScrollingFrame"
scrollingFrame.Size = UDim2.new(1, -10, 1, -50)
scrollingFrame.Position = UDim2.new(0, 5, 0, 45)
scrollingFrame.BackgroundTransparency = 1
scrollingFrame.BorderSizePixel = 0
scrollingFrame.ScrollBarThickness = 6
scrollingFrame.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 105)
scrollingFrame.Active = false -- Prevents interfering with mainFrame dragging
scrollingFrame.Parent = mainFrame
-- UIListLayout for buttons
local listLayout = Instance.new("UIListLayout")
listLayout.SortOrder = Enum.SortOrder.Name
listLayout.Padding = UDim.new(0, 5)
listLayout.Parent = scrollingFrame
-- Table to hold remote buttons for refresh
local remoteButtons = {}
-- Function to populate buttons (recursive search)
local function populateRemotes()
-- Clear existing buttons
for _, button in ipairs(remoteButtons) do
button:Destroy()
end
remoteButtons = {}
-- Find ALL remotes recursively
local remotes = {}
for _, obj in ipairs(ReplicatedStorage:GetDescendants()) do
if obj:IsA("RemoteEvent") or obj:IsA("RemoteFunction") then
table.insert(remotes, obj)
end
end
-- Create buttons for each
for _, remote in ipairs(remotes) do
local button = createButton(remote)
table.insert(remoteButtons, button)
button.MouseButton1Click:Connect(function()
local clickTween = TweenService:Create(button, TweenInfo.new(0.1, Enum.EasingStyle.Quad), {Size = UDim2.new(1, 0, 0, 32)})
clickTween:Play()
clickTween.Completed:Connect(function()
TweenService:Create(button, TweenInfo.new(0.1, Enum.EasingStyle.Quad), {Size = UDim2.new(1, 0, 0, 35)}):Play()
end)
fireRemote(remote)
end)
end
print("Found and listed " .. #remotes .. " remotes recursively in ReplicatedStorage!")
end
-- Function to create a button with polish
function createButton(remote)
local button = Instance.new("TextButton")
button.Name = remote.Name .. "_" .. remote:GetFullName() -- Unique name with path to avoid duplicates
button.Size = UDim2.new(1, 0, 0, 35)
button.BackgroundColor3 = Color3.fromRGB(50, 50, 55)
button.BorderSizePixel = 0
local displayText = remote.Name .. " (" .. remote.ClassName .. ")"
if remote.Parent ~= ReplicatedStorage then
displayText = displayText .. " [" .. remote.Parent.Name .. "]"
end
button.Text = displayText
button.TextColor3 = Color3.fromRGB(255, 255, 255)
button.TextScaled = true
button.Font = Enum.Font.Gotham
button.Active = true -- Ensures buttons handle clicks
button.Parent = scrollingFrame
-- Rounded corners
local buttonCorner = Instance.new("UICorner")
buttonCorner.CornerRadius = UDim.new(0, 8)
buttonCorner.Parent = button
-- Gradient
local buttonGradient = Instance.new("UIGradient")
buttonGradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(60, 60, 65)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(50, 50, 55))
}
buttonGradient.Rotation = 90
buttonGradient.Parent = button
-- Hover effects
local hoverTweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local hoverColor = Color3.fromRGB(70, 70, 75)
local normalColor = Color3.fromRGB(50, 50, 55)
button.MouseEnter:Connect(function()
TweenService:Create(button, hoverTweenInfo, {BackgroundColor3 = hoverColor}):Play()
end)
button.MouseLeave:Connect(function()
TweenService:Create(button, hoverTweenInfo, {BackgroundColor3 = normalColor}):Play()
end)
return button
end
-- Function to fire/invoke a remote
function fireRemote(remote)
local args = {remote.Name, 42, true}
if remote:IsA("RemoteEvent") then
remote:FireServer(unpack(args))
print("Fired RemoteEvent: " .. remote:GetFullName() .. " with args: " .. table.concat(args, ", "))
elseif remote:IsA("RemoteFunction") then
local success, result = pcall(function()
return remote:InvokeServer(unpack(args))
end)
if success then
print("Invoked RemoteFunction: " .. remote:GetFullName() .. " with args: " .. table.concat(args, ", ") .. " | Result: " .. tostring(result))
else
warn("Failed to invoke RemoteFunction: " .. remote:GetFullName() .. " | Error: " .. tostring(result))
end
end
end
-- Refresh button functionality
local refreshHoverTweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
refreshButton.MouseEnter:Connect(function()
TweenService:Create(refreshButton, refreshHoverTweenInfo, {BackgroundColor3 = Color3.fromRGB(90, 90, 95)}):Play()
end)
refreshButton.MouseLeave:Connect(function()
TweenService:Create(refreshButton, refreshHoverTweenInfo, {BackgroundColor3 = Color3.fromRGB(70, 70, 75)}):Play()
end)
refreshButton.MouseButton1Click:Connect(function()
populateRemotes()
end)
-- Initial population
populateRemotes()
-- Update canvas size
local function updateCanvas()
scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y + 10)
end
updateCanvas()
listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(updateCanvas)
print("Recursive remote firer GUI loaded! Drag with Active/Draggable. Use ⟳ to refresh. Found remotes in ReplicatedStorage (all folders).")



Uhh is this a remotespy or...
@davidisnotafurry most likely
no it just searches -- Find ALL remotes recursively local remotes = {} for _, obj in ipairs(ReplicatedStorage:GetDescendants()) do if obj:IsA("RemoteEvent") or obj:IsA("RemoteFunction") then table.insert(remotes, obj) end end