M
Description
Fun features for an reseal and fun things and not freekskdosoaosdoxnnaidisjnznzsidodkxmm
GAMEArsenal
UPDATEDOct 28, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local VirtualUser = game:GetService("VirtualUser")
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextChatService = game:GetService("TextChatService")
local CoreGui = game:GetService("CoreGui")
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
local env = (getgenv and getgenv()) or _G
if env.ArsenalHubLoaded then
pcall(function()
env.ArsenalHubUnload()
end)
end
local libraryRepo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local loaded, Library = pcall(function()
return loadstring(game:HttpGet(libraryRepo .. "Library.lua"))()
end)
if not loaded or not Library then
warn("[Hub] Failed to load the Obsidian UI library: " .. tostring(Library))
return
end
local Hub = {
Alive = true,
Connections = {},
Cleanups = {},
State = {},
}
function Hub:Connect(signal, callback)
local connection = signal:Connect(callback)
table.insert(self.Connections, connection)
return connection
end
function Hub:AddCleanup(fn)
table.insert(self.Cleanups, fn)
end
function Hub:Notify(title, text, duration)
pcall(function()
Library:Notify({
Title = title,
Description = text,
Time = duration or 3,
})
end)
end
function Hub:Unload()
pcall(function()
Library:Unload()
end)
end
Library:OnUnload(function()
Hub.Alive = false
for _, fn in ipairs(Hub.Cleanups) do
pcall(fn)
end
for _, connection in ipairs(Hub.Connections) do
pcall(function()
connection:Disconnect()
end)
end
table.clear(Hub.Cleanups)
table.clear(Hub.Connections)
env.ArsenalHubLoaded = false
end)
env.ArsenalHubLoaded = true
env.ArsenalHubUnload = function()
Hub:Unload()
end
local function getChar()
return LocalPlayer.Character
end
local function getHumanoid()
local char = getChar()
return char and char:FindFirstChildOfClass("Humanoid")
end
local function getRoot()
local char = getChar()
return char and (char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso"))
end
local function isTeammate(plr)
local myTeam = LocalPlayer.Team
return myTeam ~= nil and plr.Team == myTeam
end
local function newDrawing(class)
local ok, object = pcall(function()
return Drawing.new(class)
end)
if ok then
return object
end
return nil
end
local function removeDrawing(object)
if object then
pcall(function()
object:Remove()
end)
end
end
local DrawingSupported = false
do
local probe = newDrawing("Line")
if probe then
DrawingSupported = true
removeDrawing(probe)
end
end
Hub:Connect(Workspace:GetPropertyChangedSignal("CurrentCamera"), function()
Camera = Workspace.CurrentCamera
end)
local function getOtherPlayers()
local list = {}
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer then
table.insert(list, plr)
end
end
table.sort(list, function(a, b)
return string.lower(a.Name) < string.lower(b.Name)
end)
return list
end
local Selectors = {}
local function createPlayerSelector(groupbox, id, text)
local selector = { Index = 1, Label = nil, Slider = nil }
function selector:Get()
local list = getOtherPlayers()
if #list == 0 then
return nil
end
return list[math.clamp(self.Index, 1, #list)]
end
function selector:Refresh()
local list = getOtherPlayers()
local player = self:Get()
pcall(function()
self.Slider:SetMax(math.max(#list, 2))
end)
local name = "no other players"
if player then
name = player.DisplayName .. " (@" .. player.Name .. ")"
end
pcall(function()
self.Label:SetText("Selected: " .. name)
end)
end
selector.Label = groupbox:AddLabel("Selected: no other players")
selector.Slider = groupbox:AddSlider(id, {
Text = text,
Default = 1,
Min = 1,
Max = 2,
Rounding = 0,
Callback = function(value)
selector.Index = value
selector:Refresh()
end,
})
table.insert(Selectors, selector)
selector:Refresh()
return selector
end
local function refreshSelectors()
for _, selector in ipairs(Selectors) do
selector:Refresh()
end
end
Hub:Connect(Players.PlayerAdded, function()
task.defer(refreshSelectors)
end)
Hub:Connect(Players.PlayerRemoving, function()
task.defer(refreshSelectors)
end)
local Window = Library:CreateWindow({
Title = "Arsenal Hub",
Footer = "Obsidian UI",
NotifySide = "Right",
ShowCustomCursor = false,
})
local Tabs = {
Combat = Window:AddTab("Combat", "crosshair"),
Weapon = Window:AddTab("Gun Mods", "swords"),
Movement = Window:AddTab("Movement", "zap"),
Teleport = Window:AddTab("Teleport", "map-pin"),
Visuals = Window:AddTab("Visuals", "eye"),
Settings = Window:AddTab("Settings", "settings"),
}
if game.PlaceId ~= 286090429 then
Hub:Notify("Arsenal Hub", "This hub is built for Arsenal. Some features may not work in other games.", 5)
end
Hub.State.Aimbot = false
Hub.State.AimMode = "Hold Right Click"
Hub.State.AimPart = "Head"
Hub.State.AimTeamCheck = true
Hub.State.AimWallCheck = false
Hub.State.AimSmoothness = 30
Hub.State.ShowFOV = false
Hub.State.FOVRadius = 150
Hub.State.FOVColor = Color3.fromRGB(255, 255, 255)
Hub.State.Silent = false
Hub.State.SilentMethod = 1
Hub.State.SilentPart = "Head"
Hub.State.SilentFOV = 200
Hub.State.SilentHitChance = 100
Hub.State.SilentTeamCheck = true
Hub.State.SilentWallCheck = false
Hub.State.ShowSilentFOV = false
Hub.State.SilentColor = Color3.fromRGB(255, 80, 80)
Hub.State.Hitbox = false
Hub.State.HitboxSize = 15
Hub.State.HitboxTransparency = 0.6
Hub.State.HitboxPart = "HeadHB"
Hub.State.HitboxTeamCheck = true
Hub.State.InfAmmo = false
Hub.State.NoRecoil = false
Hub.State.Speed = false
Hub.State.SpeedValue = 50
Hub.State.SpeedMethod = "WalkSpeed"
Hub.State.BehindDistance = 4
Hub.State.BehindNearest = true
Hub.State.StickBehind = false
Hub.State.FlyEnabled = false
Hub.State.FlySpeed = 60
local Fly = {
BodyVelocity = nil,
BodyGyro = nil,
Connection = nil,
Controls = nil,
}
pcall(function()
local playerModule = require(LocalPlayer:WaitForChild("PlayerScripts"):WaitForChild("PlayerModule"))
Fly.Controls = playerModule:GetControls()
end)
local function getMoveVector()
if Fly.Controls then
local ok, vector = pcall(function()
return Fly.Controls:GetMoveVector()
end)
if ok and vector then
return vector
end
end
local x, z = 0, 0
if UserInputService:IsKeyDown(Enum.KeyCode.W) then z -= 1 end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then z += 1 end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then x -= 1 end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then x += 1 end
return Vector3.new(x, 0, z)
end
function Fly:Stop()
if self.Connection then
self.Connection:Disconnect()
self.Connection = nil
end
if self.BodyVelocity then
self.BodyVelocity:Destroy()
self.BodyVelocity = nil
end
if self.BodyGyro then
self.BodyGyro:Destroy()
self.BodyGyro = nil
end
local hum = getHumanoid()
if hum then
hum.PlatformStand = false
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
end
end
function Fly:Start()
self:Stop()
local root = getRoot()
local hum = getHumanoid()
if not root or not hum then
return
end
hum.PlatformStand = true
local gyro = Instance.new("BodyGyro")
gyro.Name = "HubFlyGyro"
gyro.P = 9e4
gyro.MaxTorque = Vector3.new(9e9, 9e9, 9e9)
gyro.CFrame = root.CFrame
gyro.Parent = root
local velocity = Instance.new("BodyVelocity")
velocity.Name = "HubFlyVelocity"
velocity.MaxForce = Vector3.new(9e9, 9e9, 9e9)
velocity.Velocity = Vector3.zero
velocity.Parent = root
self.BodyGyro = gyro
self.BodyVelocity = velocity
self.Connection = RunService.RenderStepped:Connect(function()
local currentHum = getHumanoid()
if not currentHum or not velocity.Parent or not gyro.Parent then
return
end
local cameraCFrame = Camera.CFrame
local move = getMoveVector()
local direction = (cameraCFrame.RightVector * move.X) + (cameraCFrame.LookVector * -move.Z)
if UserInputService:IsKeyDown(Enum.KeyCode.Space) or currentHum.Jump then
direction += Vector3.yAxis
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl)
or UserInputService:IsKeyDown(Enum.KeyCode.Q) then
direction -= Vector3.yAxis
end
if direction.Magnitude > 0 then
velocity.Velocity = direction.Unit * Hub.State.FlySpeed
else
velocity.Velocity = Vector3.zero
end
gyro.CFrame = cameraCFrame
end)
end
local function setupFly(groupbox, maxSpeed)
local toggle = groupbox:AddToggle("FlyToggle", {
Text = "Fly",
Default = false,
Callback = function(value)
Hub.State.FlyEnabled = value
if value then
Fly:Start()
else
Fly:Stop()
end
end,
})
toggle:AddKeyPicker("FlyKey", {
Default = "F",
Mode = "Toggle",
Text = "Fly",
SyncToggleState = true,
})
groupbox:AddSlider("FlySpeedSlider", {
Text = "Fly Speed",
Default = math.min(60, maxSpeed),
Min = 10,
Max = maxSpeed,
Rounding = 0,
Suffix = " studs/s",
Callback = function(value)
Hub.State.FlySpeed = value
end,
})
groupbox:AddLabel({
Text = "WASD or thumbstick moves you toward where the camera looks. Space goes up, Ctrl or Q goes down.",
DoesWrap = true,
})
end
Hub:AddCleanup(function()
Fly:Stop()
end)
Hub:Connect(LocalPlayer.CharacterAdded, function()
if Hub.State.FlyEnabled then
task.wait(0.6)
Fly:Start()
end
end)
local rayParams = RaycastParams.new()
rayParams.FilterType = Enum.RaycastFilterType.Exclude
rayParams.IgnoreWater = true
rayParams.RespectCanCollide = true
local function updateRayFilter()
local list = {}
local char = getChar()
if char then
table.insert(list, char)
end
for _, name in ipairs({ "Ray_Ignore", "Debris" }) do
local folder = Workspace:FindFirstChild(name)
if folder then
table.insert(list, folder)
end
end
rayParams.FilterDescendantsInstances = list
end
local function isVisible(part, targetChar)
updateRayFilter()
local origin = Camera.CFrame.Position
local result = Workspace:Raycast(origin, part.Position - origin, rayParams)
if not result then
return true
end
return result.Instance:IsDescendantOf(targetChar)
end
local function getTargetPart(char, partName)
if partName == "Head" then
return char:FindFirstChild("Head")
end
return char:FindFirstChild("UpperTorso")
or char:FindFirstChild("HumanoidRootPart")
or char:FindFirstChild("Torso")
end
local function getAimCenter()
if UserInputService.MouseBehavior == Enum.MouseBehavior.LockCenter then
return Camera.ViewportSize / 2
end
return UserInputService:GetMouseLocation()
end
local function getClosestTarget(center, radius, partName, teamCheck, wallCheck)
local closestPart
local closestDistance = radius
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer then
local char = plr.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local part = char and getTargetPart(char, partName)
if hum and part and hum.Health > 0 and not char:FindFirstChildOfClass("ForceField") then
if not (teamCheck and isTeammate(plr)) then
local screenPos, onScreen = Camera:WorldToViewportPoint(part.Position)
if onScreen then
local distance = (Vector2.new(screenPos.X, screenPos.Y) - center).Magnitude
if distance < closestDistance then
if not wallCheck or isVisible(part, char) then
closestPart = part
closestDistance = distance
end
end
end
end
end
end
end
return closestPart
end
local FOVCircle = newDrawing("Circle")
if FOVCircle then
FOVCircle.Thickness = 1.5
FOVCircle.NumSides = 64
FOVCircle.Filled = false
FOVCircle.Transparency = 1
FOVCircle.Visible = false
end
Hub:AddCleanup(function()
removeDrawing(FOVCircle)
FOVCircle = nil
end)
local function isAiming()
if Hub.State.AimMode == "Always On" then
return true
end
return UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
end
Hub:Connect(RunService.RenderStepped, function(dt)
local center = getAimCenter()
if FOVCircle then
FOVCircle.Visible = Hub.State.ShowFOV
FOVCircle.Position = center
FOVCircle.Radius = Hub.State.FOVRadius
FOVCircle.Color = Hub.State.FOVColor
end
if not Hub.State.Aimbot or not isAiming() then
return
end
local part = getClosestTarget(
center,
Hub.State.FOVRadius,
Hub.State.AimPart,
Hub.State.AimTeamCheck,
Hub.State.AimWallCheck
)
if not part then
return
end
local targetCFrame = CFrame.lookAt(Camera.CFrame.Position, part.Position)
local alpha = math.clamp(1 - Hub.State.AimSmoothness / 100, 0.02, 1)
alpha = 1 - (1 - alpha) ^ (dt * 60)
Camera.CFrame = Camera.CFrame:Lerp(targetCFrame, alpha)
end)
local aimGroup = Tabs.Combat:AddLeftGroupbox("Aimbot")
aimGroup:AddToggle("Aimbot", {
Text = "Aimbot",
Default = false,
Callback = function(value)
Hub.State.Aimbot = value
end,
})
aimGroup:AddDropdown("AimMode", {
Text = "Aim Mode",
Values = { "Hold Right Click", "Always On" },
Default = 1,
Callback = function(value)
Hub.State.AimMode = value
end,
})
aimGroup:AddDropdown("AimPart", {
Text = "Aim Part",
Values = { "Head", "Torso" },
Default = 1,
Callback = function(value)
Hub.State.AimPart = value
end,
})
aimGroup:AddToggle("AimTeamCheck", {
Text = "Team Check",
Default = true,
Callback = function(value)
Hub.State.AimTeamCheck = value
end,
})
aimGroup:AddToggle("AimWallCheck", {
Text = "Wall Check",
Default = false,
Callback = function(value)
Hub.State.AimWallCheck = value
end,
})
aimGroup:AddSlider("AimSmoothness", {
Text = "Smoothness",
Default = 30,
Min = 0,
Max = 95,
Rounding = 0,
Suffix = "%",
Callback = function(value)
Hub.State.AimSmoothness = value
end,
})
local fovGroup = Tabs.Combat:AddRightGroupbox("FOV Circle")
fovGroup:AddToggle("ShowFOV", {
Text = "Show FOV Circle",
Default = false,
Callback = function(value)
Hub.State.ShowFOV = value
if value and not DrawingSupported then
Hub:Notify("FOV Circle", "Your executor does not support the Drawing library.", 4)
end
end,
})
fovGroup:AddSlider("FOVRadius", {
Text = "FOV Radius",
Default = 150,
Min = 30,
Max = 600,
Rounding = 0,
Suffix = " px",
Callback = function(value)
Hub.State.FOVRadius = value
end,
})
fovGroup:AddLabel("FOV Color"):AddColorPicker("FOVColor", {
Default = Hub.State.FOVColor,
Title = "FOV Color",
Callback = function(value)
Hub.State.FOVColor = value
end,
})
local SilentMethods = {
"FindPartOnRayWithIgnoreList",
"Raycast",
"Mouse.Hit / Target",
"FindPartOnRay",
}
local Silent = {
Target = nil,
OldNamecall = nil,
OldIndex = nil,
IndexHooked = false,
}
local Mouse = LocalPlayer:GetMouse()
local hookSupported = type(hookmetamethod) == "function" and type(getnamecallmethod) == "function"
local wrapClosure = newcclosure or function(fn) return fn end
local isOurCall = checkcaller or function() return false end
local function shouldRedirect()
if not Hub.Alive or not Hub.State.Silent or not Silent.Target then
return false
end
if isOurCall() then
return false
end
return math.random(1, 100) <= Hub.State.SilentHitChance
end
if hookSupported then
Silent.OldNamecall = hookmetamethod(game, "__namecall", wrapClosure(function(self, ...)
local method = getnamecallmethod()
if self == Workspace and method == SilentMethods[Hub.State.SilentMethod] and shouldRedirect() then
local args = table.pack(...)
if method == "Raycast" then
local origin = args[1]
local direction = args[2]
if typeof(origin) == "Vector3" and typeof(direction) == "Vector3" then
args[2] = (Silent.Target.Position - origin).Unit * direction.Magnitude
return Silent.OldNamecall(self, table.unpack(args, 1, args.n))
end
elseif method == "FindPartOnRayWithIgnoreList" or method == "FindPartOnRay" then
local ray = args[1]
if typeof(ray) == "Ray" then
args[1] = Ray.new(
ray.Origin,
(Silent.Target.Position - ray.Origin).Unit * math.max(ray.Direction.Magnitude, 1)
)
return Silent.OldNamecall(self, table.unpack(args, 1, args.n))
end
end
end
return Silent.OldNamecall(self, ...)
end))
end
local function ensureIndexHook()
if not hookSupported or Silent.IndexHooked then
return
end
Silent.IndexHooked = true
Silent.OldIndex = hookmetamethod(game, "__index", wrapClosure(function(self, key)
if self == Mouse
and (key == "Hit" or key == "Target")
and SilentMethods[Hub.State.SilentMethod] == "Mouse.Hit / Target"
and shouldRedirect() then
if key == "Hit" then
return CFrame.new(Silent.Target.Position)
end
return Silent.Target
end
return Silent.OldIndex(self, key)
end))
end
local SilentCircle = newDrawing("Circle")
if SilentCircle then
SilentCircle.Thickness = 1.5
SilentCircle.NumSides = 64
SilentCircle.Filled = false
SilentCircle.Transparency = 1
SilentCircle.Visible = false
end
Hub:AddCleanup(function()
Silent.Target = nil
removeDrawing(SilentCircle)
SilentCircle = nil
end)
Hub:Connect(RunService.RenderStepped, function()
local state = Hub.State
local center = getAimCenter()
if SilentCircle then
SilentCircle.Visible = state.ShowSilentFOV
SilentCircle.Position = center
SilentCircle.Radius = state.SilentFOV
SilentCircle.Color = state.SilentColor
end
if state.Silent then
Silent.Target = getClosestTarget(
center,
state.SilentFOV,
state.SilentPart,
state.SilentTeamCheck,
state.SilentWallCheck
)
else
Silent.Target = nil
end
end)
local silentGroup = Tabs.Combat:AddLeftGroupbox("Silent Aim")
silentGroup:AddToggle("SilentAim", {
Text = "Silent Aim",
Default = false,
Callback = function(value)
if value and not hookSupported then
Hub:Notify("Silent Aim", "Your executor does not support hookmetamethod.", 5)
return
end
Hub.State.Silent = value
end,
})
silentGroup:AddSlider("SilentMethod", {
Text = "Silent Aim Method",
Default = 1,
Min = 1,
Max = #SilentMethods,
Rounding = 0,
HideMax = true,
Suffix = " - " .. SilentMethods[1],
Callback = function(value)
Hub.State.SilentMethod = value
pcall(function()
Library.Options.SilentMethod:SetSuffix(" - " .. SilentMethods[value])
end)
if SilentMethods[value] == "Mouse.Hit / Target" then
ensureIndexHook()
end
end,
})
silentGroup:AddLabel({
Text = "If shots do not redirect, slide the method until one works. Arsenal usually uses method 1 or 2.",
DoesWrap = true,
})
silentGroup:AddDropdown("SilentPart", {
Text = "Silent Aim Part",
Values = { "Head", "Torso" },
Default = 1,
Callback = function(value)
Hub.State.SilentPart = value
end,
})
silentGroup:AddSlider("SilentHitChance", {
Text = "Hit Chance",
Default = 100,
Min = 1,
Max = 100,
Rounding = 0,
Suffix = "%",
Callback = function(value)
Hub.State.SilentHitChance = value
end,
})
local silentOptions = Tabs.Combat:AddRightGroupbox("Silent Aim Settings")
silentOptions:AddSlider("SilentFOV", {
Text = "Silent Aim FOV",
Default = 200,
Min = 30,
Max = 800,
Rounding = 0,
Suffix = " px",
Callback = function(value)
Hub.State.SilentFOV = value
end,
})
silentOptions:AddToggle("SilentTeamCheck", {
Text = "Team Check",
Default = true,
Callback = function(value)
Hub.State.SilentTeamCheck = value
end,
})
silentOptions:AddToggle("SilentWallCheck", {
Text = "Wall Check",
Default = false,
Callback = function(value)
Hub.State.SilentWallCheck = value
end,
})
silentOptions:AddToggle("ShowSilentFOV", {
Text = "Show Silent FOV Circle",
Default = false,
Callback = function(value)
Hub.State.ShowSilentFOV = value
if value and not DrawingSupported then
Hub:Notify("Silent FOV", "Your executor does not support the Drawing library.", 4)
end
end,
})
silentOptions:AddLabel("Silent FOV Color"):AddColorPicker("SilentColor", {
Default = Hub.State.SilentColor,
Title = "Silent FOV Color",
Callback = function(value)
Hub.State.SilentColor = value
end,
})
local HitboxOriginals = setmetatable({}, { __mode = "k" })
local function restoreHitboxPart(part)
local data = HitboxOriginals[part]
if not data then
return
end
HitboxOriginals[part] = nil
if part.Parent then
pcall(function()
part.Size = data.Size
part.Transparency = data.Transparency
part.CanCollide = data.CanCollide
part.Massless = data.Massless
end)
end
end
local function restoreAllHitboxes()
local parts = {}
for part in pairs(HitboxOriginals) do
table.insert(parts, part)
end
for _, part in ipairs(parts) do
restoreHitboxPart(part)
end
end
local function getHitboxParts(char)
local mode = Hub.State.HitboxPart
local parts = {}
if mode == "HeadHB" or mode == "Both" then
local headBox = char:FindFirstChild("HeadHB") or char:FindFirstChild("Head")
if headBox then
table.insert(parts, headBox)
end
end
if mode == "HumanoidRootPart" or mode == "Both" then
local root = char:FindFirstChild("HumanoidRootPart")
if root then
table.insert(parts, root)
end
end
return parts
end
local function applyHitboxPart(part)
if not HitboxOriginals[part] then
HitboxOriginals[part] = {
Size = part.Size,
Transparency = part.Transparency,
CanCollide = part.CanCollide,
Massless = part.Massless,
}
end
local size = Vector3.new(Hub.State.HitboxSize, Hub.State.HitboxSize, Hub.State.HitboxSize)
if (part.Size - size).Magnitude > 0.01 then
part.Size = size
end
if math.abs(part.Transparency - Hub.State.HitboxTransparency) > 0.001 then
part.Transparency = Hub.State.HitboxTransparency
end
if part.CanCollide then
part.CanCollide = false
end
if not part.Massless then
part.Massless = true
end
end
Hub:Connect(RunService.Heartbeat, function()
if not Hub.State.Hitbox then
return
end
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer then
local char = plr.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if char and hum then
local valid = hum.Health > 0
and not (Hub.State.HitboxTeamCheck and isTeammate(plr))
for _, part in ipairs(getHitboxParts(char)) do
if valid then
applyHitboxPart(part)
elseif HitboxOriginals[part] then
restoreHitboxPart(part)
end
end
end
end
end
end)
Hub:AddCleanup(restoreAllHitboxes)
local hitboxGroup = Tabs.Combat:AddRightGroupbox("Hitbox Expander")
hitboxGroup:AddToggle("HitboxExpander", {
Text = "Hitbox Expander",
Default = false,
Callback = function(value)
Hub.State.Hitbox = value
if not value then
restoreAllHitboxes()
end
end,
})
hitboxGroup:AddSlider("HitboxSize", {
Text = "Hitbox Size",
Default = 15,
Min = 2,
Max = 60,
Rounding = 0,
Suffix = " studs",
Callback = function(value)
Hub.State.HitboxSize = value
end,
})
hitboxGroup:AddSlider("HitboxTransparency", {
Text = "Hitbox Transparency",
Default = 0.6,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(value)
Hub.State.HitboxTransparency = value
end,
})
hitboxGroup:AddDropdown("HitboxPart", {
Text = "Hitbox Part",
Values = { "HeadHB", "HumanoidRootPart", "Both" },
Default = 1,
Callback = function(value)
restoreAllHitboxes()
Hub.State.HitboxPart = value
end,
})
hitboxGroup:AddToggle("HitboxTeamCheck", {
Text = "Team Check",
Default = true,
Callback = function(value)
Hub.State.HitboxTeamCheck = value
if value then
for _, plr in ipairs(Players:GetPlayers()) do
local char = plr.Character
if char and isTeammate(plr) then
for _, part in ipairs(getHitboxParts(char)) do
restoreHitboxPart(part)
end
end
end
end
end,
})
hitboxGroup:AddLabel({
Text = "Arsenal checks hits on your client, so bigger HeadHB and HumanoidRootPart boxes register. Very large sizes are easier for other players to notice.",
DoesWrap = true,
})
local gunGroup = Tabs.Weapon:AddLeftGroupbox("Gun Mods")
local AmmoCache = { Primary = nil, Secondary = nil }
local function findAmmoValues()
local gui = LocalPlayer:FindFirstChild("PlayerGui")
local main = gui and gui:FindFirstChild("GUI")
local client = main and main:FindFirstChild("Client")
local variables = client and client:FindFirstChild("Variables")
if not variables then
AmmoCache.Primary = nil
AmmoCache.Secondary = nil
return
end
AmmoCache.Primary = variables:FindFirstChild("ammocount")
AmmoCache.Secondary = variables:FindFirstChild("ammocount2")
end
local RecoilOriginals = setmetatable({}, { __mode = "k" })
local function scanRecoil()
local weapons = ReplicatedStorage:FindFirstChild("Weapons")
if not weapons then
return
end
for _, item in ipairs(weapons:GetDescendants()) do
if item:IsA("NumberValue") or item:IsA("IntValue") then
if string.find(string.lower(item.Name), "recoil", 1, true) then
if RecoilOriginals[item] == nil then
RecoilOriginals[item] = item.Value
end
if item.Value ~= 0 then
item.Value = 0
end
end
end
end
end
local ammoTimer = 0
local recoilTimer = 0
Hub:Connect(RunService.Heartbeat, function(dt)
if Hub.State.InfAmmo then
ammoTimer += dt
if ammoTimer >= 0.1 then
ammoTimer = 0
if not (AmmoCache.Primary and AmmoCache.Primary.Parent) then
findAmmoValues()
end
pcall(function()
if AmmoCache.Primary then
AmmoCache.Primary.Value = 999
end
if AmmoCache.Secondary then
AmmoCache.Secondary.Value = 999
end
end)
end
end
if Hub.State.NoRecoil then
recoilTimer += dt
if recoilTimer >= 1 then
recoilTimer = 0
pcall(scanRecoil)
end
end
end)
gunGroup:AddToggle("InfAmmo", {
Text = "Infinite Ammo",
Default = false,
Callback = function(value)
Hub.State.InfAmmo = value
if value then
findAmmoValues()
end
end,
})
gunGroup:AddToggle("NoRecoil", {
Text = "No Recoil",
Default = false,
Callback = function(value)
Hub.State.NoRecoil = value
if value then
pcall(scanRecoil)
else
local items = {}
for item, original in pairs(RecoilOriginals) do
items[item] = original
end
table.clear(RecoilOriginals)
for item, original in pairs(items) do
if item.Parent then
pcall(function()
item.Value = original
end)
end
end
end
end,
})
gunGroup:AddLabel({
Text = "Infinite Ammo keeps your ammo counters full. No Recoil zeroes the recoil values on every weapon. Switch weapons once after turning No Recoil on so the game reloads its stats.",
DoesWrap = true,
})
Hub:AddCleanup(function()
local items = {}
for item, original in pairs(RecoilOriginals) do
items[item] = original
end
table.clear(RecoilOriginals)
for item, original in pairs(items) do
if item.Parent then
pcall(function()
item.Value = original
end)
end
end
end)
Hub:Connect(RunService.Heartbeat, function(dt)
if not Hub.State.Speed or Hub.State.FlyEnabled then
return
end
local hum = getHumanoid()
local root = getRoot()
if not hum or not root then
return
end
if Hub.State.SpeedMethod == "WalkSpeed" then
if hum.WalkSpeed ~= Hub.State.SpeedValue then
hum.WalkSpeed = Hub.State.SpeedValue
end
else
local direction = hum.MoveDirection
if direction.Magnitude > 0 then
local extra = math.max(Hub.State.SpeedValue - 16, 0)
root.CFrame = root.CFrame + direction * extra * dt
end
end
end)
local speedGroup = Tabs.Movement:AddLeftGroupbox("Speed")
speedGroup:AddToggle("SpeedToggle", {
Text = "Speed",
Default = false,
Callback = function(value)
Hub.State.Speed = value
if not value then
local hum = getHumanoid()
if hum then
hum.WalkSpeed = 16
end
end
end,
})
speedGroup:AddSlider("SpeedSlider", {
Text = "Speed Amount",
Default = 50,
Min = 16,
Max = 200,
Rounding = 0,
Suffix = " studs/s",
Callback = function(value)
Hub.State.SpeedValue = value
end,
})
speedGroup:AddDropdown("SpeedMethod", {
Text = "Speed Method",
Values = { "WalkSpeed", "CFrame" },
Default = 1,
Callback = function(value)
Hub.State.SpeedMethod = value
local hum = getHumanoid()
if hum and value == "CFrame" then
hum.WalkSpeed = 16
end
end,
})
speedGroup:AddLabel({
Text = "If the game resets your WalkSpeed, switch the method to CFrame.",
DoesWrap = true,
})
local flyGroup = Tabs.Movement:AddRightGroupbox("Fly")
setupFly(flyGroup, 200)
local teleportGroup = Tabs.Teleport:AddLeftGroupbox("Teleport Behind Player")
local behindSelector = createPlayerSelector(teleportGroup, "BehindPlayerSlider", "Player (when not using nearest)")
local function getNearestEnemy()
local root = getRoot()
if not root then
return nil
end
local nearest
local nearestDistance = math.huge
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and not isTeammate(plr) then
local char = plr.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local targetRoot = char and char:FindFirstChild("HumanoidRootPart")
if hum and targetRoot and hum.Health > 0 then
local distance = (targetRoot.Position - root.Position).Magnitude
if distance < nearestDistance then
nearest = plr
nearestDistance = distance
end
end
end
end
return nearest
end
local function getBehindTarget()
if Hub.State.BehindNearest then
return getNearestEnemy()
end
return behindSelector:Get()
end
local function getBehindCFrame(targetRoot, distance)
local position = (targetRoot.CFrame * CFrame.new(0, 0, distance)).Position
return CFrame.lookAt(position, targetRoot.Position)
end
local function teleportBehind()
local root = getRoot()
local target = getBehindTarget()
local targetChar = target and target.Character
local targetRoot = targetChar and targetChar:FindFirstChild("HumanoidRootPart")
if not root or not targetRoot then
Hub:Notify("Teleport", "No valid target found.", 3)
return
end
root.CFrame = getBehindCFrame(targetRoot, Hub.State.BehindDistance)
end
Hub:Connect(RunService.Heartbeat, function()
if not Hub.State.StickBehind then
return
end
local root = getRoot()
local target = getBehindTarget()
local targetChar = target and target.Character
local targetRoot = targetChar and targetChar:FindFirstChild("HumanoidRootPart")
local targetHum = targetChar and targetChar:FindFirstChildOfClass("Humanoid")
if root and targetRoot and targetHum and targetHum.Health > 0 then
root.CFrame = getBehindCFrame(targetRoot, Hub.State.BehindDistance)
root.AssemblyLinearVelocity = Vector3.zero
end
end)
teleportGroup:AddToggle("BehindNearest", {
Text = "Use Nearest Enemy",
Default = true,
Callback = function(value)
Hub.State.BehindNearest = value
end,
})
teleportGroup:AddSlider("BehindDistance", {
Text = "Distance Behind",
Default = 4,
Min = 1,
Max = 15,
Rounding = 1,
Suffix = " studs",
Callback = function(value)
Hub.State.BehindDistance = value
end,
})
teleportGroup:AddButton({
Text = "Teleport Behind Target",
Func = teleportBehind,
})
teleportGroup:AddToggle("StickBehind", {
Text = "Stick Behind Target",
Default = false,
Callback = function(value)
Hub.State.StickBehind = value
end,
})
local teleportInfo = Tabs.Teleport:AddRightGroupbox("Info")
teleportInfo:AddLabel({
Text = "Teleports your CFrame to just behind the target and turns you to face them. Stick Behind Target keeps you there every frame.",
DoesWrap = true,
})
Hub.State.NameESP = false
Hub.State.HealthESP = false
Hub.State.TracerESP = false
Hub.State.Chams = false
Hub.State.Outline = false
Hub.State.ESPTeamCheck = false
Hub.State.TeamColors = false
Hub.State.TracerOrigin = "Bottom"
Hub.State.ESPMaxDistance = 5000
Hub.State.ChamsTransparency = 0.5
Hub.State.NameColor = Color3.fromRGB(255, 255, 255)
Hub.State.TracerColor = Color3.fromRGB(255, 80, 80)
Hub.State.ChamsColor = Color3.fromRGB(255, 60, 60)
Hub.State.OutlineColor = Color3.fromRGB(255, 255, 255)
local ESP = {
Objects = {},
Folder = nil,
}
local function getGuiContainer()
local ok, container = pcall(function()
if gethui then
return gethui()
end
return CoreGui
end)
if ok and container then
return container
end
return LocalPlayer:WaitForChild("PlayerGui")
end
ESP.Folder = Instance.new("Folder")
ESP.Folder.Name = "HubVisuals"
do
local parented = pcall(function()
ESP.Folder.Parent = getGuiContainer()
end)
if not parented or not ESP.Folder.Parent then
ESP.Folder.Parent = LocalPlayer:WaitForChild("PlayerGui")
end
end
local function createESP(plr)
if plr == LocalPlayer or ESP.Objects[plr] then
return
end
local gui = Instance.new("BillboardGui")
gui.Name = "HubTag"
gui.AlwaysOnTop = true
gui.Size = UDim2.fromOffset(170, 48)
gui.StudsOffset = Vector3.new(0, 3, 0)
gui.Enabled = false
gui.Parent = ESP.Folder
local nameLabel = Instance.new("TextLabel")
nameLabel.Name = "NameLabel"
nameLabel.BackgroundTransparency = 1
nameLabel.Size = UDim2.new(1, 0, 0, 16)
nameLabel.Font = Enum.Font.GothamBold
nameLabel.TextSize = 14
nameLabel.TextStrokeTransparency = 0
nameLabel.TextColor3 = Hub.State.NameColor
nameLabel.Parent = gui
local healthGroup = Instance.new("Frame")
healthGroup.Name = "HealthGroup"
healthGroup.BackgroundTransparency = 1
healthGroup.Position = UDim2.new(0, 0, 0, 18)
healthGroup.Size = UDim2.new(1, 0, 0, 30)
healthGroup.Visible = false
healthGroup.Parent = gui
local barBack = Instance.new("Frame")
barBack.Name = "BarBack"
barBack.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
barBack.BorderSizePixel = 0
barBack.Position = UDim2.new(0.15, 0, 0, 2)
barBack.Size = UDim2.new(0.7, 0, 0, 6)
barBack.Parent = healthGroup
local barFill = Instance.new("Frame")
barFill.Name = "BarFill"
barFill.BackgroundColor3 = Color3.fromRGB(0, 255, 0)
barFill.BorderSizePixel = 0
barFill.Size = UDim2.fromScale(1, 1)
barFill.Parent = barBack
local healthLabel = Instance.new("TextLabel")
healthLabel.Name = "HealthLabel"
healthLabel.BackgroundTransparency = 1
healthLabel.Position = UDim2.new(0, 0, 0, 10)
healthLabel.Size = UDim2.new(1, 0, 0, 14)
healthLabel.Font = Enum.Font.GothamBold
healthLabel.TextSize = 12
healthLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
healthLabel.TextStrokeTransparency = 0
healthLabel.Parent = healthGroup
local highlight = Instance.new("Highlight")
highlight.Name = "HubHighlight"
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Enabled = false
highlight.Parent = ESP.Folder
local tracer = newDrawing("Line")
if tracer then
tracer.Thickness = 1.5
tracer.Transparency = 1
tracer.Visible = false
end
ESP.Objects[plr] = {
Gui = gui,
NameLabel = nameLabel,
HealthGroup = healthGroup,
BarFill = barFill,
HealthLabel = healthLabel,
Highlight = highlight,
Tracer = tracer,
}
end
local function removeESP(plr)
local object = ESP.Objects[plr]
if not object then
return
end
ESP.Objects[plr] = nil
pcall(function() object.Gui:Destroy() end)
pcall(function() object.Highlight:Destroy() end)
removeDrawing(object.Tracer)
end
local function hideESP(object)
object.Gui.Enabled = false
object.Highlight.Enabled = false
if object.Tracer then
object.Tracer.Visible = false
end
end
local function getTracerOrigin(viewport)
local origin = Hub.State.TracerOrigin
if origin == "Center" then
return Vector2.new(viewport.X / 2, viewport.Y / 2)
elseif origin == "Mouse" then
return UserInputService:GetMouseLocation()
end
return Vector2.new(viewport.X / 2, viewport.Y)
end
local function resolveColor(plr, fallback)
if Hub.State.TeamColors and plr.Team then
return plr.TeamColor.Color
end
return fallback
end
Hub:Connect(RunService.RenderStepped, function()
local state = Hub.State
local viewport = Camera.ViewportSize
local camPos = Camera.CFrame.Position
for plr, object in pairs(ESP.Objects) do
local char = plr.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local root = char and char:FindFirstChild("HumanoidRootPart")
local head = char and char:FindFirstChild("Head")
local valid = hum and root and head and hum.Health > 0
and not (state.ESPTeamCheck and isTeammate(plr))
local distance = valid and (camPos - root.Position).Magnitude or 0
if valid and distance > state.ESPMaxDistance then
valid = false
end
if not valid then
hideESP(object)
else
local showTag = state.NameESP or state.HealthESP
object.Gui.Enabled = showTag
if showTag then
if object.Gui.Adornee ~= head then
object.Gui.Adornee = head
end
object.NameLabel.Visible = state.NameESP
if state.NameESP then
object.NameLabel.Text = plr.DisplayName .. " [" .. math.floor(distance) .. "m]"
object.NameLabel.TextColor3 = resolveColor(plr, state.NameColor)
end
object.HealthGroup.Visible = state.HealthESP
if state.HealthESP then
local ratio = math.clamp(hum.Health / math.max(hum.MaxHealth, 1), 0, 1)
object.BarFill.Size = UDim2.fromScale(ratio, 1)
object.BarFill.BackgroundColor3 = Color3.fromHSV(ratio * 0.33, 1, 1)
object.HealthLabel.Text = math.floor(hum.Health) .. " HP"
end
end
if object.Tracer then
if state.TracerESP then
local screenPos, onScreen = Camera:WorldToViewportPoint(root.Position)
if onScreen then
object.Tracer.From = getTracerOrigin(viewport)
object.Tracer.To = Vector2.new(screenPos.X, screenPos.Y)
object.Tracer.Color = resolveColor(plr, state.TracerColor)
object.Tracer.Visible = true
else
object.Tracer.Visible = false
end
else
object.Tracer.Visible = false
end
end
local highlight = object.Highlight
if state.Chams or state.Outline then
if highlight.Adornee ~= char then
highlight.Adornee = char
end
highlight.FillColor = resolveColor(plr, state.ChamsColor)
highlight.OutlineColor = resolveColor(plr, state.OutlineColor)
highlight.FillTransparency = state.Chams and state.ChamsTransparency or 1
highlight.OutlineTransparency = state.Outline and 0 or 1
highlight.Enabled = true
else
highlight.Enabled = false
end
end
end
end)
Hub:Connect(Players.PlayerAdded, createESP)
Hub:Connect(Players.PlayerRemoving, removeESP)
for _, plr in ipairs(Players:GetPlayers()) do
createESP(plr)
end
Hub:AddCleanup(function()
local list = {}
for plr in pairs(ESP.Objects) do
table.insert(list, plr)
end
for _, plr in ipairs(list) do
removeESP(plr)
end
if ESP.Folder then
ESP.Folder:Destroy()
ESP.Folder = nil
end
end)
local function setupESP(tab)
local main = tab:AddLeftGroupbox("ESP")
main:AddToggle("NameESP", {
Text = "Name ESP",
Default = false,
Callback = function(value)
Hub.State.NameESP = value
end,
})
main:AddToggle("HealthESP", {
Text = "Health ESP",
Default = false,
Callback = function(value)
Hub.State.HealthESP = value
end,
})
main:AddToggle("TracerESP", {
Text = "Tracer ESP",
Default = false,
Callback = function(value)
Hub.State.TracerESP = value
if value and not DrawingSupported then
Hub:Notify("Tracer ESP", "Your executor does not support the Drawing library.", 4)
end
end,
})
main:AddToggle("ChamsESP", {
Text = "Charm ESP (Chams)",
Default = false,
Callback = function(value)
Hub.State.Chams = value
end,
})
main:AddToggle("OutlineESP", {
Text = "Highlight ESP (Outline)",
Default = false,
Callback = function(value)
Hub.State.Outline = value
end,
})
main:AddToggle("ESPTeamCheck", {
Text = "Team Check (hide teammates)",
Default = false,
Callback = function(value)
Hub.State.ESPTeamCheck = value
end,
})
main:AddToggle("ESPTeamColors", {
Text = "Use Team Colors",
Default = false,
Callback = function(value)
Hub.State.TeamColors = value
end,
})
main:AddDropdown("TracerOrigin", {
Text = "Tracer Origin",
Values = { "Bottom", "Center", "Mouse" },
Default = 1,
Callback = function(value)
Hub.State.TracerOrigin = value
end,
})
main:AddSlider("ChamsTransparency", {
Text = "Chams Transparency",
Default = 0.5,
Min = 0,
Max = 1,
Rounding = 2,
Callback = function(value)
Hub.State.ChamsTransparency = value
end,
})
main:AddSlider("ESPMaxDistance", {
Text = "Max Distance",
Default = 5000,
Min = 100,
Max = 5000,
Rounding = 0,
Suffix = " studs",
Callback = function(value)
Hub.State.ESPMaxDistance = value
end,
})
local colors = tab:AddRightGroupbox("ESP Colors")
colors:AddLabel("Name Color"):AddColorPicker("NameColor", {
Default = Hub.State.NameColor,
Title = "Name Color",
Callback = function(value)
Hub.State.NameColor = value
end,
})
colors:AddLabel("Tracer Color"):AddColorPicker("TracerColor", {
Default = Hub.State.TracerColor,
Title = "Tracer Color",
Callback = function(value)
Hub.State.TracerColor = value
end,
})
colors:AddLabel("Chams Color"):AddColorPicker("ChamsColor", {
Default = Hub.State.ChamsColor,
Title = "Chams Color",
Callback = function(value)
Hub.State.ChamsColor = value
end,
})
colors:AddLabel("Highlight Outline Color"):AddColorPicker("OutlineColor", {
Default = Hub.State.OutlineColor,
Title = "Highlight Outline Color",
Callback = function(value)
Hub.State.OutlineColor = value
end,
})
colors:AddLabel({
Text = "Team Colors overrides these colors with each player's team color.",
DoesWrap = true,
})
end
local function setupSettings(tab)
local menu = tab:AddLeftGroupbox("Menu")
menu:AddLabel("Menu keybind"):AddKeyPicker("MenuKeybind", {
Default = "RightControl",
NoUI = true,
Text = "Menu keybind",
})
pcall(function()
Library.ToggleKeybind = Library.Options.MenuKeybind
end)
menu:AddButton({
Text = "Unload Script",
DoubleClick = true,
Risky = true,
Func = function()
Hub:Unload()
end,
})
local info = tab:AddRightGroupbox("Info")
info:AddLabel({
Text = "Press the menu keybind to hide or show this window. Unloading removes every feature and restores the game.",
DoesWrap = true,
})
info:AddLabel({
Text = "Cheating can get your account reported or banned. Use an alt account.",
DoesWrap = true,
})
end
setupESP(Tabs.Visuals)
setupSettings(Tabs.Settings)
Hub:Notify("Arsenal Hub", "Loaded. Press Right Control to hide or show the menu.", 5)Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place