Blood debt hub [OPEN SOURCE SILENT-AIM]
![Blood debt hub [OPEN SOURCE SILENT-AIM]](https://cdn.bloxscripter.com/uploads/2026-07-26/a3007978.png)
스크립트 코드
--[[
MIT License
Copyright (c) 2026 Ring0
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
]]
if getgenv()._bdhub then pcall(function() getgenv()._bdhub.kill() end) end
local Players, UIS, RunService, RS, Lighting, Teams =
game:GetService("Players"), game:GetService("UserInputService"),
game:GetService("RunService"), game:GetService("ReplicatedStorage"),
game:GetService("Lighting"), game:GetService("Teams")
local LP, Camera = Players.LocalPlayer, workspace.CurrentCamera
local inflict = RS:WaitForChild("gun_res"):WaitForChild("evt"):WaitForChild("inflict")
local killerSet, vigSet = {}, {}
local sdOk, sd = pcall(function() return require(RS.Modules.ShopData) end)
if sdOk and sd and sd.Weapons then
if sd.Weapons.Killer then for k in pairs(sd.Weapons.Killer) do killerSet[k] = true end end
if sd.Weapons.Vigilante then for k in pairs(sd.Weapons.Vigilante) do vigSet[k] = true end end
end
local ROLE_COLORS = {
Killer = Color3.fromRGB(200, 25, 30),
Vigilante = Color3.fromRGB(50, 130, 220),
Bystander = Color3.fromRGB(165, 165, 155),
["Bystander?"] = Color3.fromRGB(110, 110, 105),
Detective = Color3.fromRGB(230, 175, 50),
Unknown = Color3.fromRGB(220, 215, 200),
}
local ACCENT = Color3.fromRGB(220, 215, 200)
local ACCENT_DIM = Color3.fromRGB(110, 110, 105)
local BLOOD = Color3.fromRGB(165, 25, 30)
local cfg = {
SA_Enabled=true, SA_Scoring="Crosshair", SA_HitPart="Head",
SA_Wallcheck=false, SA_VisibleOnly=false, SA_FovEnabled=true, SA_FovDegrees=60,
SA_OnlyIsPlayer=true, SA_MinInterval=0.1, SA_LastFire=0,
SA_RoleTeamCheck=true, SA_TeamsCheck=true,
CH_Enabled=true, CH_Color=BLOOD,
CH_FillTransparency=0.82, CH_OutlineTransparency=0,
CH_ThroughWalls=true, CH_ShowSelf=false, CH_Pulse=false,
CH_PulseSpeed=2.0, CH_PulseDepth=0.15,
CH_ColorByRole=true, CH_ColorByTeam=true,
BL_Intensity=0.45, BL_Threshold=1.6, BL_Size=18,
HB_Enabled=false, HB_Color=Color3.fromRGB(120, 180, 220), HB_Transparency=0.7,
TE_Enabled=true, TE_Color=ACCENT, TE_Distance=true,
TE_ShowRole=true, TE_ShowTeam=true, TE_ColorByRole=true,
TL_Enabled=true, TL_Color=BLOOD, TL_Radius=12, TL_Thickness=1.4,
AA_Enabled=false, AA_Mode="Spin", AA_SpinSpeed=600,
WM_Enabled=true,
WP_Enabled=false, WP_Transparency=0.0, WP_Material="None",
GFX_Lighting=true, GFX_ClockTime=14.5, GFX_Brightness=2.0, GFX_Exposure=0.4,
GFX_Ambient=Color3.fromRGB(120,120,135), GFX_OutdoorAmbient=Color3.fromRGB(140,140,160),
GFX_SpecScale=1.0, GFX_DiffScale=1.0,
GFX_Skybox=true,
GFX_CC=true, GFX_Saturation=0.18, GFX_Contrast=0.10, GFX_CCBrightness=0.02,
GFX_Bloom=true, GFX_BloomIntensity=0.35, GFX_BloomThreshold=1.6, GFX_BloomSize=22,
GFX_SunRays=true, GFX_SunIntensity=0.04, GFX_SunSpread=0.65,
GFX_DOF=false, GFX_DOFFocus=30, GFX_DOFRadius=10, GFX_DOFFar=0.5,
GFX_XRay=false, GFX_XRayAmount=0.55, GFX_XRayMinSize=6,
GFX_Shiny=false, GFX_ShinyAmount=0.25,
}
local roleCache = {}
local function getLPRole()
local pgui = LP:FindFirstChild("PlayerGui")
if not pgui then return "Unknown" end
local rsod = pgui:FindFirstChild("RSOD")
if rsod then
local role = rsod:FindFirstChild("Role")
if role and role:IsA("TextLabel") then
local t = role.Text or ""
if t:find("Bystander") then return "Bystander"
elseif t:find("Killer") then return "Killer"
elseif t:find("Vigilante") then return "Vigilante"
elseif t:find("Detective") then return "Detective" end
end
end
local sp = pgui:FindFirstChild("SpawnText")
if sp then
local r = sp:FindFirstChild("Rolery")
if r and r:IsA("TextLabel") then
local t = (r.Text or ""):upper()
if t:find("BYSTANDER") then return "Bystander"
elseif t:find("KILLER") then return "Killer"
elseif t:find("VIGILANTE") then return "Vigilante"
elseif t:find("DETECTIVE") then return "Detective" end
end
end
return "Unknown"
end
local function scanToolsForRole(plr)
local hasK, hasV = false, false
if plr.Character then
for _, c in ipairs(plr.Character:GetChildren()) do
if c:IsA("Tool") then
if killerSet[c.Name] then hasK = true
elseif vigSet[c.Name] then hasV = true end
end
end
end
if plr == LP then
local bp = plr:FindFirstChild("Backpack")
if bp then
for _, c in ipairs(bp:GetChildren()) do
if c:IsA("Tool") then
if killerSet[c.Name] then hasK = true
elseif vigSet[c.Name] then hasV = true end
end
end
end
end
if hasK then return "Killer"
elseif hasV then return "Vigilante" end
return nil
end
local function inferRole(plr)
local uid = plr.UserId
local current = scanToolsForRole(plr)
if current then
roleCache[uid] = current
return current
end
if roleCache[uid] then return roleCache[uid] end
return "Bystander?"
end
local function resetRoleCache() roleCache = {} end
local function teamsActive()
return #Teams:GetTeams() > 0
end
local function getDisplayLabel(plr)
if teamsActive() and plr.Team then return plr.Team.Name end
return inferRole(plr)
end
local function getDisplayColor(plr, fallback)
if teamsActive() and plr.Team and plr.TeamColor then return plr.TeamColor.Color end
local r = inferRole(plr)
return ROLE_COLORS[r] or fallback
end
local roundConns = {}
local function bindRoundResetSignals()
for _, c in ipairs(roundConns) do pcall(function() c:Disconnect() end) end
roundConns = {}
table.insert(roundConns, LP.CharacterAdded:Connect(function() resetRoleCache() end))
table.insert(roundConns, Players.PlayerAdded:Connect(function() resetRoleCache() end))
table.insert(roundConns, Players.PlayerRemoving:Connect(function(p) roleCache[p.UserId] = nil end))
for _, p in ipairs(Players:GetPlayers()) do
if p ~= LP then
table.insert(roundConns, p.CharacterAdded:Connect(function() roleCache[p.UserId] = nil end))
end
end
table.insert(roundConns, Players.PlayerAdded:Connect(function(p)
table.insert(roundConns, p.CharacterAdded:Connect(function() roleCache[p.UserId] = nil end))
end))
end
bindRoundResetSignals()
local function colorForPlayer(plr)
if cfg.CH_ColorByTeam and plr.Team and LP.Team and teamsActive() then
return plr.TeamColor and plr.TeamColor.Color or cfg.CH_Color
end
if cfg.CH_ColorByRole then
return getDisplayColor(plr, cfg.CH_Color)
end
return cfg.CH_Color
end
local function isFriendly(enemyPlr, enemyRole, lpRole)
if cfg.SA_TeamsCheck and #Teams:GetTeams() > 0 and LP.Team and enemyPlr.Team then
if LP.Team == enemyPlr.Team then return true end
return false
end
if not cfg.SA_RoleTeamCheck then return false end
if not lpRole or lpRole == "Unknown" then return false end
if lpRole == "Killer" then return enemyRole == "Killer"
elseif lpRole == "Vigilante" or lpRole == "Detective" then
return enemyRole == "Vigilante" or enemyRole == "Detective" or enemyRole == "Bystander?"
elseif lpRole == "Bystander" then
return enemyRole == "Bystander?" or enemyRole == "Vigilante" or enemyRole == "Detective"
end
return false
end
local rcParams = RaycastParams.new()
rcParams.FilterType = Enum.RaycastFilterType.Exclude
rcParams.IgnoreWater = true
local function isVisibleHead(headPos, char)
if LP.Character then rcParams.FilterDescendantsInstances = { LP.Character, Camera } end
local hit = workspace:Raycast(Camera.CFrame.Position, headPos - Camera.CFrame.Position, rcParams)
if not hit then return true end
local p = hit.Instance
while p and p ~= workspace do
if p == char or p:FindFirstChildOfClass("Humanoid") then return true end
p = p.Parent
end
return false
end
local function eachEnemy()
local list = {}
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LP then
local char = plr.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
local head = char:FindFirstChild("Head")
if hum and head and hum.Health > 0 then
local ok = true
if cfg.SA_OnlyIsPlayer then
local f = char:FindFirstChild("IsInfactAPlayer")
if not f or not f.Value then ok = false end
end
if ok then table.insert(list, { Player=plr, Character=char, Humanoid=hum, Head=head }) end
end
end
end
end
return list
end
local function getTarget()
local best, bestScore = nil, math.huge
local camCF = Camera.CFrame
local camPos, lookDir = camCF.Position, camCF.LookVector
local lpHrp = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
local lpRole = (cfg.SA_RoleTeamCheck or cfg.SA_TeamsCheck) and getLPRole() or "Unknown"
for _, e in ipairs(eachEnemy()) do
local headPos = e.Head.Position
local toHead = headPos - camPos
local mag = toHead.Magnitude
if mag > 0 then
local unit = toHead / mag
local skip = false
local enemyRole = inferRole(e.Player)
if isFriendly(e.Player, enemyRole, lpRole) then skip = true end
if not skip and cfg.SA_VisibleOnly then
local _, onScreen = Camera:WorldToScreenPoint(headPos)
if not onScreen then skip = true end
end
if not skip and cfg.SA_FovEnabled then
local a = math.deg(math.acos(math.clamp(lookDir:Dot(unit), -1, 1)))
if a > cfg.SA_FovDegrees then skip = true end
end
if not skip and cfg.SA_Wallcheck and not isVisibleHead(headPos, e.Character) then skip = true end
if not skip then
local hp = e.Character:FindFirstChild(cfg.SA_HitPart) or e.Head
local score
if cfg.SA_Scoring=="Crosshair" then score=math.acos(math.clamp(lookDir:Dot(unit),-1,1))
elseif cfg.SA_Scoring=="3D" then score=lpHrp and (lpHrp.Position-headPos).Magnitude or mag
else score=e.Humanoid.Health end
if score < bestScore then
bestScore = score
best = { Player=e.Player, Character=e.Character, Humanoid=e.Humanoid, Head=e.Head, HitPart=hp }
end
end
end
end
return best
end
local function resolveTool()
local char = LP.Character
if not char then return end
for _, c in ipairs(char:GetChildren()) do
if c:IsA("Tool") and c.Name ~= "Hands" then return c end
end
end
local function fireInflict(t, tool)
if not t or not tool then return end
local hp = t.HitPart
inflict:FireServer(tool, t.Humanoid, hp, workspace:GetServerTimeNow(),
{ pos=hp.Position, size=hp.Size })
end
local lmbConn = UIS.InputBegan:Connect(function(input, gpe)
if gpe or not cfg.SA_Enabled then return end
if input.UserInputType ~= Enum.UserInputType.MouseButton1 then return end
if UIS:GetFocusedTextBox() then return end
if os.clock() - cfg.SA_LastFire < cfg.SA_MinInterval then return end
local t = getTarget()
if not t then return end
local tool = resolveTool()
if not tool then return end
cfg.SA_LastFire = os.clock()
fireInflict(t, tool)
end)
local origFireServer, hookOk = nil, false
if typeof(hookfunction)=="function" and typeof(newcclosure)=="function" then
local hookedSelf = inflict
pcall(function()
origFireServer = hookfunction(inflict.FireServer, newcclosure(function(self, ...)
if cfg.SA_Enabled and self == hookedSelf then
local t = getTarget()
if t then
local a, b, c, d, e = ...
return origFireServer(self, a, t.Humanoid, t.HitPart, d,
{ pos=t.HitPart.Position, size=t.HitPart.Size })
end
end
return origFireServer(self, ...)
end))
hookOk = origFireServer ~= nil
end)
end
local highlights, hbAdorns, toolGuis, charConns = {}, {}, {}, {}
local function clearChamFor(plr)
local h = highlights[plr]
if h then h:Destroy(); highlights[plr] = nil end
end
local function clearHbFor(char)
local list = hbAdorns[char]
if list then for _, a in ipairs(list) do a:Destroy() end; hbAdorns[char] = nil end
end
local function clearToolFor(plr)
local g = toolGuis[plr]
if g then g:Destroy(); toolGuis[plr] = nil end
end
local function applyCham(plr)
if (plr == LP) and not cfg.CH_ShowSelf then return end
clearChamFor(plr)
if not cfg.CH_Enabled then return end
local char = plr.Character
if not char then return end
local color = colorForPlayer(plr)
local h = Instance.new("Highlight")
h.Name = "BD_CHAM"
h.Adornee = char
h.FillColor = color
h.OutlineColor = color
h.FillTransparency = cfg.CH_FillTransparency
h.OutlineTransparency = cfg.CH_OutlineTransparency
h.DepthMode = cfg.CH_ThroughWalls and Enum.HighlightDepthMode.AlwaysOnTop or Enum.HighlightDepthMode.Occluded
h.Parent = char
highlights[plr] = h
end
local function applyHb(char)
clearHbFor(char)
if not cfg.HB_Enabled or not char then return end
local list = {}
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") and part.Name ~= "PeePee" and part.Name ~= "HumanoidRootPart" then
local box = Instance.new("BoxHandleAdornment")
box.Name = "BD_HB"
box.Adornee = part
box.Size = part.Size
box.Color3 = cfg.HB_Color
box.Transparency = cfg.HB_Transparency
box.AlwaysOnTop = true
box.ZIndex = 5
box.Parent = part
table.insert(list, box)
end
end
hbAdorns[char] = list
end
local function applyTool(plr)
clearToolFor(plr)
if not cfg.TE_Enabled or plr == LP then return end
local char = plr.Character
local head = char and char:FindFirstChild("Head")
if not head then return end
local bg = Instance.new("BillboardGui")
bg.Name = "BD_TE"
bg.Adornee = head
bg.Size = UDim2.new(0, 220, 0, 22)
bg.StudsOffset = Vector3.new(0, 2.8, 0)
bg.AlwaysOnTop = true
bg.MaxDistance = 1500
bg.Parent = char
local lbl = Instance.new("TextLabel")
lbl.BackgroundTransparency = 1
lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.TextColor3 = cfg.TE_Color
lbl.Font = Enum.Font.RobotoMono
lbl.TextSize = 12
lbl.TextScaled = false
lbl.TextStrokeTransparency = 0.4
lbl.TextStrokeColor3 = Color3.new(0,0,0)
lbl.Text = "..."
lbl.Parent = bg
toolGuis[plr] = bg
end
local function refreshAll()
for _, p in ipairs(Players:GetPlayers()) do
applyCham(p)
if p.Character then applyHb(p.Character) end
applyTool(p)
end
end
local function bindPlayer(plr)
if charConns[plr] then charConns[plr]:Disconnect() end
charConns[plr] = plr.CharacterAdded:Connect(function()
task.wait(0.2)
applyCham(plr); if plr.Character then applyHb(plr.Character) end; applyTool(plr)
end)
applyCham(plr)
if plr.Character then applyHb(plr.Character) end
applyTool(plr)
end
for _, p in ipairs(Players:GetPlayers()) do bindPlayer(p) end
local paConn = Players.PlayerAdded:Connect(bindPlayer)
local prConn = Players.PlayerRemoving:Connect(function(plr)
clearChamFor(plr); clearToolFor(plr)
if plr.Character then clearHbFor(plr.Character) end
if charConns[plr] then charConns[plr]:Disconnect(); charConns[plr] = nil end
end)
local existingBloom = Lighting:FindFirstChild("BD_BLOOM")
if existingBloom then existingBloom:Destroy() end
local bloom = Instance.new("BloomEffect")
bloom.Name = "BD_BLOOM"
bloom.Intensity = cfg.BL_Intensity
bloom.Threshold = cfg.BL_Threshold
bloom.Size = cfg.BL_Size
bloom.Parent = Lighting
local Drawing = Drawing or _G.Drawing
local drawingOk = typeof(Drawing) == "table" and typeof(Drawing.new) == "function"
local lockRing, watermark
if drawingOk then
lockRing = Drawing.new("Circle")
lockRing.Visible = false; lockRing.NumSides = 32
lockRing.Thickness = cfg.TL_Thickness; lockRing.Color = cfg.TL_Color
lockRing.Transparency = 0.85; lockRing.Filled = false
watermark = Drawing.new("Text")
watermark.Text = "BDHUB BY RING0"; watermark.Size = 14
watermark.Color = ACCENT; watermark.Outline = true
watermark.OutlineColor = Color3.new(0,0,0); watermark.Center = false
watermark.Visible = cfg.WM_Enabled; watermark.Position = Vector2.new(10, 10)
watermark.Font = 4
end
local pulseConn = RunService.Heartbeat:Connect(function()
if cfg.CH_Enabled and cfg.CH_Pulse then
local s = (math.sin(os.clock() * cfg.CH_PulseSpeed) + 1) * 0.5
local fillT = math.clamp(cfg.CH_FillTransparency + (s - 0.5) * cfg.CH_PulseDepth, 0, 1)
local intensity = cfg.BL_Intensity * (1 + (s - 0.5) * cfg.CH_PulseDepth)
for _, h in pairs(highlights) do if h then h.FillTransparency = fillT end end
if bloom then bloom.Intensity = intensity end
end
end)
local lastChamRefresh = 0
local chamRefreshConn = RunService.Heartbeat:Connect(function()
if not cfg.CH_Enabled then return end
if os.clock() - lastChamRefresh < 0.2 then return end
lastChamRefresh = os.clock()
for plr, h in pairs(highlights) do
if h and plr and plr.Parent then
local c = colorForPlayer(plr)
h.FillColor = c
h.OutlineColor = c
end
end
end)
local lastToolUpdate = 0
local toolUpdateConn = RunService.Heartbeat:Connect(function()
if os.clock() - lastToolUpdate < 0.2 then return end
lastToolUpdate = os.clock()
local lpHrp = LP.Character and LP.Character:FindFirstChild("HumanoidRootPart")
for plr, bg in pairs(toolGuis) do
local char = plr.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not (char and hum and hrp) then bg.Enabled = false; continue end
bg.Enabled = cfg.TE_Enabled
local tool
for _, c in ipairs(char:GetChildren()) do
if c:IsA("Tool") and c.Name ~= "Hands" then tool = c; break end
end
local toolName = tool and tool.Name or "Hands"
local distText = ""
if cfg.TE_Distance and lpHrp then
distText = string.format(" %dm", math.floor((lpHrp.Position - hrp.Position).Magnitude))
end
local roleText = ""
local teamText = ""
local color = cfg.TE_Color
if cfg.TE_ShowRole then
local label = getDisplayLabel(plr)
roleText = " " .. label
if cfg.TE_ColorByRole then color = getDisplayColor(plr, cfg.TE_Color) end
end
if cfg.TE_ShowTeam and plr.Team and not teamsActive() then
teamText = " " .. plr.Team.Name
end
local lbl = bg:FindFirstChildOfClass("TextLabel")
if lbl then
lbl.Text = string.format("%s%s%s%s%s", plr.Name, roleText, teamText,
tool and (" " .. toolName) or "", distText)
lbl.TextColor3 = color
end
end
end)
local hbResizeConn = RunService.Heartbeat:Connect(function()
if not cfg.HB_Enabled then return end
for _, list in pairs(hbAdorns) do
for _, a in ipairs(list) do
if a.Adornee then a.Color3 = cfg.HB_Color; a.Transparency = cfg.HB_Transparency end
end
end
end)
local drawConn
if drawingOk then
drawConn = RunService.RenderStepped:Connect(function()
local viewport = Camera.ViewportSize
local tgt = getTarget()
if cfg.TL_Enabled and tgt then
local sp, onScr = Camera:WorldToScreenPoint(tgt.HitPart.Position)
if onScr then
lockRing.Position = Vector2.new(sp.X, sp.Y)
lockRing.Radius = cfg.TL_Radius
lockRing.Color = cfg.TL_Color
lockRing.Thickness = cfg.TL_Thickness
lockRing.Visible = true
else lockRing.Visible = false end
else lockRing.Visible = false end
if watermark then
watermark.Visible = cfg.WM_Enabled
if cfg.WM_Enabled then
local lpRole = getLPRole()
local lpTeam = LP.Team and LP.Team.Name or "-"
watermark.Text = string.format("BDHUB BY RING0 %s %s hook %s%s",
lpRole, lpTeam, hookOk and "" or "",
tgt and (" " .. tgt.Player.Name) or "")
end
end
end)
end
local droppedTracked = {}
local function clearDropped(tool)
local rec = droppedTracked[tool]
if rec then
if rec.hl then pcall(function() rec.hl:Destroy() end) end
if rec.bg then pcall(function() rec.bg:Destroy() end) end
droppedTracked[tool] = nil
end
end
local function isDropped(tool)
local p = tool.Parent
while p and p ~= game do
if p:IsA("Player") then return false end
if p:IsA("Backpack") then return false end
if p:IsA("Model") then
local hum = p:FindFirstChildOfClass("Humanoid")
if hum then
if hum.Health > 0 then return false end
return true
end
end
p = p.Parent
end
return true
end
local function applyDropped(tool, role)
clearDropped(tool)
local color = ROLE_COLORS[role]
if not color then return end
local adornee = tool:FindFirstChildWhichIsA("BasePart")
if not adornee then return end
local hl = Instance.new("Highlight")
hl.Name = "BD_DROP"
hl.Adornee = tool
hl.FillColor = color; hl.OutlineColor = color
hl.FillTransparency = 0.4; hl.OutlineTransparency = 0
hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
hl.Parent = tool
local bg = Instance.new("BillboardGui")
bg.Name = "BD_DROP_BG"; bg.Adornee = adornee
bg.Size = UDim2.new(0, 200, 0, 24)
bg.StudsOffset = Vector3.new(0, 1.8, 0)
bg.AlwaysOnTop = true; bg.MaxDistance = 2000
bg.Parent = tool
local lbl = Instance.new("TextLabel")
lbl.BackgroundTransparency = 1; lbl.Size = UDim2.new(1, 0, 1, 0)
lbl.TextColor3 = color; lbl.Font = Enum.Font.RobotoMono
lbl.TextSize = 12; lbl.TextStrokeTransparency = 0.4
lbl.TextStrokeColor3 = Color3.new(0,0,0)
lbl.Text = string.format("%s %s", role, tool.Name)
lbl.Parent = bg
droppedTracked[tool] = { hl = hl, bg = bg, role = role }
end
local function checkDropped(tool)
if not tool:IsA("Tool") then return end
if not cfg.DR_Enabled then return end
local role
if killerSet[tool.Name] then role = "Killer"
elseif vigSet[tool.Name] then role = "Vigilante" end
if not role then return end
if isDropped(tool) then
if not droppedTracked[tool] or droppedTracked[tool].role ~= role then
applyDropped(tool, role)
end
else clearDropped(tool) end
end
local function scanDropped()
for _, d in ipairs(workspace:GetDescendants()) do
if d:IsA("Tool") then checkDropped(d) end
end
end
cfg.DR_Enabled = true
scanDropped()
local descAddedConn = workspace.DescendantAdded:Connect(function(d)
if d:IsA("Tool") then task.wait(0.15); checkDropped(d) end
end)
local descRemovedConn = workspace.DescendantRemoving:Connect(function(d)
if d:IsA("Tool") then clearDropped(d) end
end)
local lastDropScan = 0
local dropRescanConn = RunService.Heartbeat:Connect(function()
if os.clock() - lastDropScan < 2.0 then return end
lastDropScan = os.clock()
for tool in pairs(droppedTracked) do
if not tool.Parent or not isDropped(tool) then clearDropped(tool) end
end
end)
local gfxOriginalLighting, gfxOriginalParts, gfxEffects, gfxSky = {}, {}, {}, nil
local gfxChildAddedConn, gfxSkyWatcherConn
local function gfxSaveL(prop) if gfxOriginalLighting[prop] == nil then gfxOriginalLighting[prop] = Lighting[prop] end end
local function gfxRestoreLighting()
for k, v in pairs(gfxOriginalLighting) do pcall(function() Lighting[k] = v end) end
gfxOriginalLighting = {}
end
local function gfxClearEffects()
for _, e in ipairs(gfxEffects) do pcall(function() e:Destroy() end) end
gfxEffects = {}
if gfxSky then pcall(function() gfxSky:Destroy() end); gfxSky = nil end
end
local function gfxAddEffect(class, name, props)
local ex = Lighting:FindFirstChild(name); if ex then ex:Destroy() end
local e = Instance.new(class)
e.Name = name
for k, v in pairs(props) do e[k] = v end
e.Parent = Lighting
table.insert(gfxEffects, e)
return e
end
local function gfxApplyLighting()
if not cfg.GFX_Lighting then return end
gfxSaveL("ClockTime"); gfxSaveL("Brightness"); gfxSaveL("ExposureCompensation")
gfxSaveL("Ambient"); gfxSaveL("OutdoorAmbient"); gfxSaveL("GlobalShadows")
gfxSaveL("EnvironmentSpecularScale"); gfxSaveL("EnvironmentDiffuseScale")
Lighting.ClockTime = cfg.GFX_ClockTime
Lighting.Brightness = cfg.GFX_Brightness
Lighting.ExposureCompensation = cfg.GFX_Exposure
Lighting.Ambient = cfg.GFX_Ambient
Lighting.OutdoorAmbient = cfg.GFX_OutdoorAmbient
Lighting.GlobalShadows = true
Lighting.EnvironmentSpecularScale = cfg.GFX_SpecScale
Lighting.EnvironmentDiffuseScale = cfg.GFX_DiffScale
end
local function gfxNukeOtherSkies()
for _, c in ipairs(Lighting:GetChildren()) do
if c:IsA("Sky") and c.Name ~= "BD_GFX_SKY" then pcall(function() c:Destroy() end) end
end
end
local function gfxApplySkybox()
if gfxSky then pcall(function() gfxSky:Destroy() end); gfxSky = nil end
if gfxSkyWatcherConn then gfxSkyWatcherConn:Disconnect(); gfxSkyWatcherConn = nil end
if not cfg.GFX_Skybox then return end
gfxNukeOtherSkies()
local sky = Instance.new("Sky")
sky.Name = "BD_GFX_SKY"
sky.SkyboxBk = "rbxassetid://159454275"
sky.SkyboxDn = "rbxassetid://159454279"
sky.SkyboxFt = "rbxassetid://159454286"
sky.SkyboxLf = "rbxassetid://159454291"
sky.SkyboxRt = "rbxassetid://159454293"
sky.SkyboxUp = "rbxassetid://159454296"
sky.StarCount = 3000
sky.CelestialBodiesShown = true
sky.SunAngularSize = 11
sky.MoonAngularSize = 11
sky.Parent = Lighting
gfxSky = sky
gfxSkyWatcherConn = Lighting.ChildAdded:Connect(function(c)
if c:IsA("Sky") and c.Name ~= "BD_GFX_SKY" then
task.wait(0.05); pcall(function() c:Destroy() end)
end
end)
end
local function gfxApplyEffects()
gfxClearEffects()
gfxApplySkybox()
if cfg.GFX_CC then
gfxAddEffect("ColorCorrectionEffect", "BD_GFX_CC", {
Saturation = cfg.GFX_Saturation, Contrast = cfg.GFX_Contrast, Brightness = cfg.GFX_CCBrightness,
})
end
if cfg.GFX_Bloom then
gfxAddEffect("BloomEffect", "BD_GFX_BLOOM", {
Intensity = cfg.GFX_BloomIntensity, Threshold = cfg.GFX_BloomThreshold, Size = cfg.GFX_BloomSize,
})
end
if cfg.GFX_SunRays then
gfxAddEffect("SunRaysEffect", "BD_GFX_SUN", {
Intensity = cfg.GFX_SunIntensity, Spread = cfg.GFX_SunSpread,
})
end
if cfg.GFX_DOF then
gfxAddEffect("DepthOfFieldEffect", "BD_GFX_DOF", {
FocusDistance = cfg.GFX_DOFFocus, InFocusRadius = cfg.GFX_DOFRadius,
FarIntensity = cfg.GFX_DOFFar, NearIntensity = 0,
})
end
end
local function gfxIsPartIgnored(p)
local par = p.Parent
while par and par ~= game do
if par:FindFirstChildOfClass("Humanoid") then return true end
if par:IsA("Tool") then return true end
if par == Lighting then return true end
par = par.Parent
end
return false
end
local function gfxMutatePart(p)
if gfxIsPartIgnored(p) then return end
local sz = p.Size.Magnitude
if cfg.GFX_XRay and p.Transparency < 0.4 and sz >= cfg.GFX_XRayMinSize then
if not gfxOriginalParts[p] then gfxOriginalParts[p] = { t = p.Transparency, r = p.Reflectance } end
p.Transparency = math.max(p.Transparency, cfg.GFX_XRayAmount)
end
if cfg.GFX_Shiny and (p.Material == Enum.Material.Plastic or p.Material == Enum.Material.SmoothPlastic or p.Material == Enum.Material.Metal) then
if not gfxOriginalParts[p] then gfxOriginalParts[p] = { t = p.Transparency, r = p.Reflectance } end
p.Reflectance = math.max(p.Reflectance, cfg.GFX_ShinyAmount)
end
end
local function gfxScanOnce()
if not (cfg.GFX_XRay or cfg.GFX_Shiny) then return end
for _, p in ipairs(workspace:GetDescendants()) do
if p:IsA("BasePart") and not p:IsA("Terrain") then gfxMutatePart(p) end
end
end
local function gfxRestoreParts()
for p, orig in pairs(gfxOriginalParts) do
if p.Parent then pcall(function() p.Transparency = orig.t; p.Reflectance = orig.r end) end
end
gfxOriginalParts = {}
end
local function gfxReapplyParts()
gfxRestoreParts()
gfxScanOnce()
end
gfxApplyLighting()
gfxApplyEffects()
gfxScanOnce()
gfxChildAddedConn = workspace.DescendantAdded:Connect(function(d)
if d:IsA("BasePart") and not d:IsA("Terrain") then task.wait(0.05); gfxMutatePart(d) end
end)
local wpOrigMat, wpOrigTrans, wpTrackedParts = {}, {}, {}
local function wpRestorePart(p)
if not p then return end
if wpOrigTrans[p] ~= nil then pcall(function() p.Transparency = wpOrigTrans[p] end); wpOrigTrans[p] = nil end
if wpOrigMat[p] ~= nil then pcall(function() p.Material = wpOrigMat[p] end); wpOrigMat[p] = nil end
wpTrackedParts[p] = nil
end
local function wpRestoreAll()
for p in pairs(wpTrackedParts) do wpRestorePart(p) end
end
local function wpGetEquippedTool()
local char = LP.Character
if not char then return nil end
for _, c in ipairs(char:GetChildren()) do
if c:IsA("Tool") then return c end
end
return nil
end
local function wpApplyToPart(p, newMat, trans)
if wpOrigMat[p] == nil then wpOrigMat[p] = p.Material end
if wpOrigTrans[p] == nil then wpOrigTrans[p] = p.Transparency end
wpTrackedParts[p] = true
if newMat then pcall(function() p.Material = newMat end) end
pcall(function() p.Transparency = math.max(wpOrigTrans[p], trans) end)
end
local function wpApplyToTool(tool, newMat, trans)
if not tool then return end
for _, d in ipairs(tool:GetDescendants()) do
if d:IsA("BasePart") then wpApplyToPart(d, newMat, trans) end
end
end
local wpHeartbeat = RunService.Heartbeat:Connect(function()
if not cfg.WP_Enabled then
if next(wpTrackedParts) then wpRestoreAll() end
return
end
local tool = wpGetEquippedTool()
if not tool then
if next(wpTrackedParts) then wpRestoreAll() end
return
end
for p in pairs(wpTrackedParts) do
if not p.Parent or not p:IsDescendantOf(tool) then wpRestorePart(p) end
end
local newMat = (cfg.WP_Material ~= "None") and Enum.Material[cfg.WP_Material] or nil
wpApplyToTool(tool, newMat, cfg.WP_Transparency)
end)
local antiAimConn = RunService.Heartbeat:Connect(function(dt)
if not cfg.AA_Enabled then return end
local char = LP.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
if cfg.AA_Mode == "Spin" then
hrp.CFrame = hrp.CFrame * CFrame.Angles(0, math.rad(cfg.AA_SpinSpeed * dt), 0)
elseif cfg.AA_Mode == "Backward" then
local p = hrp.Position
hrp.CFrame = CFrame.new(p, p + Vector3.new(-Camera.CFrame.LookVector.X, 0, -Camera.CFrame.LookVector.Z))
elseif cfg.AA_Mode == "Jitter" then
hrp.CFrame = hrp.CFrame * CFrame.Angles(0, math.rad(math.random(-180, 180)), 0)
end
end)
local STR = {
tab_aim="", tab_visuals="VISUAL", tab_esp="", tab_gfx="", tab_misc="MISC",
gb_silent="SILENT AIM", gb_filters="",
gb_chams="", gb_effects="EFFECTS",
gb_toolesp="TOOL ESP", gb_hitboxes="", gb_dropped="DROPPED WEAPONS",
gb_world="", gb_postfx="POST FX", gb_wallhack="",
gb_antiaim="ANTI-AIM", gb_system="",
kill_button="KILL ALL ",
}
local function T(key) return STR[key] or key end
local Library
pcall(function() Library = loadstring(game:HttpGet("https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/Library.lua"))() end)
if Library then
local Window = Library:CreateWindow({
Title = "BDHUB BY RING0",
Center = true,
AutoShow = true,
TabPadding = 8,
MenuFadeTime = 0.2,
})
local Tabs = {
Aim = Window:AddTab(T("tab_aim")),
Visuals = Window:AddTab(T("tab_visuals")),
Esp = Window:AddTab(T("tab_esp")),
Gfx = Window:AddTab(T("tab_gfx")),
Misc = Window:AddTab(T("tab_misc")),
}
local SilentBox = Tabs.Aim:AddLeftGroupbox(T("gb_silent"))
SilentBox:AddToggle("SAEnabled", {Text="Silent Aim ", Default=cfg.SA_Enabled, Callback=function(v) cfg.SA_Enabled=v end})
SilentBox:AddDropdown("SAScoring", {Values={"Crosshair","3D","LowHP"}, Default=cfg.SA_Scoring, Text="Scoring", Callback=function(v) cfg.SA_Scoring=v end})
SilentBox:AddDropdown("SAHitPart", {Values={"Head","Torso","HumanoidRootPart"}, Default=cfg.SA_HitPart, Text="Hit part", Callback=function(v) cfg.SA_HitPart=v end})
SilentBox:AddToggle("SAFovEnabled", {Text="FOV cone", Default=cfg.SA_FovEnabled, Callback=function(v) cfg.SA_FovEnabled=v end})
SilentBox:AddSlider("SAFovDeg", {Text="FOV degrees", Default=cfg.SA_FovDegrees, Min=10, Max=180, Rounding=0, Callback=function(v) cfg.SA_FovDegrees=v end})
SilentBox:AddSlider("SAMinInt", {Text="Fire interval", Default=cfg.SA_MinInterval, Min=0.05, Max=1.0, Rounding=2, Suffix="s", Callback=function(v) cfg.SA_MinInterval=v end})
SilentBox:AddToggle("SASkipNPC", {Text="Skip NPCs", Default=cfg.SA_OnlyIsPlayer, Callback=function(v) cfg.SA_OnlyIsPlayer=v end})
local FiltersBox = Tabs.Aim:AddRightGroupbox(T("gb_filters"))
FiltersBox:AddToggle("SARoleCheck", {Text="Role team check", Default=cfg.SA_RoleTeamCheck, Callback=function(v) cfg.SA_RoleTeamCheck=v end})
FiltersBox:AddToggle("SATeamsCheck", {Text="Teams team check", Default=cfg.SA_TeamsCheck, Callback=function(v) cfg.SA_TeamsCheck=v end})
FiltersBox:AddToggle("SAWallcheck", {Text="Wallcheck", Default=cfg.SA_Wallcheck, Callback=function(v) cfg.SA_Wallcheck=v end})
FiltersBox:AddToggle("SAVisibleOnly", {Text="Visible only", Default=cfg.SA_VisibleOnly, Callback=function(v) cfg.SA_VisibleOnly=v end})
FiltersBox:AddDivider()
FiltersBox:AddButton({Text="Reset role cache", Func=function() resetRoleCache() end})
local ChamsBox = Tabs.Visuals:AddLeftGroupbox(T("gb_chams"))
ChamsBox:AddToggle("CHEnabled", {Text="Enabled", Default=cfg.CH_Enabled, Callback=function(v) cfg.CH_Enabled=v; refreshAll() end})
ChamsBox:AddToggle("CHColorByTeam", {Text="Color by team", Default=cfg.CH_ColorByTeam, Callback=function(v) cfg.CH_ColorByTeam=v end})
ChamsBox:AddToggle("CHColorByRole", {Text="Color by role", Default=cfg.CH_ColorByRole, Callback=function(v) cfg.CH_ColorByRole=v end})
ChamsBox:AddToggle("CHThroughWalls", {Text="Through walls", Default=cfg.CH_ThroughWalls, Callback=function(v) cfg.CH_ThroughWalls=v; for _,h in pairs(highlights) do h.DepthMode = v and Enum.HighlightDepthMode.AlwaysOnTop or Enum.HighlightDepthMode.Occluded end end})
ChamsBox:AddToggle("CHShowSelf", {Text="Show self", Default=cfg.CH_ShowSelf, Callback=function(v) cfg.CH_ShowSelf=v; refreshAll() end})
ChamsBox:AddToggle("CHPulse", {Text="Pulse", Default=cfg.CH_Pulse, Callback=function(v) cfg.CH_Pulse=v end})
ChamsBox:AddSlider("CHFillT", {Text="Fill transparency", Default=cfg.CH_FillTransparency, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.CH_FillTransparency=v end})
ChamsBox:AddSlider("CHOutT", {Text="Outline transparency", Default=cfg.CH_OutlineTransparency, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.CH_OutlineTransparency=v; for _,h in pairs(highlights) do h.OutlineTransparency=v end end})
ChamsBox:AddLabel("Fallback color"):AddColorPicker("CHColor", {Default=cfg.CH_Color, Title="Cham color", Callback=function(c) cfg.CH_Color=c end})
local EffBox = Tabs.Visuals:AddRightGroupbox(T("gb_effects"))
EffBox:AddDivider()
EffBox:AddDivider()
EffBox:AddToggle("TLEnabled", {Text="Lock ring", Default=cfg.TL_Enabled, Callback=function(v) cfg.TL_Enabled=v end})
EffBox:AddSlider("TLRadius", {Text="Lock ring radius", Default=cfg.TL_Radius, Min=6, Max=40, Rounding=0, Callback=function(v) cfg.TL_Radius=v end})
EffBox:AddLabel("Lock ring color"):AddColorPicker("TLColor", {Default=cfg.TL_Color, Title="Lock ring color", Callback=function(c) cfg.TL_Color=c end})
EffBox:AddDivider()
EffBox:AddSlider("BLI", {Text="Bloom intensity", Default=cfg.BL_Intensity, Min=0, Max=5, Rounding=2, Callback=function(v) cfg.BL_Intensity=v; if bloom then bloom.Intensity=v end end})
EffBox:AddSlider("BLT", {Text="Bloom threshold", Default=cfg.BL_Threshold, Min=0, Max=5, Rounding=2, Callback=function(v) cfg.BL_Threshold=v; if bloom then bloom.Threshold=v end end})
local ToolBox = Tabs.Esp:AddLeftGroupbox(T("gb_toolesp"))
ToolBox:AddToggle("TEEnabled", {Text="Enabled", Default=cfg.TE_Enabled, Callback=function(v) cfg.TE_Enabled=v; if v then refreshAll() else for _,p in ipairs(Players:GetPlayers()) do clearToolFor(p) end end end})
ToolBox:AddToggle("TEShowRole", {Text="Show role", Default=cfg.TE_ShowRole, Callback=function(v) cfg.TE_ShowRole=v end})
ToolBox:AddToggle("TEShowTeam", {Text="Show team", Default=cfg.TE_ShowTeam, Callback=function(v) cfg.TE_ShowTeam=v end})
ToolBox:AddToggle("TEColorByRole", {Text="Color by role/team", Default=cfg.TE_ColorByRole, Callback=function(v) cfg.TE_ColorByRole=v end})
ToolBox:AddToggle("TEDistance", {Text="Show distance", Default=cfg.TE_Distance, Callback=function(v) cfg.TE_Distance=v end})
ToolBox:AddLabel("Text color"):AddColorPicker("TEColor", {Default=cfg.TE_Color, Title="Text color", Callback=function(c) cfg.TE_Color=c end})
local HBBox = Tabs.Esp:AddRightGroupbox(T("gb_hitboxes"))
HBBox:AddToggle("HBEnabled", {Text="Show hitboxes", Default=cfg.HB_Enabled, Callback=function(v) cfg.HB_Enabled=v; for _,p in ipairs(Players:GetPlayers()) do if p.Character then if v then applyHb(p.Character) else clearHbFor(p.Character) end end end end})
HBBox:AddSlider("HBT", {Text="Transparency", Default=cfg.HB_Transparency, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.HB_Transparency=v end})
HBBox:AddLabel("Hitbox color"):AddColorPicker("HBColor", {Default=cfg.HB_Color, Title="Hitbox color", Callback=function(c) cfg.HB_Color=c end})
local DropBox = Tabs.Esp:AddRightGroupbox(T("gb_dropped"))
DropBox:AddToggle("DREnabled", {Text="Highlight dropped guns", Default=cfg.DR_Enabled, Callback=function(v) cfg.DR_Enabled=v; if not v then for t in pairs(droppedTracked) do clearDropped(t) end else scanDropped() end end})
local WorldBox = Tabs.Gfx:AddLeftGroupbox(T("gb_world"))
WorldBox:AddToggle("GFXL", {Text="Lighting overrides", Default=cfg.GFX_Lighting, Callback=function(v) cfg.GFX_Lighting=v; if v then gfxApplyLighting() else gfxRestoreLighting() end end})
WorldBox:AddToggle("GFXSky", {Text="Galaxy skybox", Default=cfg.GFX_Skybox, Callback=function(v) cfg.GFX_Skybox=v; gfxApplySkybox() end})
WorldBox:AddSlider("GFXClock", {Text="Clock time", Default=cfg.GFX_ClockTime, Min=0, Max=24, Rounding=1, Callback=function(v) cfg.GFX_ClockTime=v; if cfg.GFX_Lighting then Lighting.ClockTime=v end end})
WorldBox:AddSlider("GFXBri", {Text="Brightness", Default=cfg.GFX_Brightness, Min=0, Max=8, Rounding=1, Callback=function(v) cfg.GFX_Brightness=v; if cfg.GFX_Lighting then Lighting.Brightness=v end end})
WorldBox:AddSlider("GFXExp", {Text="Exposure", Default=cfg.GFX_Exposure, Min=-3, Max=3, Rounding=2, Callback=function(v) cfg.GFX_Exposure=v; if cfg.GFX_Lighting then Lighting.ExposureCompensation=v end end})
WorldBox:AddSlider("GFXSpec", {Text="Specular", Default=cfg.GFX_SpecScale, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.GFX_SpecScale=v; if cfg.GFX_Lighting then Lighting.EnvironmentSpecularScale=v end end})
WorldBox:AddSlider("GFXDiff", {Text="Diffuse", Default=cfg.GFX_DiffScale, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.GFX_DiffScale=v; if cfg.GFX_Lighting then Lighting.EnvironmentDiffuseScale=v end end})
local PostBox = Tabs.Gfx:AddRightGroupbox(T("gb_postfx"))
PostBox:AddToggle("GFXCC", {Text="Color correction", Default=cfg.GFX_CC, Callback=function(v) cfg.GFX_CC=v; gfxApplyEffects() end})
PostBox:AddSlider("GFXSat", {Text="Saturation", Default=cfg.GFX_Saturation, Min=-1, Max=1, Rounding=2, Callback=function(v) cfg.GFX_Saturation=v; local e=Lighting:FindFirstChild("BD_GFX_CC"); if e then e.Saturation=v end end})
PostBox:AddSlider("GFXCon", {Text="Contrast", Default=cfg.GFX_Contrast, Min=-1, Max=1, Rounding=2, Callback=function(v) cfg.GFX_Contrast=v; local e=Lighting:FindFirstChild("BD_GFX_CC"); if e then e.Contrast=v end end})
PostBox:AddDivider()
PostBox:AddToggle("GFXBloom", {Text="Bloom", Default=cfg.GFX_Bloom, Callback=function(v) cfg.GFX_Bloom=v; gfxApplyEffects() end})
PostBox:AddSlider("GFXBloomI", {Text="Bloom intensity", Default=cfg.GFX_BloomIntensity, Min=0, Max=3, Rounding=2, Callback=function(v) cfg.GFX_BloomIntensity=v; local e=Lighting:FindFirstChild("BD_GFX_BLOOM"); if e then e.Intensity=v end end})
PostBox:AddToggle("GFXSun", {Text="Sun rays", Default=cfg.GFX_SunRays, Callback=function(v) cfg.GFX_SunRays=v; gfxApplyEffects() end})
PostBox:AddToggle("GFXDOF", {Text="Depth of field", Default=cfg.GFX_DOF, Callback=function(v) cfg.GFX_DOF=v; gfxApplyEffects() end})
local WallBox = Tabs.Gfx:AddRightGroupbox(T("gb_wallhack"))
WallBox:AddToggle("GFXXRay", {Text="X-ray walls (lag)", Default=cfg.GFX_XRay, Callback=function(v) cfg.GFX_XRay=v; gfxReapplyParts() end})
WallBox:AddSlider("GFXXRayA", {Text="X-ray transparency", Default=cfg.GFX_XRayAmount, Min=0, Max=0.95, Rounding=2, Callback=function(v) cfg.GFX_XRayAmount=v; if cfg.GFX_XRay then gfxReapplyParts() end end})
WallBox:AddSlider("GFXXRayMin", {Text="Min part size", Default=cfg.GFX_XRayMinSize, Min=1, Max=30, Rounding=0, Callback=function(v) cfg.GFX_XRayMinSize=v; if cfg.GFX_XRay then gfxReapplyParts() end end})
WallBox:AddToggle("GFXShiny", {Text="Shiny parts (lag)", Default=cfg.GFX_Shiny, Callback=function(v) cfg.GFX_Shiny=v; gfxReapplyParts() end})
WallBox:AddSlider("GFXShinyA", {Text="Reflectance", Default=cfg.GFX_ShinyAmount, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.GFX_ShinyAmount=v; if cfg.GFX_Shiny then gfxReapplyParts() end end})
WallBox:AddButton({Text="Rescan world", Func=function() gfxReapplyParts() end})
local AABox = Tabs.Misc:AddLeftGroupbox(T("gb_antiaim"))
AABox:AddToggle("AAEnabled", {Text="Enabled", Default=cfg.AA_Enabled, Callback=function(v) cfg.AA_Enabled=v end})
AABox:AddDropdown("AAMode", {Values={"Spin","Backward","Jitter"}, Default=cfg.AA_Mode, Text="Mode", Callback=function(v) cfg.AA_Mode=v end})
AABox:AddSlider("AASpeed", {Text="Spin speed", Default=cfg.AA_SpinSpeed, Min=60, Max=1800, Rounding=0, Callback=function(v) cfg.AA_SpinSpeed=v end})
local WPBox = Tabs.Visuals:AddLeftGroupbox("WEAPON ")
WPBox:AddToggle("WPEnabled", {Text="Enabled", Default=cfg.WP_Enabled, Callback=function(v) cfg.WP_Enabled=v end})
WPBox:AddSlider("WPT", {Text="Transparency", Default=cfg.WP_Transparency, Min=0, Max=1, Rounding=2, Callback=function(v) cfg.WP_Transparency=v end})
WPBox:AddDropdown("WPMat", {Values={"None","Plastic","SmoothPlastic","Neon","Glass","Metal","DiamondPlate","Ice","ForceField","Wood","Concrete","Cobblestone","Foil","Granite","Slate","Sand","Fabric","Marble","Grass","Brick","Pebble"}, Default=cfg.WP_Material, Text="Material", Callback=function(v) cfg.WP_Material=v end})
local SysBox = Tabs.Misc:AddRightGroupbox(T("gb_system"))
SysBox:AddToggle("WMEnabled", {Text="Watermark", Default=cfg.WM_Enabled, Callback=function(v) cfg.WM_Enabled=v end})
SysBox:AddDivider()
SysBox:AddButton({Text=T("kill_button"), Func=function() getgenv()._bdhub.kill() end})
end
local function kill()
if lmbConn then lmbConn:Disconnect() end
if pulseConn then pulseConn:Disconnect() end
if chamRefreshConn then chamRefreshConn:Disconnect() end
if toolUpdateConn then toolUpdateConn:Disconnect() end
if hbResizeConn then hbResizeConn:Disconnect() end
if drawConn then drawConn:Disconnect() end
if antiAimConn then antiAimConn:Disconnect() end
if wpHeartbeat then wpHeartbeat:Disconnect() end
wpRestoreAll()
if descAddedConn then descAddedConn:Disconnect() end
if descRemovedConn then descRemovedConn:Disconnect() end
if dropRescanConn then dropRescanConn:Disconnect() end
for tool in pairs(droppedTracked) do clearDropped(tool) end
if gfxChildAddedConn then gfxChildAddedConn:Disconnect() end
if gfxSkyWatcherConn then gfxSkyWatcherConn:Disconnect() end
gfxRestoreParts()
gfxRestoreLighting()
gfxClearEffects()
if paConn then paConn:Disconnect() end
if prConn then prConn:Disconnect() end
for _, c in pairs(charConns) do pcall(function() c:Disconnect() end) end
charConns = {}
if hookOk and origFireServer and typeof(hookfunction)=="function" then
pcall(function() hookfunction(inflict.FireServer, origFireServer) end)
end
for _, p in ipairs(Players:GetPlayers()) do
clearChamFor(p); clearToolFor(p)
if p.Character then clearHbFor(p.Character) end
end
if bloom then pcall(function() bloom:Destroy() end) end
if lockRing then pcall(function() lockRing:Remove() end) end
if watermark then pcall(function() watermark:Remove() end) end
if Library then pcall(function() Library:Unload() end) end
getgenv()._bdhub = nil
end
getgenv()._bdhub = { cfg=cfg, kill=kill, getTarget=getTarget, hookOk=hookOk, getLPRole=getLPRole, inferRole=inferRole, resetRoleCache=resetRoleCache }
설명
bdhub for blood debt. mostly just a silent aim and other things. uses LinoriaLib. **aim stuff** - silent aim (one toggle, does both lmb fire and the hook thing) - pick what to hit (head/torso/hrp) - pick how to score (crosshair, distance, lowest hp) - fov cone, wallcheck, only visible targets, dont shoot teammates - role/team filter so it skips your own side **visuals** - chams with adjustable transparency + outline - color by role (killer red, vig blue etc) or team - weapon material/transparency **esp** - floating labels above heads (name, role/team, weapon, distance) - hitboxes per limb if you want - highlights dropped killer/vig guns on the ground so you can grab them **graphics** - lighting, bloom, color, sunrays - custom skybox (galaxy) - xray + shiny(Wow) **misc** - antiaim - watermark - kill button **tuff features** - detects round restarts and refreshes roles automatically - shows team names in team modes. how to use: 1. execute 2. ui opens by itself, leftshift to hide 3. turn on silent aim 4. hold a real weapon (not hands) and play needs hookfunction + drawing api. blood debt only MIT License
댓글 (0)
- 첫 댓글을 작성하세요.
자주 묻는 질문
- Blood debt hub [OPEN SOURCE SILENT-AIM] 스크립트는 어떻게 사용하나요?
- 위의 스크립트 코드를 복사하고, Roblox 엑시큐터를 열어 붙여넣은 후, 게임 중에 실행을 누르세요. 스크립트가 실행되면 기능이 즉시 활성화됩니다.
- Blood debt hub [OPEN SOURCE SILENT-AIM] 스크립트는 무료인가요?
- 네. 이 스크립트는 무료로 복사하고 사용할 수 있습니다. 키 시스템을 사용하는 경우, 링크를 통해 무료로 키를 받으세요.
- Blood debt hub [OPEN SOURCE SILENT-AIM] 스크립트는 안전한가요?
- 전체 소스 코드가 이 페이지에 표시되어 실행 전에 정확히 무엇을 하는지 확인할 수 있습니다. 항상 신뢰할 수 있는 엑시큐터를 사용하고, 스크립트 사용은 Roblox 이용 약관에 위반되므로 자의적 위험으로 사용하세요.
- Blood debt hub [OPEN SOURCE SILENT-AIM]에 호환되는 엑시큐터는?
- 이 스크립트는 대부분의 인기 Roblox 엑시큐터에서 작동합니다. 기기에 맞는 신뢰할 수 있는 무료 또는 유료 엑시큐터를 찾으려면 엑시큐터 페이지를 확인하세요.