-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. 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 Rscripts Risk Notice ]] 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")