Arsenal Script – Aimbot - Verified script for Arsenal
Key Required

Arsenal Script – Aimbot

ArsenalFroggytheonebestFroggytheonebest 1.2K views 2.8K executesUpdated Oct 24, 2026
Unrated
00
Lua Script•648 lines (13880 chars)
--// Aimbot Arena - Client Aim Assist + ESP
--// Place as a LocalScript in StarterPlayer > StarterPlayerScripts

--// Services
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Camera = workspace.CurrentCamera

local LocalPlayer = Players.LocalPlayer

--// Rayfield
local Rayfield = loadstring(game:HttpGet("https://sirius.menu/rayfield"))()

local Window = Rayfield:CreateWindow({
    Name = "Aimbot Arena",
    Icon = 0,
    LoadingTitle = "Aimbot Arena",
    LoadingSubtitle = "Aim Assist + ESP",
    Theme = "Default",

    ToggleUIKeybind = "K",

    ConfigurationSaving = {
        Enabled = true,
        FolderName = "AimbotArena",
        FileName = "Settings"
    },

    Discord = {
        Enabled = false
    },

    KeySystem = false
})

--// Settings
local Settings = {
    AimEnabled = false,
    AimOnRMB = true,

    TeamCheck = true,
    WallCheck = true,

    ESPEnabled = false,
    ESPNames = true,
    ESPDistance = true,

    FOVEnabled = true,
    FOV = 150,

    Smoothness = 0.15,

    TargetPart = "Head"
}

local HoldingRMB = false

--// ESP storage
local ESPObjects = {}

--// FOV circle
local FOVCircle = Drawing and Drawing.new("Circle")

if FOVCircle then
    FOVCircle.Visible = true
    FOVCircle.Filled = false
    FOVCircle.Thickness = 1
    FOVCircle.NumSides = 64
    FOVCircle.Radius = Settings.FOV
    FOVCircle.Transparency = 1
end

----------------------------------------------------------------
--// Utility
----------------------------------------------------------------

local function GetCharacter(player)
    if not player then
        return nil
    end

    local character = player.Character

    if not character then
        return nil
    end

    local humanoid = character:FindFirstChildOfClass("Humanoid")

    if not humanoid or humanoid.Health <= 0 then
        return nil
    end

    return character
end

local function IsEnemy(player)
    if player == LocalPlayer then
        return false
    end

    if not Settings.TeamCheck then
        return true
    end

    -- Standard Roblox team check
    if LocalPlayer.Team ~= nil and player.Team ~= nil then
        return LocalPlayer.Team ~= player.Team
    end

    return true
end

local function IsVisible(part)
    if not Settings.WallCheck then
        return true
    end

    local character = part.Parent

    local origin = Camera.CFrame.Position
    local direction = part.Position - origin

    local params = RaycastParams.new()
    params.FilterType = Enum.RaycastFilterType.Exclude
    params.FilterDescendantsInstances = {
        LocalPlayer.Character,
        Camera
    }
    params.IgnoreWater = true

    local result = workspace:Raycast(
        origin,
        direction,
        params
    )

    if not result then
        return true
    end

    return result.Instance:IsDescendantOf(character)
end

local function GetTargetPart(character)
    return character:FindFirstChild(Settings.TargetPart)
        or character:FindFirstChild("Head")
        or character:FindFirstChild("HumanoidRootPart")
end

local function GetMousePosition()
    local mousePosition = UserInputService:GetMouseLocation()

    return Vector2.new(
        mousePosition.X,
        mousePosition.Y
    )
end

----------------------------------------------------------------
--// Target selection
----------------------------------------------------------------

local function GetClosestTarget()
    local mousePosition = GetMousePosition()

    local closestPlayer = nil
    local closestPart = nil
    local closestDistance = math.huge

    for _, player in ipairs(Players:GetPlayers()) do

        if IsEnemy(player) then

            local character = GetCharacter(player)

            if character then

                local targetPart = GetTargetPart(character)

                if targetPart then

                    local screenPosition, onScreen =
                        Camera:WorldToViewportPoint(targetPart.Position)

                    if onScreen and screenPosition.Z > 0 then

                        local screenPoint = Vector2.new(
                            screenPosition.X,
                            screenPosition.Y
                        )

                        local distance =
                            (screenPoint - mousePosition).Magnitude

                        if distance <= Settings.FOV then

                            if IsVisible(targetPart) then

                                if distance < closestDistance then
                                    closestDistance = distance
                                    closestPlayer = player
                                    closestPart = targetPart
                                end

                            end
                        end
                    end
                end
            end
        end
    end

    return closestPlayer, closestPart
end

----------------------------------------------------------------
--// Aim
----------------------------------------------------------------

local function AimAt(part)
    if not part then
        return
    end

    local cameraPosition = Camera.CFrame.Position

    local desiredCFrame =
        CFrame.lookAt(cameraPosition, part.Position)

    Camera.CFrame = Camera.CFrame:Lerp(
        desiredCFrame,
        math.clamp(Settings.Smoothness, 0.01, 1)
    )
end

----------------------------------------------------------------
--// ESP
----------------------------------------------------------------

local function RemoveESP(player)
    local esp = ESPObjects[player]

    if not esp then
        return
    end

    if esp.Highlight then
        esp.Highlight:Destroy()
    end

    if esp.Billboard then
        esp.Billboard:Destroy()
    end

    ESPObjects[player] = nil
end

local function CreateESP(player)

    if player == LocalPlayer then
        return
    end

    if ESPObjects[player] then
        return
    end

    local esp = {}

    local character = GetCharacter(player)

    if not character then
        return
    end

    -- Highlight
    local highlight = Instance.new("Highlight")
    highlight.Name = "ArenaESP"
    highlight.Adornee = character
    highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
    highlight.FillTransparency = 0.65
    highlight.OutlineTransparency = 0

    highlight.Parent = character

    esp.Highlight = highlight

    -- Billboard
    local head = character:FindFirstChild("Head")

    if head then

        local billboard = Instance.new("BillboardGui")

        billboard.Name = "ArenaESPInfo"
        billboard.Adornee = head
        billboard.Size = UDim2.fromOffset(200, 50)
        billboard.StudsOffset = Vector3.new(0, 2.5, 0)
        billboard.AlwaysOnTop = true

        local label = Instance.new("TextLabel")

        label.BackgroundTransparency = 1
        label.Size = UDim2.fromScale(1, 1)

        label.Font = Enum.Font.GothamBold
        label.TextSize = 13
        label.TextStrokeTransparency = 0.5

        label.Text = player.Name

        label.Parent = billboard
        billboard.Parent = head

        esp.Billboard = billboard
        esp.Label = label
    end

    ESPObjects[player] = esp
end

local function UpdateESP(player)

    local esp = ESPObjects[player]

    if not esp then
        return
    end

    local character = GetCharacter(player)

    if not character then
        RemoveESP(player)
        return
    end

    if esp.Highlight then
        esp.Highlight.Enabled =
            Settings.ESPEnabled and IsEnemy(player)
    end

    if esp.Label then

        if not Settings.ESPEnabled or not IsEnemy(player) then
            esp.Label.Visible = false
            return
        end

        esp.Label.Visible = true

        local text = player.Name

        if Settings.ESPDistance then

            local root = character:FindFirstChild("HumanoidRootPart")

            local localCharacter = LocalPlayer.Character
            local localRoot =
                localCharacter and
                localCharacter:FindFirstChild("HumanoidRootPart")

            if root and localRoot then

                local distance =
                    math.floor(
                        (root.Position - localRoot.Position).Magnitude
                    )

                text = text .. " [" .. distance .. "m]"
            end
        end

        if Settings.ESPNames then
            esp.Label.Text = text
        else
            esp.Label.Text = ""
        end
    end
end

local function RefreshESP()

    for _, player in ipairs(Players:GetPlayers()) do

        if player ~= LocalPlayer then

            if Settings.ESPEnabled then
                CreateESP(player)
            else
                RemoveESP(player)
            end

        end
    end
end

----------------------------------------------------------------
--// Player connections
----------------------------------------------------------------

Players.PlayerRemoving:Connect(function(player)
    RemoveESP(player)
end)

Players.PlayerAdded:Connect(function(player)

    player.CharacterAdded:Connect(function()
        task.wait(0.5)

        if Settings.ESPEnabled then
            CreateESP(player)
        end
    end)

end)

for _, player in ipairs(Players:GetPlayers()) do

    if player ~= LocalPlayer then

        player.CharacterAdded:Connect(function()
            task.wait(0.5)

            if Settings.ESPEnabled then
                CreateESP(player)
            end
        end)

    end
end

----------------------------------------------------------------
--// RMB
----------------------------------------------------------------

UserInputService.InputBegan:Connect(function(input, processed)

    if processed then
        return
    end

    if input.UserInputType == Enum.UserInputType.MouseButton2 then
        HoldingRMB = true
    end

end)

UserInputService.InputEnded:Connect(function(input)

    if input.UserInputType == Enum.UserInputType.MouseButton2 then
        HoldingRMB = false
    end

end)

----------------------------------------------------------------
--// Rayfield UI
----------------------------------------------------------------

local AimTab = Window:CreateTab(
    "Aim Assist",
    4483362458
)

AimTab:CreateSection("Aimbot")

AimTab:CreateToggle({
    Name = "Enable Aim Assist",
    CurrentValue = false,

    Callback = function(value)
        Settings.AimEnabled = value
    end
})

AimTab:CreateToggle({
    Name = "RMB Activation",
    CurrentValue = true,

    Callback = function(value)
        Settings.AimOnRMB = value
    end
})

AimTab:CreateToggle({
    Name = "Team Check",
    CurrentValue = true,

    Callback = function(value)
        Settings.TeamCheck = value
    end
})

AimTab:CreateToggle({
    Name = "Wall Check",
    CurrentValue = true,

    Callback = function(value)
        Settings.WallCheck = value
    end
})

AimTab:CreateSlider({
    Name = "FOV",
    Range = {25, 500},
    Increment = 5,
    Suffix = " px",
    CurrentValue = 150,

    Callback = function(value)
        Settings.FOV = value

        if FOVCircle then
            FOVCircle.Radius = value
        end
    end
})

AimTab:CreateSlider({
    Name = "Aim Smoothness",
    Range = {1, 100},
    Increment = 1,
    Suffix = "%",

    CurrentValue = 15,

    Callback = function(value)
        Settings.Smoothness = value / 100
    end
})

AimTab:CreateToggle({
    Name = "Show FOV",
    CurrentValue = true,

    Callback = function(value)
        Settings.FOVEnabled = value
    end
})

----------------------------------------------------------------
--// ESP Tab
----------------------------------------------------------------

local ESPTab = Window:CreateTab(
    "ESP",
    4483362458
)

ESPTab:CreateSection("Player ESP")

ESPTab:CreateToggle({
    Name = "Enable ESP",
    CurrentValue = false,

    Callback = function(value)

        Settings.ESPEnabled = value

        RefreshESP()
    end
})

ESPTab:CreateToggle({
    Name = "Names",
    CurrentValue = true,

    Callback = function(value)
        Settings.ESPNames = value
    end
})

ESPTab:CreateToggle({
    Name = "Distance",
    CurrentValue = true,

    Callback = function(value)
        Settings.ESPDistance = value
    end
})

----------------------------------------------------------------
--// Main loop
----------------------------------------------------------------

RunService.RenderStepped:Connect(function()

    ----------------------------------------------------------------
    -- FOV
    ----------------------------------------------------------------

    if FOVCircle then

        local mousePosition = GetMousePosition()

        FOVCircle.Position = mousePosition
        FOVCircle.Radius = Settings.FOV
        FOVCircle.Visible = Settings.FOVEnabled
    end

    ----------------------------------------------------------------
    -- Aim
    ----------------------------------------------------------------

    local shouldAim =
        Settings.AimEnabled
        and (
            not Settings.AimOnRMB
            or HoldingRMB
        )

    if shouldAim then

        local player, targetPart = GetClosestTarget()

        if player and targetPart then
            AimAt(targetPart)
        end
    end

    ----------------------------------------------------------------
    -- ESP
    ----------------------------------------------------------------

    if Settings.ESPEnabled then

        for _, player in ipairs(Players:GetPlayers()) do

            if player ~= LocalPlayer then
                CreateESP(player)
                UpdateESP(player)
            end

        end

    end

end)

Rayfield:LoadConfiguration()

Rayfield:Notify({
    Title = "Aimbot Arena",
    Content = "Aim assist loaded successfully.",
    Duration = 4
})

How to Execute Arsenal Script – Aimbot

Step 1: Copy Code: Click the Copy Code button in the viewer above to grab the clean Lua loadstring.

Step 2: Launch Executor: Open a compatible, unpatched executor. If you need one, check our Roblox Executors Directory.

Step 3: Join Experience: Launch Roblox and join Arsenal.

Step 4: Attach & Run: Attach/inject your executor into the Roblox process, paste the code into the script tab, and press Execute.

Created By

Froggytheonebest
Froggytheonebest
Script Creator
View Author Profile

Roblox Experience

Arsenal
Arsenal
By ROLVe
Active Players:1.8K
Play on Roblox

Features & Information

Execute Arsenal Script – Aimbot. Key system required, created by Froggytheonebest, updated Oct 24, 2026. Tested and working on supported executors.

Script Changelog (2)

@QueueSherlockOct 25, 2026

Edited during review before approval

@FroggytheonebestOct 24, 2026

Create script

Community Comments (0)

No comments yet for this script.

Frequently Asked Questions

How do I execute Arsenal Script – Aimbot in Roblox?

To run Arsenal Script – Aimbot, copy the Lua loadstring from the code viewer above, launch Roblox and join Arsenal, attach a working executor (such as Potassium, Solara, or Delta from our Executors directory), paste the code into your executor console, and click Execute.

Is Arsenal Script – Aimbot keyless or does it require an access key?

Arsenal Script – Aimbot requires an access key. You can retrieve the official key directly using the Get Script Key link provided above.

Is Arsenal Script – Aimbot currently safe and working?

This script is active and operational. Always test scripts using a secondary (alt) Roblox account to safeguard your main profile against anti-cheat bans.