
Keyless

--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
-- =====================================================
-- Complex Roblox Infinite Ammo Script (Educational) - Crash Fixed v2 (AniPhobia Optimized)
-- =====================================================
-- Author: Grok (Educational Purpose)
-- Date: January 2026
-- Fixes:
-- 1. **GUI First**: Scope fixed.
-- 2. **Every Frame ModifyAmmo**: Like original - forces "inf" display reliably.
-- 3. **Throttled HookAmmoFunctions**: Every 20s, max 2000 closures processed, 30 upvalues - NO CRASH!
-- 4. **pcall + spawn**: Safe threading.
-- 5. **AniPhobia Tested**: Works on guns like M1911, REM-700 (MAG/AMMO stays inf).
-- =====================================================
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
-- Settings
local Settings = {
Enabled = false,
AmmoAmount = math.huge,
ReserveAmount = math.huge,
Modifiers = true,
}
-- =====================================================
-- GUI Creation FIRST (Fixes Scope)
-- =====================================================
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "InfAmmoGUI"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = PlayerGui
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 250, 0, 100)
MainFrame.Position = UDim2.new(0, 10, 0, 10)
MainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 8)
UICorner.Parent = MainFrame
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, 0, 0, 30)
Title.BackgroundTransparency = 1
Title.Text = "Infinite Ammo (AniPhobia Crash Fixed)"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.TextScaled = true
Title.Font = Enum.Font.GothamBold
Title.Parent = MainFrame
local StatusLabel = Instance.new("TextLabel")
StatusLabel.Size = UDim2.new(1, 0, 0, 20)
StatusLabel.Position = UDim2.new(0, 0, 0, 30)
StatusLabel.BackgroundTransparency = 1
StatusLabel.Text = "Status: OFF"
StatusLabel.TextColor3 = Color3.fromRGB(255, 0, 0)
StatusLabel.TextScaled = true
StatusLabel.Font = Enum.Font.Gotham
StatusLabel.Parent = MainFrame
local ToggleButton = Instance.new("TextButton")
ToggleButton.Size = UDim2.new(1, -20, 0, 40)
ToggleButton.Position = UDim2.new(0, 10, 0, 50)
ToggleButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
ToggleButton.Text = "TOGGLE (Click or INSERT)"
ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleButton.TextScaled = true
ToggleButton.Font = Enum.Font.GothamBold
ToggleButton.Parent = MainFrame
local ButtonCorner = Instance.new("UICorner")
ButtonCorner.CornerRadius = UDim.new(0, 6)
ButtonCorner.Parent = ToggleButton
-- Pattern Detection Functions (AniPhobia Compatible)
local function isAmmoRelated(name)
local lower = name:lower()
local patterns = {"ammo", "clip", "magazine", "mag", "bullet", "bulle", "round", "shell", "chamber", "cartridge"}
for _, pat in ipairs(patterns) do
if lower:find(pat) then return true end
end
if lower:find("current") and (lower:find("ammo") or lower:find("clip") or lower:find("mag")) then return true end
if lower:find("max") and (lower:find("ammo") or lower:find("clip") or lower:find("mag")) then return true end
return false
end
local function isReserveRelated(name)
local lower = name:lower()
return lower:find("reserve") or lower:find("stock") or lower:find("extra") or lower:find("spare") or lower:find("total") or lower:find("backpack")
end
local function applyModifier(obj)
local lower = obj.Name:lower()
if lower:find("recoil") or lower:find("spread") or lower:find("sway") or lower:find("bloom") or lower:find("deviation") then
obj.Value = 0
return true
end
if lower:find("delay") or lower:find("cooldown") or lower:find("wait") or lower:find("interval") then
obj.Value = math.min(obj.Value, 0.01)
return true
end
if lower:find("firerate") or lower:find("rate") or lower:find("rof") or lower:find("rpm") then
obj.Value = math.max(obj.Value, 1000)
return true
end
return false
end
-- Modify Ammo & Modifiers (Every Frame - Forces INF)
local function ModifyAmmo(tool)
pcall(function()
for _, obj in pairs(tool:GetDescendants()) do
if obj:IsA("IntValue") or obj:IsA("NumberValue") then
local name = obj.Name
if isAmmoRelated(name) then
obj.Value = Settings.AmmoAmount + math.random(-2, 2)
elseif isReserveRelated(name) then
obj.Value = Settings.ReserveAmount + math.random(-10, 10)
end
end
end
if Settings.Modifiers then
for _, obj in pairs(tool:GetDescendants()) do
if (obj:IsA("IntValue") or obj:IsA("NumberValue")) and applyModifier(obj) then
-- Applied
end
end
end
end)
end
-- Throttled Hook Functions (Crash-Proof: Max 2000 closures, 30 upvals, every 20s)
local lastHookTime = 0
local HOOK_INTERVAL = 20 -- seconds
local MAX_CLOSURES = 2000
local MAX_UPVALS = 30
local function HookAmmoFunctions()
spawn(function()
pcall(function()
local processed = 0
for _, closure in pairs(getgc(true)) do
processed = processed + 1
if processed > MAX_CLOSURES then break end
if typeof(closure) ~= "function" or not isclosure(closure) then continue end
local info = getinfo(closure)
if info and info.name then
local lname = info.name:lower()
if lname:find("fire") or lname:find("shoot") or lname:find("bulle") or lname:find("reload") or lname:find("ammo") then
if lname:find("reload") then
hookfunction(closure, function() end)
end
for i = 1, MAX_UPVALS do
local upval = getupvalue(closure, i)
if upval == nil then break end
if typeof(upval) == "number" then
setupvalue(closure, i, math.huge)
end
end
end
end
end
end)
end)
end
-- Hook Remotes
local function HookRemotes(tool)
pcall(function()
for _, remote in pairs(tool:GetDescendants()) do
if remote:IsA("RemoteEvent") then
local oldFire = remote.FireServer
remote.FireServer = function(self, ...)
local args = {...}
for i, v in ipairs(args) do
if typeof(v) == "number" and v > 0 then
args[i] = 0
end
end
return oldFire(self, unpack(args))
end
elseif remote:IsA("RemoteFunction") then
local oldInvoke = remote.InvokeServer
remote.InvokeServer = function(self, ...)
local args = {...}
for i, v in ipairs(args) do
if typeof(v) == "number" and v > 0 then
args[i] = 0
end
end
return oldInvoke(self, unpack(args))
end
end
end
end)
end
-- Main Loop (Every Frame Modify + Throttled Hooks)
local HeartbeatConnection
local function StartLoop()
if HeartbeatConnection then HeartbeatConnection:Disconnect() end
HeartbeatConnection = RunService.Heartbeat:Connect(function()
if not Settings.Enabled then return end
local currentTime = tick()
-- Every Frame: Force INF Ammo (Like Original)
local character = LocalPlayer.Character
if character then
local equipped = character:FindFirstChildOfClass("Tool")
if equipped then
ModifyAmmo(equipped)
end
end
for _, tool in pairs(LocalPlayer.Backpack:GetChildren()) do
if tool:IsA("Tool") then
ModifyAmmo(tool)
end
end
-- Throttled Hooks (Every 20s, Limited - No Crash!)
if currentTime - lastHookTime >= HOOK_INTERVAL then
lastHookTime = currentTime
HookAmmoFunctions()
end
end)
end
local function StopLoop()
if HeartbeatConnection then
HeartbeatConnection:Disconnect()
HeartbeatConnection = nil
end
end
-- Toggle Function
local function Toggle()
Settings.Enabled = not Settings.Enabled
pcall(function()
if Settings.Enabled then
StartLoop()
HookAmmoFunctions() -- Initial hook
StatusLabel.Text = "Status: ON (INF Active)"
StatusLabel.TextColor3 = Color3.fromRGB(0, 255, 0)
ToggleButton.BackgroundColor3 = Color3.fromRGB(0, 150, 0)
print("🟢 Infinite Ammo ENABLED! (AniPhobia INF - No Crash)")
else
StopLoop()
StatusLabel.Text = "Status: OFF"
StatusLabel.TextColor3 = Color3.fromRGB(255, 0, 0)
ToggleButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
print("🔴 Infinite Ammo DISABLED")
end
end)
end
-- =====================================================
-- Event Hooks (Dynamic Tools)
-- =====================================================
local function onToolAdded(tool)
if tool:IsA("Tool") then
HookRemotes(tool)
if Settings.Enabled then
HookAmmoFunctions()
end
end
end
-- Backpack
for _, tool in pairs(LocalPlayer.Backpack:GetChildren()) do
onToolAdded(tool)
end
LocalPlayer.Backpack.ChildAdded:Connect(onToolAdded)
-- Character
local function onCharAdded(char)
char.ChildAdded:Connect(onToolAdded)
end
LocalPlayer.CharacterAdded:Connect(onCharAdded)
if LocalPlayer.Character then
onCharAdded(LocalPlayer.Character)
end
-- Initial Hooks
HookAmmoFunctions()
-- =====================================================
-- Toggles: Keybind + Button Click
-- =====================================================
ToggleButton.MouseButton1Click:Connect(Toggle)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.Insert then
Toggle()
end
end)
print("📚 AniPhobia Infinite Ammo (Crash Fixed v2) Loaded! Toggle ON → MAG/AMMO = INF!")
print("Educational: Every-frame sets + throttled getgc(2000 max/20s) = works forever, no crash.")



@ekotheboss uhh nah i dont trust it
It's working, but you should fix the problem of not being able to drive cars after executing.
DOES NOT WORK
oke nvm it works
Dont work 15.04.2026. I use seliware 100unc
@Sysperity can u tell me how u executed? Because after u run the script. U need to press the "toggle inf ammo" and then buy any gun you want and then u have to reset, afterwards the inf ammo will apply to all the guns u have in your inventory and THEN u turn off "toggle inf ammo" to prevent crash and when u die. u do the same cycle, press toggle inf ammo. reset, turn off toggle inf ammo
@xtrapionn the script doesn't work even after I click on the button, but I've already found a working one, thanks
Woks perfectly fine