Arsenal is one of Roblox’s most fast-paced and competitive FPS games. Whether you’re looking to improve your aim, gain situational awareness, or remove limitations like recoil and ammo, using scripts can elevate your gameplay dramatically. Below are four versatile scripts for Arsenal that give you tactical advantages ranging from silent aim to full GUI-based customization.
01. Silent Aim Script
YellowGreg’s script is a lightweight, high-performance silent aim tool tailored specifically for Arsenal. It silently locks your shots onto enemy heads without disturbing your camera view, making every round more accurate—especially useful for users with compatible executors like Swift or AWP.
Feature | Description |
---|---|
Silent Aim | Hits opponents without manual aim |
FOV Settings | Visualizes target zone with customizable radius and color |
Team Check | Prevents targeting teammates |
Prediction Options | (Disabled by default) Predicts enemy movement for faster hits |
Head Targeting | Locked to head for higher damage shots |
local silentAim = loadstring(game:HttpGet("https://raw.githubusercontent.com/YellowGregs/Loadstring/refs/heads/main/Arsenal_Silent-Aim.luau"))()
silentAim.Enabled = true
silentAim.TeamCheck = true
silentAim.WallCheck = false
silentAim.UseRandomPart = false
silentAim.BodyParts = { "Head" }
silentAim.Prediction.Enabled = false
silentAim.Prediction.Amount = 0.145
silentAim.Fov = 800
silentAim.FovSettings.Visible = true
silentAim.FovSettings.Color = Color3.new(255, 255, 255)
silentAim.FovSettings.Thickness = 2
silentAim.FovSettings.Filled = false
02. Tbao Hub Script
Tbao Hub brings a compact set of powerful Arsenal enhancements with zero configuration needed. With features like Hitbox Expander, ESP, and Auto Kill, this script is ideal for users who want instant results with minimal setup.
Function | Benefit |
Hitbox Expander | Enlarges enemy hitboxes for easier kills |
Player ESP | Reveals enemy locations |
Auto Kill | Automatically eliminates enemies when conditions are met |
Plug-and-Play | No additional setup or toggling required |
loadstring(game:HttpGet("https://raw.githubusercontent.com/Hamza3270308/Arsenal/refs/heads/main/tbao.lua"))()
03. Ray Hub X Quota Script
This robust script delivers a mix of visual and gameplay advantages. It’s designed to run smoothly on both PC and mobile, offering features like infinite jump, no recoil, and enhanced speed for versatile and stealthy gameplay.
Toolset | Features |
Silent Aim & ESP | Includes team checks to avoid friendly fire |
Infinite Ammo | Shoot without worrying about reloading |
No Recoil & No Spread | Stabilizes shots for precise accuracy |
Speed Hack & Infinite Jump | Adds enhanced movement capabilities |
FOV Control | Customizes engagement range visually and functionally |
loadstring(game:HttpGet("https://raw.githubusercontent.com/Hamza3270308/Arsenal/refs/heads/main/RayHub.lua"))()
04. Open Source Script with GUI
This script by XXD14 provides a GUI-based interface using MacLib, allowing for detailed control over ESP visuals, aimbot behavior, and FOV customization. It’s ideal for users who want a more tailored setup to fine-tune their gameplay experience.
Category | Details |
Aimbot | Head-targeting with toggle options and sensitivity control |
ESP | Includes boxes, tracers, health, and team checks |
FOV Circle | Draws customizable targeting zone on screen |
UI Features | Supports blur, user info display, and keyboard toggles |
--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
--Create By N74
-- Cr. SILENT AIM https://discord.gg/SXFr9QY5
local MacLib = loadstring(game:HttpGet("https://github.com/biggaboy212/Maclib/releases/latest/download/maclib.txt"))()
local Window = MacLib:Window({
Title = "Maclib Demo",
Subtitle = "This is a subtitle.",
Size = UDim2.fromOffset(868, 650),
DragStyle = 1,
DisabledWindowControls = {},
ShowUserInfo = true,
Keybind = Enum.KeyCode.RightControl,
AcrylicBlur = true,
})
-- 🔧 Global Settings
_G.Skeleton = false
_G.Box = false
_G.Distance = false
_G.ShowName = false
_G.ShowHealthText = false
_G.ShowTracer = false
_G.Color = Color3.fromRGB(255, 128, 0)
_G.TeamCheck = false
_G.RefreshRate = 0.03
-- 🚀 Services
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
local ESP = {}
local Player = game:GetService("Players")
-- local LocalPlayer = Player.LocalPlayer
local Camera = workspace.CurrentCamera
local RunService = game:GetService("RunService")
local UserInput = game:GetService("UserInputService")
local Tween = game:GetService("TweenService")
local Holding = false
-- > Aim Bot Settings <
_G.AimbotEnabled = false
_G.TeamCheck = false
_G.AimPart = "Head"
_G.Sensitivity = 0.1
-- > FOV CIRCLE SETTING <
_G.CircleSides = 64
_G.CircleColor = Color3.fromRGB(255,255,255)
_G.CircleTransparency = 0.7
_G.CircleRadius = 80
_G.CircleFilled = false
_G.CircleVisible = false
_G.CircleThickness = 0
local FOVCircle = Drawing.new("Circle")
FOVCircle.Position = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
FOVCircle.Radius = _G.CircleRadius
FOVCircle.Filled = _G.CircleFilled
FOVCircle.Color = _G.CircleColor
FOVCircle.Visible = _G.CircleVisible
FOVCircle.Transparency = _G.CircleTransparency
FOVCircle.NumSides = _G.CircleSides
FOVCircle.Thickness = _G.CircleThickness
-- // SERVICES
local players = game:GetService("Players")
local localPlayer = players.LocalPlayer
local camera = workspace.CurrentCamera
local inputService = game:GetService("UserInputService")
local globalSettings = {
UIBlurToggle = Window:GlobalSetting({
Name = "UI Blur",
Default = Window:GetAcrylicBlurState(),
Callback = function(bool)
Window:SetAcrylicBlurState(bool)
Window:Notify({
Title = Window.Settings.Title,
Description = (bool and "Enabled" or "Disabled") .. " UI Blur",
Lifetime = 5
})
end,
}),
NotificationToggler = Window:GlobalSetting({
Name = "Notifications",
Default = Window:GetNotificationsState(),
Callback = function(bool)
Window:SetNotificationsState(bool)
Window:Notify({
Title = Window.Settings.Title,
Description = (bool and "Enabled" or "Disabled") .. " Notifications",
Lifetime = 5
})
end,
}),
ShowUserInfo = Window:GlobalSetting({
Name = "Show User Info",
Default = Window:GetUserInfoState(),
Callback = function(bool)
Window:SetUserInfoState(bool)
Window:Notify({
Title = Window.Settings.Title,
Description = (bool and "Showing" or "Redacted") .. " User Info",
Lifetime = 5
})
end,
})
}
local tabGroups = {
TabGroup1 = Window:TabGroup()
}
local tabs = {
Main = tabGroups.TabGroup1:Tab({ Name = "Demo", Image = "rbxassetid://18821914323" }),
Settings = tabGroups.TabGroup1:Tab({ Name = "Settings", Image = "rbxassetid://10734950309" })
}
local sections = {
MainSection1 = tabs.Main:Section({ Side = "Left" }),
MainSection2 = tabs.Main:Section({ Side = "Right" }),
}
-- Aimbot
sections.MainSection1:Header({
Name = "Aimbot"
})
sections.MainSection1:Toggle({
Name = "Aimbot",
Default = false,
Callback = function(value)
_G.AimbotEnabled = value
end,
}, "AimbotToggle")
sections.MainSection1:Toggle({
Name = "Aimbot FOV",
Default = false,
Callback = function(value)
_G.CircleVisible = value
end,
}, "AimbotFOVToggle")
sections.MainSection1:Colorpicker({
Name = "Colorpicker",
Default = Color3.fromRGB(0, 255, 255),
Callback = function(color)
_G.CircleColor = color
end,
}, "Colorpickerds")
local alphaColorPicker = sections.MainSection1:Colorpicker({
Name = "Transparency Colorpicker",
Default = Color3.fromRGB(255,0,0),
Alpha = 0,
Callback = function(color, alpha)
-- print("Color: ", color, " Alpha: ", alpha)
end,
}, "TransparencyColorpicker")
local fovrainbowActive
local fovrainbowConnection
local hue = 0
sections.MainSection1:Toggle({
Name = "Rainbow",
Default = false,
Callback = function(value)
fovrainbowActive = value
if fovrainbowActive then
fovrainbowConnection = game:GetService("RunService").RenderStepped:Connect(function(deltaTime)
hue = (hue + deltaTime * 0.1) % 1
local rainbowColor = Color3.fromHSV(hue, 1, 1)
alphaColorPicker:SetColor(rainbowColor)
_G.CircleColor = rainbowColor
end)
elseif fovrainbowConnection then
fovrainbowConnection:Disconnect()
fovrainbowConnection = nil
end
end,
}, "RainbowToggle")
--ESP
sections.MainSection2:Header({
Name = "ESP"
})
sections.MainSection2:Toggle({
Name = "EspSkeleton",
Default = false,
Callback = function(value)
_G.Skeleton = value
end,
}, "EspSkeletonToggle")
sections.MainSection2:Toggle({
Name = "EspBox",
Default = false,
Callback = function(value)
_G.Box = value
end,
}, "EspBoxToggle")
sections.MainSection2:Toggle({
Name = "Esp Distance",
Default = false,
Callback = function(value)
_G.Distance = value
end,
}, "DistanceToggle")
sections.MainSection2:Toggle({
Name = "Esp ShowName",
Default = false,
Callback = function(value)
_G.ShowName = value
end,
}, "ShowNameToggle")
sections.MainSection2:Toggle({
Name = "Esp ShowHealthText",
Default = false,
Callback = function(value)
_G.ShowHealthText = value
end,
}, "ShowHealthTextToggle")
sections.MainSection2:Toggle({
Name = "Esp ShowTracer",
Default = false,
Callback = function(value)
_G.ShowTracer = value
end,
}, "ShowTracerToggle")
sections.MainSection2:Toggle({
Name = "TeamCheck",
Default = false,
Callback = function(value)
_G.TeamCheck = value
end,
}, "TeamCheckToggle")
sections.MainSection2:Colorpicker({
Name = "Colorpicker",
Default = Color3.fromRGB(0, 255, 255),
Callback = function(color)
_G.Color = color
end,
}, "Colorpicker")
local alphaColorPicker = sections.MainSection2:Colorpicker({
Name = "Transparency Colorpicker",
Default = Color3.fromRGB(255,0,0),
Alpha = 0,
Callback = function(color, alpha)
-- print("Color: ", color, " Alpha: ", alpha)
end,
}, "TransparencyColorpicker")
local rainbowActive
local rainbowConnection
local hue = 0
sections.MainSection2:Toggle({
Name = "Rainbow",
Default = false,
Callback = function(value)
rainbowActive = value
if rainbowActive then
rainbowConnection = game:GetService("RunService").RenderStepped:Connect(function(deltaTime)
hue = (hue + deltaTime * 0.1) % 1
local rainbowColor = Color3.fromHSV(hue, 1, 1)
alphaColorPicker:SetColor(rainbowColor)
_G.Color = rainbowColor
end)
elseif rainbowConnection then
rainbowConnection:Disconnect()
rainbowConnection = nil
end
end,
}, "RainbowToggle")
MacLib:SetFolder("Maclib")
tabs.Settings:InsertConfigSection("Left")
Window.onUnloaded(function()
print("Unloaded!")
end)
tabs.Main:Select()
MacLib:LoadAutoLoadConfig()
task.spawn(function()
-- 🧱 Drawing Helpers
local function newLine()
local line = Drawing.new("Line")
line.Thickness = 1
line.Transparency = 1
line.Visible = false
line.Color = _G.Color
return line
end
local function newText()
local txt = Drawing.new("Text")
txt.Size = 16
txt.Center = true
txt.Outline = true
txt.OutlineColor = Color3.new(0, 0, 0)
txt.Font = 2
txt.Color = _G.Color
txt.Visible = false
return txt
end
local function newBox()
local box = {}
for i = 1, 4 do
box[i] = newLine()
end
return box
end
local function toScreen(pos)
local screenPos, onScreen = Camera:WorldToViewportPoint(pos)
return Vector2.new(screenPos.X, screenPos.Y), onScreen, screenPos.Z
end
local function getBones(character)
local isR15 = character:FindFirstChild("UpperTorso") ~= nil
if isR15 then
return {
{"Head", "UpperTorso"},
{"UpperTorso", "LowerTorso"},
{"UpperTorso", "LeftUpperArm"},
{"UpperTorso", "RightUpperArm"},
{"LeftUpperArm", "LeftLowerArm"},
{"RightUpperArm", "RightLowerArm"},
{"LeftLowerArm", "LeftHand"},
{"RightLowerArm", "RightHand"},
{"LowerTorso", "LeftUpperLeg"},
{"LowerTorso", "RightUpperLeg"},
{"LeftUpperLeg", "LeftLowerLeg"},
{"RightUpperLeg", "RightLowerLeg"},
{"LeftLowerLeg", "LeftFoot"},
{"RightLowerLeg", "RightFoot"},
}
else
return {
{"Head", "Torso"},
{"Torso", "Left Arm"},
{"Torso", "Right Arm"},
{"Torso", "Left Leg"},
{"Torso", "Right Leg"},
}
end
end
-- 🔄 Main ESP Update Loop
local function updateESP()
for _, player in pairs(Players:GetPlayers()) do
if player == LocalPlayer then continue end
if _G.TeamCheck and player.Team == LocalPlayer.Team then continue end
local char = player.Character
if not char then continue end
local rootPart = char:FindFirstChild("HumanoidRootPart")
if not rootPart then continue end
local pos, onScreen, distance = toScreen(rootPart.Position)
-- ✨ Create ESP objects if not exists
if not ESP[player] then
ESP[player] = {
Skeleton = {},
Box = newBox(),
Distance = newText(),
Name = newText(),
HealthText = newText(),
HealthBar = { Background = newLine(), Bar = newLine() },
Tracer = newLine()
}
end
-- 🦴 Skeleton
if _G.Skeleton then
local bones = getBones(char)
if #ESP[player].Skeleton ~= #bones then
for _, line in pairs(ESP[player].Skeleton) do if line then line:Remove() end end
ESP[player].Skeleton = {}
for _ = 1, #bones do table.insert(ESP[player].Skeleton, newLine()) end
end
for i, bone in ipairs(bones) do
local a = char:FindFirstChild(bone[1])
local b = char:FindFirstChild(bone[2])
local line = ESP[player].Skeleton[i]
if a and b then
local aPos, aOnScreen = toScreen(a.Position)
local bPos, bOnScreen = toScreen(b.Position)
if aOnScreen and bOnScreen then
line.From = aPos
line.To = bPos
line.Visible = true
line.Color = _G.Color -- ✅ อัปเดตสีตาม _G.Color
else
line.Visible = false
end
else
line.Visible = false
end
end
else
for _, line in pairs(ESP[player].Skeleton) do if line then line.Visible = false end end
end
-- 🔳 Box + HealthBar
local head = char:FindFirstChild("Head")
local humanoid = char:FindFirstChildOfClass("Humanoid")
if _G.Box and head and humanoid then
local headPos, hOnScreen = toScreen(head.Position + Vector3.new(0, 0.5, 0))
local footPos, fOnScreen = toScreen(rootPart.Position - Vector3.new(0, 3, 0))
local box = ESP[player].Box
if hOnScreen and fOnScreen then
local height = math.abs(headPos.Y - footPos.Y)
local width = height / 2
local topLeft = Vector2.new(headPos.X - width / 2, headPos.Y)
local topRight = Vector2.new(headPos.X + width / 2, headPos.Y)
local bottomLeft = Vector2.new(headPos.X - width / 2, headPos.Y + height)
local bottomRight = Vector2.new(headPos.X + width / 2, headPos.Y + height)
box[1].From, box[1].To = topLeft, topRight
box[2].From, box[2].To = topRight, bottomRight
box[3].From, box[3].To = bottomRight, bottomLeft
box[4].From, box[4].To = bottomLeft, topLeft
for _, line in pairs(box) do line.Visible, line.Color = true, _G.Color end
-- HealthBar
local hpPercent = humanoid.Health / humanoid.MaxHealth
local barHeight = height
local barWidth = 2
local x = headPos.X - width / 2 - 6
local y = headPos.Y
local bg = ESP[player].HealthBar.Background
local fg = ESP[player].HealthBar.Bar
bg.From = Vector2.new(x, y)
bg.To = Vector2.new(x, y + barHeight)
bg.Color = Color3.new(0, 0, 0)
bg.Thickness = barWidth
bg.Visible = true
fg.From = Vector2.new(x, y + (1 - hpPercent) * barHeight)
fg.To = Vector2.new(x, y + barHeight)
fg.Color = Color3.fromRGB(0, 255, 0)
fg.Thickness = barWidth
fg.Visible = true
else
for _, line in pairs(box) do line.Visible = false end
ESP[player].HealthBar.Background.Visible = false
ESP[player].HealthBar.Bar.Visible = false
end
else
for _, line in pairs(ESP[player].Box) do line.Visible = false end
ESP[player].HealthBar.Background.Visible = false
ESP[player].HealthBar.Bar.Visible = false
end
-- 📏 Distance
if _G.Distance and onScreen then
ESP[player].Distance.Position = Vector2.new(pos.X, pos.Y + 30)
ESP[player].Distance.Text = string.format("[%.1fm]", distance)
ESP[player].Distance.Visible = true
ESP[player].Distance.Color = _G.Color -- ✅ เพิ่มตรงนี้
else
ESP[player].Distance.Visible = false
end
-- 🧑 Name
if _G.ShowName and onScreen then
ESP[player].Name.Text = player.Name
ESP[player].Name.Position = Vector2.new(pos.X, pos.Y - 15)
ESP[player].Name.Visible = true
ESP[player].Name.Color = _G.Color -- ✅ เพิ่มตรงนี้
else
ESP[player].Name.Visible = false
end
-- ❤️ Health %
if _G.ShowHealthText and onScreen and humanoid then
ESP[player].HealthText.Text = string.format("%.0f%%", humanoid.Health / humanoid.MaxHealth * 100)
ESP[player].HealthText.Position = Vector2.new(pos.X, pos.Y + 45)
ESP[player].HealthText.Visible = true
else
ESP[player].HealthText.Visible = false
end
-- 📍 Tracer
if _G.ShowTracer and onScreen then
local tracer = ESP[player].Tracer
tracer.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
tracer.To = pos
tracer.Color = _G.Color
tracer.Visible = true
else
ESP[player].Tracer.Visible = false
end
end
end
-- 🔁 Main Loop
task.spawn(function()
while task.wait(_G.RefreshRate) do
pcall(updateESP)
end
end)
-- 🧼 Clear ESP on player leave
Players.PlayerRemoving:Connect(function(player)
if ESP[player] then
for _, line in pairs(ESP[player].Skeleton or {}) do
if line then line:Remove() end
end
for _, line in pairs(ESP[player].Box or {}) do
if line then line:Remove() end
end
if ESP[player].Distance then ESP[player].Distance:Remove() end
if ESP[player].Name then ESP[player].Name:Remove() end
if ESP[player].HealthText then ESP[player].HealthText:Remove() end
if ESP[player].HealthBar then
if ESP[player].HealthBar.Background then ESP[player].HealthBar.Background:Remove() end
if ESP[player].HealthBar.Bar then ESP[player].HealthBar.Bar:Remove() end
end
if ESP[player].Tracer then ESP[player].Tracer:Remove() end
ESP[player] = nil
end
end)
end)
local function GetClosestPlayer()
local MaximumDistance = _G.CircleRadius
local Target = nil
for _, v in next, Player:GetPlayers() do
if v ~= LocalPlayer and v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
if not _G.TeamCheck or v.Team ~= LocalPlayer.Team then
local ScreenPoint = Camera:WorldToScreenPoint(v.Character:WaitForChild("HumanoidRootPart", math.huge).Position)
local mousePos = UserInput:GetMouseLocation()
local VectorDistance = (Vector2.new(mousePos.X, mousePos.Y) - Vector2.new(ScreenPoint.X, ScreenPoint.Y)).Magnitude
if VectorDistance < MaximumDistance then
MaximumDistance = VectorDistance
Target = v
end
end
end
end
return Target
end
-- Corrected InputBegan/InputEnded
UserInput.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
Holding = true
end
end)
UserInput.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
Holding = false
end
end)
-- เพิ่มตัวแปรเพื่อเก็บ Tween ที่กำลังทำงาน
local currentTween = nil
-- Main Aimbot Logic
RunService.RenderStepped:Connect(function()
local mousePos = UserInput:GetMouseLocation()
FOVCircle.Position = Vector2.new(mousePos.X, mousePos.Y)
-- อัปเดตค่าของวงกลมตามค่า _G (ถ้าเปลี่ยนจากที่อื่น)
FOVCircle.Radius = _G.CircleRadius
FOVCircle.Filled = _G.CircleFilled
FOVCircle.Color = _G.CircleColor
FOVCircle.Visible = _G.CircleVisible
FOVCircle.Transparency = _G.CircleTransparency
FOVCircle.NumSides = _G.CircleSides
FOVCircle.Thickness = _G.CircleThickness
if Holding and _G.AimbotEnabled then
local target = GetClosestPlayer()
if target and target.Character and target.Character:FindFirstChild(_G.AimPart) then
local aimPosition = target.Character[_G.AimPart].Position
local newCFrame = CFrame.new(Camera.CFrame.Position, aimPosition)
-- ยกเลิก Tween เก่า (ถ้ายังเล่นอยู่)
if currentTween then
currentTween:Cancel()
end
-- สร้าง Tween ใหม่เพื่อหมุนกล้องแบบสมูท
currentTween = Tween:Create(Camera, TweenInfo.new(
_G.Sensitivity, -- ระยะเวลา
Enum.EasingStyle.Sine,
Enum.EasingDirection.Out
), {CFrame = newCFrame})
currentTween:Play()
end
end
end)
How to Use These Scripts
To use these Arsenal scripts, you’ll need a Roblox executor like Synapse X, Fluxus, or Swift (some scripts may not work on Solara or Xeno). Open Arsenal, run your executor, and paste the script. Execute it once you’re loaded into a match or lobby. Be sure to adjust settings where available and test functionality in a private server to stay safe from detection or bugs.
Benefits of Using Scripts in Roblox
Scripts in Arsenal can sharpen your skills or automate difficult tasks. Whether you’re aiming with surgical precision, spotting enemies through walls, or avoiding reload delays, these tools turn you into a more efficient and unpredictable player. They save time, reduce stress, and make the game more fun—especially in competitive lobbies.
Conclusion
Arsenal scripts like these bring clarity, speed, and power to your matches. From silent aim to advanced GUI interfaces, each one is designed to give you the edge you need to rack up wins and enjoy a smoother FPS experience.