M
Description
Bloxstrike ESP and Silent aim Made by Ashhub (Umar)
GAME[OPEN TESTING] BloxStrike
UPDATEDOct 10, 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 ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aa6bc84300f055f6f3e9091"))()
end)
end)
--[[rscripts:analytics:end]]
if getgenv().BloxStrike_Cleanup then
pcall(getgenv().BloxStrike_Cleanup)
getgenv().BloxStrike_Cleanup = nil
end
if getgenv().BloxStrikeESP_Running then
getgenv().BloxStrikeESP_Running = false
task.wait(0.15)
end
getgenv().BloxStrikeESP_Running = true
local Config = {
Enabled = true,
TeamCheck = true,
Box = true,
HealthBar = true,
Name = true,
Distance = true,
Tracer = false,
TracerFrom = "Bottom",
HeadDot = false,
Skeleton = false,
Chams = false,
MaxDistance = 1500,
Thickness = 1.5,
TextSize = 13,
UseTeamColors = true,
EnemyColor = Color3.fromRGB(255, 60, 60),
TColor = Color3.fromRGB(255, 140, 40),
CTColor = Color3.fromRGB(70, 170, 255),
TracerColor = Color3.fromRGB(255, 255, 255),
SkeletonColor = Color3.fromRGB(255, 255, 255),
SilentFOV = 120,
SilentShowFOV = true,
SilentFOVColor = Color3.fromRGB(255, 255, 255),
SilentEnabled = false,
SilentTargetPart = "Head",
SilentVisCheck = true,
SilentHitChance = 100,
}
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
local ESPObjects: any = {}
local Rayfield: any = loadstring(game:HttpGet("https://sirius.menu/rayfield"))()
local Window: any = Rayfield:CreateWindow({
Name = "Ash Hub | made by ashqryl (nafij)",
Icon = "crosshair",
LoadingTitle = "Ash Hub",
LoadingSubtitle = "made by ashqryl (nafij)",
ShowText = "Ash Hub",
Theme = "Ocean",
ToggleUIKeybind = Enum.KeyCode.RightShift,
DisableRayfieldPrompts = false,
DisableBuildWarnings = false,
ConfigurationSaving = {
Enabled = true,
FolderName = "BloxStrike",
FileName = "ESP_Silent"
},
Discord = { Enabled = false, Invite = "noinvitelink", RememberJoins = true },
KeySystem = false,
})
local ESPTab: any = Window:CreateTab("ESP", "eye")
local SilentTab: any = Window:CreateTab("Silent Aim", "crosshair")
local StyleTab: any = Window:CreateTab("Style", "palette")
local InfoTab: any = Window:CreateTab("Info", "info")
ESPTab:CreateSection("Main")
ESPTab:CreateToggle({ Name = "ESP Enabled", CurrentValue = Config.Enabled, Flag = "BS_Enabled",
Callback = function(v: boolean) Config.Enabled = v end })
ESPTab:CreateToggle({ Name = "Team Check (Enemies Only)", CurrentValue = Config.TeamCheck, Flag = "BS_TeamCheck",
Callback = function(v: boolean) Config.TeamCheck = v end })
ESPTab:CreateToggle({ Name = "Show Boxes", CurrentValue = Config.Box, Flag = "BS_Box",
Callback = function(v: boolean) Config.Box = v end })
ESPTab:CreateToggle({ Name = "Health Bar", CurrentValue = Config.HealthBar, Flag = "BS_HP",
Callback = function(v: boolean) Config.HealthBar = v end })
ESPTab:CreateToggle({ Name = "Show Name", CurrentValue = Config.Name, Flag = "BS_Name",
Callback = function(v: boolean) Config.Name = v end })
ESPTab:CreateToggle({ Name = "Show Distance", CurrentValue = Config.Distance, Flag = "BS_Dist",
Callback = function(v: boolean) Config.Distance = v end })
ESPTab:CreateSection("Extras")
ESPTab:CreateToggle({ Name = "Tracers", CurrentValue = Config.Tracer, Flag = "BS_Tracer",
Callback = function(v: boolean) Config.Tracer = v end })
ESPTab:CreateToggle({ Name = "Head Dot", CurrentValue = Config.HeadDot, Flag = "BS_Head",
Callback = function(v: boolean) Config.HeadDot = v end })
ESPTab:CreateToggle({ Name = "Skeleton", CurrentValue = Config.Skeleton, Flag = "BS_Skel",
Callback = function(v: boolean) Config.Skeleton = v end })
ESPTab:CreateToggle({ Name = "Chams (Highlight)", CurrentValue = Config.Chams, Flag = "BS_Chams",
Callback = function(v: boolean)
Config.Chams = v
if not v then
for _, p in ipairs(Players:GetPlayers()) do
local chars = Workspace:FindFirstChild("Characters")
local c: any = nil
if chars then c = (chars :: any):FindFirstChild(p.Name) end
if not c then c = p.Character end
if c then
local hl = (c :: any):FindFirstChildOfClass("Highlight")
if hl then (hl :: any):Destroy() end
end
end
end
end })
SilentTab:CreateSection("Silent Aim")
SilentTab:CreateToggle({ Name = "Silent Aim Enabled", CurrentValue = Config.SilentEnabled, Flag = "BS_Silent",
Callback = function(v: boolean)
Config.SilentEnabled = v
Rayfield:Notify({ Title = v and "Target lock ON (display only)" or "Target lock OFF",
Content = v and "LOCKED shows FOV target. Redirect lands next update." or "Back to ESP only",
Duration = 3 })
end })
SilentTab:CreateToggle({ Name = "Visibility Check (no wallbang lock)", CurrentValue = Config.SilentVisCheck, Flag = "BS_SilentVis",
Callback = function(v: boolean) Config.SilentVisCheck = v end })
SilentTab:CreateDropdown({ Name = "Target Part", Options = {"Head", "UpperTorso", "HumanoidRootPart"},
CurrentOption = {Config.SilentTargetPart}, MultipleOptions = false, Flag = "BS_SilentPart",
Callback = function(o: any) Config.SilentTargetPart = o[1] end })
SilentTab:CreateSlider({ Name = "Hit Chance (%)", Range = {10, 100}, Increment = 5,
CurrentValue = Config.SilentHitChance, Flag = "BS_SilentHit", Suffix = "%",
Callback = function(v: number) Config.SilentHitChance = v end })
SilentTab:CreateSection("FOV")
SilentTab:CreateToggle({ Name = "Show FOV Circle", CurrentValue = Config.SilentShowFOV, Flag = "BS_SilentShow",
Callback = function(v: boolean) Config.SilentShowFOV = v end })
SilentTab:CreateSlider({ Name = "FOV Size (px)", Range = {30, 600}, Increment = 5,
CurrentValue = Config.SilentFOV, Flag = "BS_SilentFOV", Suffix = "px",
Callback = function(v: number) Config.SilentFOV = v end })
SilentTab:CreateColorPicker({ Name = "FOV Circle Color", Color = Config.SilentFOVColor, Flag = "BS_SilentCol",
Callback = function(v: Color3) Config.SilentFOVColor = v end })
StyleTab:CreateSection("Colors")
StyleTab:CreateToggle({ Name = "Color Enemies By Their Team", CurrentValue = Config.UseTeamColors, Flag = "BS_TeamCol",
Callback = function(v: boolean) Config.UseTeamColors = v end })
StyleTab:CreateColorPicker({ Name = "Enemy Color (fallback)", Color = Config.EnemyColor, Flag = "BS_EnemyCol",
Callback = function(v: Color3) Config.EnemyColor = v end })
StyleTab:CreateColorPicker({ Name = "Terrorists Color", Color = Config.TColor, Flag = "BS_TCol",
Callback = function(v: Color3) Config.TColor = v end })
StyleTab:CreateColorPicker({ Name = "Counter-Terrorists Color", Color = Config.CTColor, Flag = "BS_CTCol",
Callback = function(v: Color3) Config.CTColor = v end })
StyleTab:CreateColorPicker({ Name = "Tracer Color", Color = Config.TracerColor, Flag = "BS_TrCol",
Callback = function(v: Color3) Config.TracerColor = v end })
StyleTab:CreateSection("Sizing")
StyleTab:CreateSlider({ Name = "Max Distance (studs)", Range = {100, 3000}, Increment = 50,
CurrentValue = Config.MaxDistance, Flag = "BS_MaxD", Suffix = "studs",
Callback = function(v: number) Config.MaxDistance = v end })
StyleTab:CreateSlider({ Name = "Box / Line Thickness", Range = {1, 3}, Increment = 0.5,
CurrentValue = Config.Thickness, Flag = "BS_Thick", Suffix = "px",
Callback = function(v: number) Config.Thickness = v end })
StyleTab:CreateSlider({ Name = "Text Size", Range = {10, 20}, Increment = 1,
CurrentValue = Config.TextSize, Flag = "BS_Txt", Suffix = "px",
Callback = function(v: number)
Config.TextSize = v
for _, d in pairs(ESPObjects) do
d.NameLabel.Size = v
d.DistLabel.Size = v - 1
end
end })
StyleTab:CreateDropdown({ Name = "Tracer Origin", Options = {"Bottom", "Center", "Top", "Mouse"},
CurrentOption = {Config.TracerFrom}, MultipleOptions = false, Flag = "BS_TrFrom",
Callback = function(o: any) Config.TracerFrom = o[1] end })
StyleTab:CreateSection("Manage")
StyleTab:CreateButton({ Name = "Unload All", Callback = function()
if getgenv().BloxStrike_Cleanup then
pcall(getgenv().BloxStrike_Cleanup)
end
end })
InfoTab:CreateParagraph({ Title = "How it works",
Content = "ESP: Team attr check, enemies only. LOCKED: shows current FOV target (display only, firing untouched). RightShift toggles UI." })
Rayfield:LoadConfiguration()
local function newDraw(className: string, props: any)
local d: any = (Drawing :: any).new(className)
for k, v in pairs(props) do
pcall(function() d[k] = v end)
end
return d
end
local FOVCircle: any = newDraw("Circle", { Filled = false, Thickness = 1.5, Transparency = 0, Visible = false })
local FOVOutline: any = newDraw("Circle", { Filled = false, Thickness = 3, Color = Color3.fromRGB(0, 0, 0), Transparency = 0.4, Visible = false })
local LockLabel: any = newDraw("Text", { Center = true, Outline = true, Size = 13, Color = Color3.fromRGB(120, 255, 120), Transparency = 0, Visible = false })
local SilentCurrent: any = nil
-- V3 hook above is the only firing-path touchpoint (initial bullet cast only).
local function getDrawSet(plr: Player)
local set = ESPObjects[plr.UserId]
if set then return set end
set = {}
set.Box = newDraw("Square", { Filled = false, Thickness = Config.Thickness, Transparency = 0, Visible = false })
set.BoxOutline = newDraw("Square", { Filled = false, Thickness = 3, Color = Color3.fromRGB(0, 0, 0), Transparency = 0.35, Visible = false })
set.HPBack = newDraw("Square", { Filled = true, Color = Color3.fromRGB(10, 10, 10), Transparency = 0.25, Visible = false })
set.HPFront = newDraw("Square", { Filled = true, Color = Color3.fromRGB(80, 255, 80), Transparency = 0, Visible = false })
set.NameLabel = newDraw("Text", { Center = true, Outline = true, Size = Config.TextSize, Color = Color3.fromRGB(255, 255, 255), Transparency = 0, Visible = false })
set.DistLabel = newDraw("Text", { Center = true, Outline = true, Size = Config.TextSize - 1, Color = Color3.fromRGB(200, 200, 200), Transparency = 0, Visible = false })
set.Tracer = newDraw("Line", { Thickness = Config.Thickness, Transparency = 0, Visible = false })
set.HeadDot = newDraw("Circle", { Filled = true, Thickness = 1, Radius = 3, Transparency = 0, Visible = false })
set.Bones = {}
for _ = 1, 14 do
table.insert(set.Bones, newDraw("Line", { Thickness = 1, Transparency = 0, Visible = false }))
end
ESPObjects[plr.UserId] = set
return set
end
local function hideSet(set: any)
for k, v in pairs(set) do
if k == "Bones" then
for _, b in ipairs(v) do
b.Visible = false
end
else
v.Visible = false
end
end
end
local function getCharacter(plr: Player)
local chars = Workspace:FindFirstChild("Characters")
if chars then
local m = (chars :: any):FindFirstChild(plr.Name)
if m and m:IsA("Model") then return m end
end
local c = plr.Character
if c and c.Parent then return c end
return nil
end
local function isEnemy(plr: Player): boolean
if plr == LocalPlayer then return false end
if not Config.TeamCheck then return true end
local myTeam = LocalPlayer:GetAttribute("Team")
local tTeam = plr:GetAttribute("Team")
if typeof(myTeam) ~= "string" or typeof(tTeam) ~= "string" then return false end
if myTeam == "" or tTeam == "" then return false end
return myTeam ~= tTeam
end
local function getHealth(char: any)
local h = char:GetAttribute("Health")
local m = char:GetAttribute("MaxHealth")
local hn = tonumber(tostring(h)) or 100
local mn = tonumber(tostring(m)) or 100
if mn <= 0 then mn = 100 end
return math.clamp(hn, 0, mn), mn
end
local function isAlive(plr: Player, char: any): boolean
if char:GetAttribute("Dead") == true then return false end
if plr:GetAttribute("Dead") == true then return false end
local hp, _ = getHealth(char)
return hp > 0
end
local function enemyColorFor(plr: Player): Color3
if Config.UseTeamColors then
local t = plr:GetAttribute("Team")
if t == "Terrorists" then return Config.TColor end
if t == "Counter-Terrorists" then return Config.CTColor end
end
return Config.EnemyColor
end
local function project(pos: Vector3)
local v3, onScreen = Camera:WorldToViewportPoint(pos)
return Vector2.new(v3.X, v3.Y), onScreen
end
local function partPos(char: any, name: string)
local p = char:FindFirstChild(name)
if p and p:IsA("BasePart") then return p.Position end
return nil
end
-- Closest enemy part to crosshair inside FOV (refreshed every frame)
local function getSilentTarget()
if not Camera then return nil end
local vs = Camera.ViewportSize
local center = Vector2.new(vs.X / 2, vs.Y / 2)
local myChar = getCharacter(LocalPlayer)
local best: any = nil
local bestPx = Config.SilentFOV
for _, p in ipairs(Players:GetPlayers()) do
if p == LocalPlayer then continue end
if not isEnemy(p) then continue end
local char = getCharacter(p)
if not char then continue end
if not isAlive(p, char) then continue end
local part: any = char:FindFirstChild(Config.SilentTargetPart)
if not part then part = char:FindFirstChild("Head") end
if not part then continue end
local sp, vis = project(part.Position)
if not vis then continue end
local px = (sp - center).Magnitude
if px > Config.SilentFOV or px >= bestPx then continue end
if Config.SilentVisCheck then
local origin = Camera.CFrame.Position
local dir = part.Position - origin
local dist = dir.Magnitude
if dist < 1 then continue end
local rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Exclude
rp.IgnoreWater = true
local filt: any = { Camera }
if myChar then table.insert(filt, myChar) end
local deb = Workspace:FindFirstChild("Debris")
if deb then table.insert(filt, deb) end
rp.FilterDescendantsInstances = filt
local hit = Workspace:Raycast(origin, dir.Unit * (dist + 2), rp)
if hit and hit.Instance and not hit.Instance:IsDescendantOf(char) then
continue
end
end
bestPx = px
best = { Player = p, Char = char, Part = part, FreshAt = os.clock() }
end
return best
end
-- V3 silent (classic __namecall style, learned from Universal-SilentAim):
-- redirect ONLY the bullet's initial cast. Fingerprint is CollisionGroup
-- "Bullet" + IgnoreWater == false. The penetration loop (castThrough, up to
-- ~100 rays/shot) uses IgnoreWater == true and MUST stay untouched -
-- redirecting it piled up hits and broke firing in v2.
-- FreshAt guard: reloaded copies freeze their cache, so stale locks
-- auto-expire and old hooks become harmless pass-throughs.
local SilentOldNamecall: any = nil
SilentOldNamecall = hookmetamethod(game, "__namecall", newcclosure(function(...)
local args: any = { ... }
local self = args[1]
local okMethod, method = pcall(getnamecallmethod)
if okMethod and method == "Raycast" and self == Workspace and not checkcaller() then
if Config.SilentEnabled then
local params: any = args[4]
local isBulletCast = false
pcall(function()
if typeof(params) == "RaycastParams"
and params.CollisionGroup == "Bullet"
and params.IgnoreWater == false then
isBulletCast = true
end
end)
if isBulletCast then
local t = SilentCurrent
if t and t.Part and t.Part.Parent and t.FreshAt and (os.clock() - t.FreshAt) < 1.0 then
local origin: Vector3 = args[2]
local dir: Vector3 = args[3]
local tPos: Vector3 = t.Part.Position
if typeof(origin) == "Vector3" and typeof(dir) == "Vector3" and typeof(tPos) == "Vector3" then
local mag = dir.Magnitude
local delta = tPos - origin
if mag > 0.5 and delta.Magnitude > 0.5 then
if Config.SilentHitChance >= 100 or math.random(100) <= Config.SilentHitChance then
args[3] = delta.Unit * mag
return SilentOldNamecall(table.unpack(args))
end
end
end
end
end
end
end
return SilentOldNamecall(...)
end))
local function drawBone(lines: any, idx: number, a: any, b: any)
local line = lines[idx]
if not line then return end
if a == nil or b == nil then
line.Visible = false
return
end
local a2, aVis = project(a)
local b2, bVis = project(b)
if not aVis or not bVis then
line.Visible = false
return
end
line.From = a2
line.To = b2
line.Color = Config.SkeletonColor
line.Visible = true
end
local function applyChams(char: any, col: Color3)
if not Config.Chams then return end
local hl = char:FindFirstChildOfClass("Highlight")
if not hl then
hl = Instance.new("Highlight")
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.FillTransparency = 0.65
hl.OutlineTransparency = 0
hl.Parent = char
end
hl.FillColor = col
hl.OutlineColor = col
end
local conn: any = nil
conn = RunService.RenderStepped:Connect(function()
if getgenv().BloxStrikeESP_Running == false then return end
if not Camera then Camera = Workspace.CurrentCamera end
if not Camera then return end
local vs = Camera.ViewportSize
local center = Vector2.new(vs.X / 2, vs.Y / 2)
if Config.SilentShowFOV then
FOVCircle.Position = center
FOVCircle.Radius = Config.SilentFOV
FOVCircle.Color = Config.SilentFOVColor
FOVCircle.Visible = true
FOVOutline.Position = center
FOVOutline.Radius = Config.SilentFOV
FOVOutline.Visible = true
else
FOVCircle.Visible = false
FOVOutline.Visible = false
end
-- refresh silent target once per frame (shared by all pellets)
if Config.SilentEnabled then
local ok, t = pcall(getSilentTarget)
SilentCurrent = ok and t or nil
else
SilentCurrent = nil
end
if SilentCurrent and SilentCurrent.Player then
LockLabel.Text = "LOCKED: " .. SilentCurrent.Player.DisplayName
LockLabel.Position = center + Vector2.new(0, -(Config.SilentFOV + 18))
LockLabel.Visible = Config.SilentShowFOV
else
LockLabel.Visible = false
end
for _, plr in ipairs(Players:GetPlayers()) do
local set = getDrawSet(plr)
if not Config.Enabled or not isEnemy(plr) then
hideSet(set)
continue
end
local char = getCharacter(plr)
if not char or not isAlive(plr, char) then
hideSet(set)
continue
end
local hrp: any = char:FindFirstChild("HumanoidRootPart")
local head: any = char:FindFirstChild("Head")
if not hrp or not head then
hideSet(set)
continue
end
local dist = (Camera.CFrame.Position - hrp.Position).Magnitude
if dist > Config.MaxDistance then
hideSet(set)
continue
end
local col = enemyColorFor(plr)
applyChams(char, col)
local ok, bcf, bsize = pcall(function() return (char :: any):GetBoundingBox() end)
local top3: Vector3
local bot3: Vector3
if ok and bcf and bsize then
top3 = bcf.Position + Vector3.new(0, bsize.Y / 2, 0)
bot3 = bcf.Position - Vector3.new(0, bsize.Y / 2, 0)
else
top3 = head.Position + Vector3.new(0, 0.6, 0)
bot3 = hrp.Position - Vector3.new(0, 3.1, 0)
end
local top2, topVis = project(top3)
local bot2, botVis = project(bot3)
if not topVis or not botVis then
hideSet(set)
continue
end
local h = math.max(bot2.Y - top2.Y, 4)
local w = h / 2
local x = top2.X - w / 2
local y = top2.Y
if Config.Box then
local b: any = set.Box
b.Position = Vector2.new(x, y)
b.Size = Vector2.new(w, h)
b.Color = col
b.Thickness = Config.Thickness
b.Visible = true
local o: any = set.BoxOutline
o.Position = Vector2.new(x - 1, y - 1)
o.Size = Vector2.new(w + 2, h + 2)
o.Visible = true
else
set.Box.Visible = false
set.BoxOutline.Visible = false
end
if Config.HealthBar then
local hp, mx = getHealth(char)
local frac = math.clamp(hp / mx, 0, 1)
local bw = math.max(3, w * 0.07)
local bx = x - bw - 3
local back: any = set.HPBack
back.Position = Vector2.new(bx, y)
back.Size = Vector2.new(bw, h)
back.Visible = true
local front: any = set.HPFront
local fh = h * frac
front.Position = Vector2.new(bx, y + (h - fh))
front.Size = Vector2.new(bw, math.max(fh, 1))
if frac > 0.5 then
front.Color = Color3.fromRGB(90, 255, 90)
elseif frac > 0.25 then
front.Color = Color3.fromRGB(255, 200, 60)
else
front.Color = Color3.fromRGB(255, 60, 60)
end
front.Visible = true
else
set.HPBack.Visible = false
set.HPFront.Visible = false
end
if Config.Name then
local n: any = set.NameLabel
n.Position = Vector2.new(top2.X, y - 16)
n.Text = plr.DisplayName .. " (@" .. plr.Name .. ")"
n.Size = Config.TextSize
n.Visible = true
else
set.NameLabel.Visible = false
end
if Config.Distance then
local d: any = set.DistLabel
d.Position = Vector2.new(top2.X, y + h + 1)
d.Text = string.format("[%dm]", math.floor(dist + 0.5))
d.Size = Config.TextSize - 1
d.Visible = true
else
set.DistLabel.Visible = false
end
if Config.Tracer then
local t: any = set.Tracer
local from: Vector2
if Config.TracerFrom == "Center" then
from = Vector2.new(vs.X / 2, vs.Y / 2)
elseif Config.TracerFrom == "Top" then
from = Vector2.new(vs.X / 2, 0)
elseif Config.TracerFrom == "Mouse" then
local m = LocalPlayer:GetMouse()
from = Vector2.new(m.X, m.Y)
else
from = Vector2.new(vs.X / 2, vs.Y)
end
t.From = from
t.To = Vector2.new(top2.X, y + h)
t.Color = Config.TracerColor
t.Thickness = Config.Thickness
t.Visible = true
else
set.Tracer.Visible = false
end
if Config.HeadDot then
local hp2, hvis = project(head.Position)
local hd: any = set.HeadDot
if hvis then
hd.Position = hp2
hd.Color = col
hd.Radius = math.clamp(w * 0.09, 2, 6)
hd.Visible = true
else
hd.Visible = false
end
else
set.HeadDot.Visible = false
end
if Config.Skeleton then
local hd3 = partPos(char, "Head")
local ut = partPos(char, "UpperTorso")
local lt = partPos(char, "LowerTorso")
local lua = partPos(char, "LeftUpperArm")
local lla = partPos(char, "LeftLowerArm")
local lh = partPos(char, "LeftHand")
local rua = partPos(char, "RightUpperArm")
local rla = partPos(char, "RightLowerArm")
local rh = partPos(char, "RightHand")
local lul = partPos(char, "LeftUpperLeg")
local lll = partPos(char, "LeftLowerLeg")
local lf = partPos(char, "LeftFoot")
local rul = partPos(char, "RightUpperLeg")
local rll = partPos(char, "RightLowerLeg")
local rf = partPos(char, "RightFoot")
local bones = set.Bones
drawBone(bones, 1, hd3, ut)
drawBone(bones, 2, ut, lt)
drawBone(bones, 3, ut, lua)
drawBone(bones, 4, lua, lla)
drawBone(bones, 5, lla, lh)
drawBone(bones, 6, ut, rua)
drawBone(bones, 7, rua, rla)
drawBone(bones, 8, rla, rh)
drawBone(bones, 9, lt, lul)
drawBone(bones, 10, lul, lll)
drawBone(bones, 11, lll, lf)
drawBone(bones, 12, lt, rul)
drawBone(bones, 13, rul, rll)
drawBone(bones, 14, rll, rf)
for _, b in ipairs(bones) do
b.Thickness = 1
end
else
for _, b in ipairs(set.Bones) do
b.Visible = false
end
end
end
end)
Players.PlayerRemoving:Connect(function(plr: Player)
local set = ESPObjects[plr.UserId]
if set then
pcall(hideSet, set)
for _, v in pairs(set) do
if typeof(v) == "table" then
for _, b in ipairs(v) do
pcall(function() b:Remove() end)
end
else
pcall(function() v:Remove() end)
end
end
ESPObjects[plr.UserId] = nil
end
end)
-- NOTE: old __namecall hook (if any) is restored by running the previous cleanup first.
-- Stale locks also auto-expire via FreshAt, so older hook copies pass through.
getgenv().BloxStrike_Cleanup = function()
getgenv().BloxStrikeESP_Running = false
task.wait(0.1)
if conn then
pcall(function() conn:Disconnect() end)
end
SilentCurrent = nil
pcall(function()
if SilentOldNamecall then
hookmetamethod(game, "__namecall", SilentOldNamecall)
end
end)
for _, set in pairs(ESPObjects) do
for _, v in pairs(set) do
if typeof(v) == "table" then
for _, b in ipairs(v) do
pcall(function() b:Remove() end)
end
else
pcall(function() v:Remove() end)
end
end
end
table.clear(ESPObjects)
pcall(function() FOVCircle:Remove() end)
pcall(function() FOVOutline:Remove() end)
pcall(function() LockLabel:Remove() end)
SilentCurrent = nil
pcall(function() Rayfield:Destroy() end)
getgenv().BloxStrike_Cleanup = nil
end
print("[Ash Hub by ashqryl (nafij)] ESP + Silent Aim loaded")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