INF Ammo FIXED 2026
Key Required

INF Ammo FIXED 2026

AniPhobiaxtrapassionnxtrapassionn 4.1K views 261 executesUpdated Jan 7, 2026
2.2/ 5(9 votes)
4544% Positive
Lua Script•305 lines (11024 chars)
--[[
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.")

Features & Information

INF ammo for all guns (made by grok AI please try it and see how it works) HOW TO USE: When you spawn in the game, buy the guns that you WANT. Once they're in your inventory, you reset and all your guns will set to inf ammo and it'll work. (still looking for bugs and fixes)

Community Comments (8)

xtrapassionnxtrapassionnJan 7, 2026

@ekotheboss uhh nah i dont trust it

x11xx11xJan 20, 2026

It's working, but you should fix the problem of not being able to drive cars after executing.

KILOmanKILOmanJan 27, 2026

DOES NOT WORK

KILOmanKILOmanJan 27, 2026

oke nvm it works

OveolaOveolaApr 15, 2026

Dont work 15.04.2026. I use seliware 100unc

Replying to @Oveola
xtrapassionnxtrapassionnApr 19, 2026

@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

Replying to @xtrapassionn
OveolaOveolaApr 19, 2026

@xtrapionn the script doesn't work even after I click on the button, but I've already found a working one, thanks

Wellwellwell12Wellwellwell12Jun 2, 2026

Woks perfectly fine

More Scripts for AniPhobia