--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local Config = {
ESP_Enabled = true,
ESP_Boxes = true,
ESP_Names = true,
ESP_Distance = true,
ESP_Skeleton = true,
ESP_Weapons = false,
ESP_Health = true,
ESP_TeamCheck = true,
ESP_MaxDist = 2000,
ESP_Offscreen = true,
ESP_AimDir = true,
ESP_LookingAtYou = true,
ESP_FPV = true,
ESP_FPVPredict = true,
ESP_Tracers = false,
ESP_Velocity = false,
ESP_Sound = false,
ESP_Trails = false,
RADAR_Enabled = true,
RADAR_Size = 120,
RADAR_Circle = false,
AIM_Enabled = false,
AIM_FOV = 150,
AIM_Smooth = 15,
AIM_ShowFOV = true,
AIM_TeamCheck = true,
DESYNC_Enabled = false,
DESYNC_Amount = 2,
TRIGGER_Enabled = false,
TRIGGER_Delay = 50,
TRIGGER_TeamCheck = true,
SILENT_Enabled = false,
SILENT_FOV = 120,
SILENT_TeamCheck = true,
MenuOpen = true
}
local Tuning = {
TargetRefreshRate = 0.75,
VisibilityRefreshRate = 0.15,
WeaponRefreshRate = 2.0,
FPVRefreshRate = 1.0,
TeamRefreshRate = 5.0,
BoxWidthRatio = 0.6,
HealthBarWidth = 4,
HealthBarOffset = 6,
NameOffset = 18,
DistOffset = 4,
WeaponOffset = 8,
LookingOffset = 35,
OffscreenEdgeDist = 50,
OffscreenArrowSize = 12,
AimLineLength = 15,
LookingThreshold = 0.85,
SoundRippleMax = 15,
SoundRippleDuration = 1.0,
SoundRippleRadius = 35,
SoundMoveThreshold = 1.0,
TrailMaxPoints = 12,
TrailUpdateInterval = 0.2,
RadarRange = 150,
RadarDotSize = 5,
RadarArrowSize = 8,
FPVClusterDist = 100,
FPVGravity = 50,
FPVPredictTime = 3,
FPVPredictSteps = 30,
TriggerRadius = 50
}
local Colors = {
Enemy = Color3.fromRGB(255, 50, 50),
EnemyVisible = Color3.fromRGB(0, 255, 0),
Team = Color3.fromRGB(0, 150, 255),
Skeleton = Color3.fromRGB(255, 255, 255),
SkeletonVisible = Color3.fromRGB(0, 255, 0),
LookingAtYou = Color3.fromRGB(255, 255, 0),
AimDir = Color3.fromRGB(255, 150, 0),
Weapon = Color3.fromRGB(255, 200, 100),
FPV = Color3.fromRGB(255, 0, 255),
Tracer = Color3.fromRGB(255, 100, 100),
Sound = Color3.fromRGB(100, 200, 255),
Trail = Color3.fromRGB(255, 150, 50),
HealthHigh = Color3.fromRGB(0, 255, 0),
HealthMid = Color3.fromRGB(255, 255, 0),
HealthLow = Color3.fromRGB(255, 0, 0),
HealthBg = Color3.fromRGB(40, 40, 40),
RadarBg = Color3.fromRGB(20, 20, 20),
RadarBorder = Color3.fromRGB(255, 50, 50),
RadarYou = Color3.fromRGB(0, 255, 0),
RadarEnemy = Color3.fromRGB(255, 50, 50),
RadarTeam = Color3.fromRGB(0, 150, 255),
MenuBg = Color3.fromRGB(12, 12, 12),
MenuHighlight = Color3.fromRGB(255, 50, 50),
MenuOn = Color3.fromRGB(50, 255, 50),
MenuOff = Color3.fromRGB(80, 80, 80),
MenuText = Color3.fromRGB(150, 150, 150),
}
local Timers = {
lastTargetRefresh = 0,
lastVisRefresh = 0,
lastWeaponRefresh = 0,
lastFPVRefresh = 0,
lastTeamRefresh = 0,
warningEnd = 0
}
local Cache = {
targets = {},
teamStatus = {},
visibility = {},
weapons = {},
drones = {}
}
local Teams = {
sets = {
{colors = {{R=0.172549,G=0.192157,B=0.372549}, {R=0.454902,G=0.407843,B=0}}},
{colors = {{R=0.454902,G=0.454902,B=0.454902}}},
},
localSet = nil
}
local Bones = {{"Head","Torso"},{"Torso","Left Arm"},{"Torso","Right Arm"},{"Torso","Left Leg"},{"Torso","Right Leg"}}
local Connections = {}
local Unloaded = false
local Silent = { hooked = false, currentRoot = nil }
local Team = {}
function Team.colorMatch(c1, c2)
return math.abs(c1.R-c2.R) < 0.03 and math.abs(c1.G-c2.G) < 0.03 and math.abs(c1.B-c2.B) < 0.03
end
function Team.getArmColor(char)
local ok, c = pcall(function()
return char:FindFirstChild("Right Arm") and char["Right Arm"]:FindFirstChild("ArmBand") and char["Right Arm"].ArmBand.Color
end)
return ok and c
end
function Team.update()
if LocalPlayer.Character then
local col = Team.getArmColor(LocalPlayer.Character)
if col then
for _, set in pairs(Teams.sets) do
for _, tc in pairs(set.colors) do
if Team.colorMatch(col, tc) then Teams.localSet = set; return end
end
end
end
end
end
function Team.isTeammate(char)
if not Teams.localSet then return false end
local col = Team.getArmColor(char)
if not col then return false end
for _, tc in pairs(Teams.localSet.colors) do
if Team.colorMatch(col, tc) then return true end
end
return false
end
Connections.charAdded = LocalPlayer.CharacterAdded:Connect(function() task.delay(1, Team.update) end)
task.spawn(Team.update)
local Util = {}
function Util.isVisible(character)
if not character then return false end
local cam = workspace.CurrentCamera
if not cam then return false end
local origin = cam.CFrame.Position
local parts = {"Head", "Torso", "HumanoidRootPart"}
local rayParams = RaycastParams.new()
rayParams.FilterType = Enum.RaycastFilterType.Blacklist
local filter = {cam}
if LocalPlayer.Character then table.insert(filter, LocalPlayer.Character) end
table.insert(filter, character)
rayParams.FilterDescendantsInstances = filter
for _, partName in pairs(parts) do
local part = character:FindFirstChild(partName)
if part then
local dir = (part.Position - origin)
local result = workspace:Raycast(origin, dir.Unit * dir.Magnitude, rayParams)
if not result or (result.Position - part.Position).Magnitude < 5 then
return true
end
end
end
return false
end
function Util.isLookingAtYou(char)
if not LocalPlayer.Character then return false end
local myHead = LocalPlayer.Character:FindFirstChild("Head")
local head = char:FindFirstChild("Head")
if not myHead or not head then return false end
local toYou = (myHead.Position - head.Position).Unit
return toYou:Dot(head.CFrame.LookVector) > Tuning.LookingThreshold
end
function Util.getWeapon(char)
for _, child in pairs(char:GetChildren()) do
if child.Name == "ItemFolder" and child:IsA("Folder") then
local items = child:GetChildren()
if #items > 0 then return items[1].Name end
end
end
local charName = char.Name
for _, folder in pairs(workspace:GetChildren()) do
if folder:IsA("Folder") then
for _, sub in pairs(folder:GetChildren()) do
if sub:IsA("Folder") or sub:IsA("Model") then
local pf = sub:FindFirstChild(charName)
if pf then
local itemFolder = pf:FindFirstChild("ItemFolder")
if itemFolder and #itemFolder:GetChildren() > 0 then
return itemFolder:GetChildren()[1].Name
end
end
end
end
end
end
return nil
end
function Util.getName(char)
for _, p in pairs(Players:GetPlayers()) do
if p.Character == char then return p.Name end
end
return (not char.Name:match("^[Il]+")) and char.Name or "Player"
end
local Targets = {}
function Targets.refresh()
local new, newTeam = {}, {}
local myChar = LocalPlayer.Character
for _, obj in ipairs(workspace:GetDescendants()) do
if obj.Name == "HumanoidRootPart" and obj:IsA("BasePart") then
local parent = obj.Parent
if parent and parent ~= myChar and obj.Position.Y > -50 then
local hum = parent:FindFirstChild("Humanoid")
if hum and hum.Health > 0 then
new[obj] = parent
newTeam[obj] = Team.isTeammate(parent)
end
end
end
end
Cache.targets = new
Cache.teamStatus = newTeam
end
function Targets.refreshVisibility()
local count = 0
for root, char in pairs(Cache.targets) do
count = count + 1
if count > 20 then Cache.visibility[root] = false
else Cache.visibility[root] = Util.isVisible(char) end
end
end
function Targets.refreshWeapons()
for root, char in pairs(Cache.targets) do
Cache.weapons[root] = Util.getWeapon(char)
end
end
local ESP = {
cache = {},
velocityData = {}
}
function ESP.create()
return {
Box = {Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line")},
Name = Drawing.new("Text"),
Dist = Drawing.new("Text"),
Weapon = Drawing.new("Text"),
HealthBg = Drawing.new("Square"),
HealthBar = Drawing.new("Square"),
Skel = {Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line")},
Offscreen = Drawing.new("Triangle"),
AimLine = Drawing.new("Line"),
LookingText = Drawing.new("Text"),
Tracer = Drawing.new("Line"),
SilentText = Drawing.new("Text"),
VelLine = Drawing.new("Line"),
VelArrow = Drawing.new("Triangle"),
}
end
function ESP.setup(esp)
for _, l in pairs(esp.Box) do l.Thickness = 1 end
esp.Name.Size = 14; esp.Name.Font = Drawing.Fonts.Monospace; esp.Name.Center = true; esp.Name.Outline = true
esp.Dist.Size = 12; esp.Dist.Font = Drawing.Fonts.Monospace; esp.Dist.Center = true; esp.Dist.Outline = true
esp.Weapon.Size = 12; esp.Weapon.Font = Drawing.Fonts.Monospace; esp.Weapon.Outline = true
esp.HealthBg.Filled = true; esp.HealthBg.Color = Colors.HealthBg
esp.HealthBar.Filled = true
for _, l in pairs(esp.Skel) do l.Thickness = 1 end
esp.Offscreen.Filled = true; esp.Offscreen.Thickness = 2
esp.AimLine.Thickness = 2
esp.LookingText.Size = 14; esp.LookingText.Font = Drawing.Fonts.Monospace; esp.LookingText.Center = true; esp.LookingText.Outline = true
esp.Tracer.Thickness = 1; esp.Tracer.Color = Colors.Tracer
esp.SilentText.Size = 13; esp.SilentText.Font = Drawing.Fonts.Monospace; esp.SilentText.Center = true; esp.SilentText.Outline = true; esp.SilentText.Color = Color3.fromRGB(100, 200, 255)
esp.VelLine.Thickness = 2; esp.VelLine.Color = Color3.fromRGB(0, 255, 255)
esp.VelArrow.Filled = true; esp.VelArrow.Color = Color3.fromRGB(0, 255, 255)
end
function ESP.hide(esp)
for _, l in pairs(esp.Box) do l.Visible = false end
esp.Name.Visible = false; esp.Dist.Visible = false; esp.Weapon.Visible = false
esp.HealthBg.Visible = false; esp.HealthBar.Visible = false
for _, l in pairs(esp.Skel) do l.Visible = false end
esp.Offscreen.Visible = false; esp.AimLine.Visible = false; esp.LookingText.Visible = false
esp.Tracer.Visible = false; esp.SilentText.Visible = false
esp.VelLine.Visible = false; esp.VelArrow.Visible = false
end
function ESP.destroy(esp)
pcall(function()
for _, l in pairs(esp.Box) do l:Remove() end
esp.Name:Remove(); esp.Dist:Remove(); esp.Weapon:Remove()
esp.HealthBg:Remove(); esp.HealthBar:Remove()
for _, l in pairs(esp.Skel) do l:Remove() end
esp.Offscreen:Remove(); esp.AimLine:Remove(); esp.LookingText:Remove()
esp.Tracer:Remove(); esp.SilentText:Remove()
esp.VelLine:Remove(); esp.VelArrow:Remove()
end)
end
function ESP.cleanup()
for root, esp in pairs(ESP.cache) do
if not Cache.targets[root] then
ESP.hide(esp)
ESP.destroy(esp)
ESP.cache[root] = nil
ESP.velocityData[root] = nil
end
end
end
function ESP.hideAll()
for _, esp in pairs(ESP.cache) do ESP.hide(esp) end
end
function ESP.step(cam, screenSize, screenCenter)
if not Config.ESP_Enabled then
ESP.hideAll()
return
end
ESP.cleanup()
for root, char in pairs(Cache.targets) do
if not root or not root.Parent or not char then
if ESP.cache[root] then ESP.hide(ESP.cache[root]); ESP.destroy(ESP.cache[root]); ESP.cache[root] = nil end
else
local hum = char:FindFirstChild("Humanoid")
if not hum or hum.Health <= 0 then
if ESP.cache[root] then ESP.hide(ESP.cache[root]) end
elseif Config.ESP_TeamCheck and Cache.teamStatus[root] then
if ESP.cache[root] then ESP.hide(ESP.cache[root]) end
else
if not ESP.cache[root] then
ESP.cache[root] = ESP.create()
ESP.setup(ESP.cache[root])
end
local esp = ESP.cache[root]
local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
local dist = myRoot and (root.Position - myRoot.Position).Magnitude or 0
if dist > Config.ESP_MaxDist then
ESP.hide(esp)
else
ESP.render(esp, root, char, hum, cam, screenSize, screenCenter, dist)
end
end
end
end
end
function ESP.render(esp, root, char, hum, cam, screenSize, screenCenter, dist)
local head = char:FindFirstChild("Head")
local headPos = head and head.Position or (root.Position + Vector3.new(0,2,0))
local feetPos = root.Position - Vector3.new(0, 3, 0)
local topPos = headPos + Vector3.new(0, 0.5, 0)
local rs, ron = cam:WorldToViewportPoint(root.Position)
local hs = cam:WorldToViewportPoint(topPos)
local fs = cam:WorldToViewportPoint(feetPos)
local onScreen = ron and rs.Z > 0
local isTeam = Cache.teamStatus[root] or false
local visible = Cache.visibility[root] or false
local col = isTeam and Colors.Team or (visible and Colors.EnemyVisible or Colors.Enemy)
local skelCol = isTeam and Colors.Team or (visible and Colors.SkeletonVisible or Colors.Skeleton)
local lookingAtYou = visible and Util.isLookingAtYou(char) or false
if onScreen then
esp.Offscreen.Visible = false
local boxTop, boxBottom = hs.Y, fs.Y
local boxHeight = math.abs(boxBottom - boxTop)
local boxWidth = boxHeight * Tuning.BoxWidthRatio
local cx = rs.X
if Config.ESP_Boxes then
esp.Box[1].From = Vector2.new(cx - boxWidth/2, boxTop)
esp.Box[1].To = Vector2.new(cx + boxWidth/2, boxTop)
esp.Box[2].From = Vector2.new(cx + boxWidth/2, boxTop)
esp.Box[2].To = Vector2.new(cx + boxWidth/2, boxBottom)
esp.Box[3].From = Vector2.new(cx + boxWidth/2, boxBottom)
esp.Box[3].To = Vector2.new(cx - boxWidth/2, boxBottom)
esp.Box[4].From = Vector2.new(cx - boxWidth/2, boxBottom)
esp.Box[4].To = Vector2.new(cx - boxWidth/2, boxTop)
for _, l in pairs(esp.Box) do l.Color = col; l.Visible = true end
else
for _, l in pairs(esp.Box) do l.Visible = false end
end
if Config.ESP_Names then
esp.Name.Text = Util.getName(char)
esp.Name.Position = Vector2.new(cx, hs.Y - Tuning.NameOffset)
esp.Name.Color = col
esp.Name.Visible = true
else esp.Name.Visible = false end
if Config.ESP_Distance then
esp.Dist.Text = math.floor(dist) .. "m"
esp.Dist.Position = Vector2.new(cx, fs.Y + Tuning.DistOffset)
esp.Dist.Color = Color3.fromRGB(180,180,180)
esp.Dist.Visible = true
else esp.Dist.Visible = false end
if Config.ESP_Weapons then
local weapon = Cache.weapons[root]
if weapon then
esp.Weapon.Text = "[" .. weapon .. "]"
esp.Weapon.Position = Vector2.new(cx + boxWidth/2 + Tuning.WeaponOffset, rs.Y)
esp.Weapon.Color = Colors.Weapon
esp.Weapon.Visible = true
else esp.Weapon.Visible = false end
else esp.Weapon.Visible = false end
if Config.ESP_Health then
local pct = math.clamp(hum.Health / hum.MaxHealth, 0, 1)
local barX = cx - boxWidth/2 - Tuning.HealthBarOffset
esp.HealthBg.Position = Vector2.new(barX - 1, boxTop - 1)
esp.HealthBg.Size = Vector2.new(Tuning.HealthBarWidth + 2, boxHeight + 2)
esp.HealthBg.Visible = true
local hh = boxHeight * pct
esp.HealthBar.Position = Vector2.new(barX, boxBottom - hh)
esp.HealthBar.Size = Vector2.new(Tuning.HealthBarWidth, hh)
esp.HealthBar.Color = pct > 0.6 and Colors.HealthHigh or pct > 0.3 and Colors.HealthMid or Colors.HealthLow
esp.HealthBar.Visible = true
else esp.HealthBg.Visible = false; esp.HealthBar.Visible = false end
if Config.ESP_Skeleton then
for i, b in pairs(Bones) do
local p1, p2 = char:FindFirstChild(b[1]), char:FindFirstChild(b[2])
if p1 and p2 then
local s1, o1 = cam:WorldToViewportPoint(p1.Position)
local s2, o2 = cam:WorldToViewportPoint(p2.Position)
if o1 and o2 and s1.Z > 0 and s2.Z > 0 then
esp.Skel[i].From = Vector2.new(s1.X, s1.Y)
esp.Skel[i].To = Vector2.new(s2.X, s2.Y)
esp.Skel[i].Color = skelCol
esp.Skel[i].Visible = true
else esp.Skel[i].Visible = false end
else esp.Skel[i].Visible = false end
end
else for _, l in pairs(esp.Skel) do l.Visible = false end end
if Config.ESP_AimDir and head then
local aimEnd = head.Position + head.CFrame.LookVector * Tuning.AimLineLength
local aimScreen, aimOn = cam:WorldToViewportPoint(aimEnd)
local headScreen = cam:WorldToViewportPoint(head.Position)
if aimOn and headScreen.Z > 0 then
esp.AimLine.From = Vector2.new(headScreen.X, headScreen.Y)
esp.AimLine.To = Vector2.new(aimScreen.X, aimScreen.Y)
esp.AimLine.Color = Colors.AimDir
esp.AimLine.Visible = true
else esp.AimLine.Visible = false end
else esp.AimLine.Visible = false end
if Config.ESP_LookingAtYou and lookingAtYou then
esp.LookingText.Text = "[!] LOOKING"
esp.LookingText.Position = Vector2.new(cx, hs.Y - Tuning.LookingOffset)
esp.LookingText.Color = Colors.LookingAtYou
esp.LookingText.Visible = true
else esp.LookingText.Visible = false end
if Config.ESP_Tracers then
esp.Tracer.From = Vector2.new(screenCenter.X, screenSize.Y)
esp.Tracer.To = Vector2.new(cx, fs.Y)
esp.Tracer.Color = visible and Colors.EnemyVisible or Colors.Tracer
esp.Tracer.Visible = true
else esp.Tracer.Visible = false end
if Config.SILENT_Enabled and Silent.currentRoot == root and visible then
esp.SilentText.Text = "[SILENT]"
esp.SilentText.Position = Vector2.new(cx, hs.Y - Tuning.LookingOffset - 15)
esp.SilentText.Visible = true
else esp.SilentText.Visible = false end
local vd = ESP.velocityData[root]
if not vd then vd = {pos = root.Position, vel = Vector3.zero, time = tick()}; ESP.velocityData[root] = vd end
local now = tick()
local dt = now - vd.time
if dt > 0.03 then
local rawVel = (root.Position - vd.pos) / dt
vd.vel = vd.vel * 0.7 + rawVel * 0.3
vd.pos = root.Position
vd.time = now
end
if Config.ESP_Velocity and not isTeam then
local velFlat = Vector3.new(vd.vel.X, 0, vd.vel.Z)
local velMag = velFlat.Magnitude
if velMag > 2 then
local futurePos = root.Position + velFlat.Unit * math.clamp(velMag * 0.4, 5, 20)
local futureScreen, futureOn = cam:WorldToViewportPoint(futurePos)
if futureOn and futureScreen.Z > 0 then
esp.VelLine.From = Vector2.new(rs.X, rs.Y)
esp.VelLine.To = Vector2.new(futureScreen.X, futureScreen.Y)
esp.VelLine.Visible = true
local dx, dy = futureScreen.X - rs.X, futureScreen.Y - rs.Y
local len = math.sqrt(dx*dx + dy*dy)
if len > 5 then
local fx, fy = dx/len, dy/len
esp.VelArrow.PointA = Vector2.new(futureScreen.X, futureScreen.Y)
esp.VelArrow.PointB = Vector2.new(futureScreen.X - fx*10 + fy*5, futureScreen.Y - fy*10 - fx*5)
esp.VelArrow.PointC = Vector2.new(futureScreen.X - fx*10 - fy*5, futureScreen.Y - fy*10 + fx*5)
esp.VelArrow.Visible = true
else esp.VelArrow.Visible = false end
else esp.VelLine.Visible = false; esp.VelArrow.Visible = false end
else esp.VelLine.Visible = false; esp.VelArrow.Visible = false end
else esp.VelLine.Visible = false; esp.VelArrow.Visible = false end
if Config.ESP_Sound and not isTeam then
local velMag = vd.vel.Magnitude
if velMag > Tuning.SoundMoveThreshold then
Sound.addRipple(Vector3.new(root.Position.X, root.Position.Y - 2, root.Position.Z))
end
end
if Config.ESP_Trails and not isTeam then
Trails.update(char, root.Position)
Trails.draw(char, cam)
else Trails.hide(char) end
else
for _, l in pairs(esp.Box) do l.Visible = false end
esp.Name.Visible = false; esp.Dist.Visible = false; esp.Weapon.Visible = false
esp.HealthBg.Visible = false; esp.HealthBar.Visible = false
for _, l in pairs(esp.Skel) do l.Visible = false end
esp.AimLine.Visible = false; esp.LookingText.Visible = false; esp.Tracer.Visible = false
esp.SilentText.Visible = false; esp.VelLine.Visible = false; esp.VelArrow.Visible = false
Trails.hide(char)
if Config.ESP_Offscreen and visible then
local screenPos = cam:WorldToViewportPoint(root.Position)
local dx, dy = screenPos.X - screenCenter.X, screenPos.Y - screenCenter.Y
local angle = math.atan2(dy, dx)
local arrowX = math.clamp(screenCenter.X + math.cos(angle) * (screenSize.X/2 - Tuning.OffscreenEdgeDist), Tuning.OffscreenEdgeDist, screenSize.X - Tuning.OffscreenEdgeDist)
local arrowY = math.clamp(screenCenter.Y + math.sin(angle) * (screenSize.Y/2 - Tuning.OffscreenEdgeDist), Tuning.OffscreenEdgeDist, screenSize.Y - Tuning.OffscreenEdgeDist)
local fwd = Vector2.new(math.cos(angle), math.sin(angle))
local right = Vector2.new(-fwd.Y, fwd.X)
local pos = Vector2.new(arrowX, arrowY)
esp.Offscreen.PointA = pos + fwd * Tuning.OffscreenArrowSize
esp.Offscreen.PointB = pos - fwd * Tuning.OffscreenArrowSize/2 - right * Tuning.OffscreenArrowSize/2
esp.Offscreen.PointC = pos - fwd * Tuning.OffscreenArrowSize/2 + right * Tuning.OffscreenArrowSize/2
esp.Offscreen.Color = Colors.EnemyVisible
esp.Offscreen.Visible = true
else esp.Offscreen.Visible = false end
end
end
Sound = { ripples = {} }
function Sound.addRipple(pos)
if #Sound.ripples >= Tuning.SoundRippleMax then
local old = table.remove(Sound.ripples, 1)
if old.circles then for _, c in pairs(old.circles) do c:Remove() end end
end
local r = {position = pos, startTime = tick(), circles = {}}
for i = 1, 3 do
local c = Drawing.new("Circle")
c.Filled = false; c.Color = Colors.Sound; c.Thickness = 1; c.NumSides = 32; c.Visible = false
r.circles[i] = c
end
table.insert(Sound.ripples, r)
end
function Sound.step(cam)
if not Config.ESP_Enabled or not Config.ESP_Sound then
for _, r in ipairs(Sound.ripples) do for _, c in ipairs(r.circles) do c.Visible = false end end
return
end
local now, remove = tick(), {}
for i, r in ipairs(Sound.ripples) do
local age = now - r.startTime
if age > Tuning.SoundRippleDuration then table.insert(remove, i)
else
local sp, on = cam:WorldToViewportPoint(r.position)
if on and sp.Z > 0 then
for j, c in ipairs(r.circles) do
local ca = age - (j-1) * 0.2
if ca > 0 and ca < Tuning.SoundRippleDuration then
local prog = ca / Tuning.SoundRippleDuration
c.Position = Vector2.new(sp.X, sp.Y)
c.Radius = prog * Tuning.SoundRippleRadius
c.Transparency = (1 - prog) * 0.8
c.Visible = true
else c.Visible = false end
end
else for _, c in ipairs(r.circles) do c.Visible = false end end
end
end
for i = #remove, 1, -1 do
local r = Sound.ripples[remove[i]]
if r.circles then for _, c in pairs(r.circles) do c:Remove() end end
table.remove(Sound.ripples, remove[i])
end
end
Trails = { data = {} }
function Trails.getOrCreate(char)
if not Trails.data[char] then
Trails.data[char] = {positions = {}, lines = {}, lastUpdate = 0}
for i = 1, Tuning.TrailMaxPoints - 1 do
local l = Drawing.new("Line"); l.Thickness = 2; l.Color = Colors.Trail; l.Visible = false
Trails.data[char].lines[i] = l
end
end
return Trails.data[char]
end
function Trails.update(char, pos)
local t = Trails.getOrCreate(char)
if tick() - t.lastUpdate > Tuning.TrailUpdateInterval then
table.insert(t.positions, 1, pos)
if #t.positions > Tuning.TrailMaxPoints then table.remove(t.positions) end
t.lastUpdate = tick()
end
end
function Trails.draw(char, cam)
local t = Trails.data[char]
if not t then return end
for i, line in ipairs(t.lines) do
if t.positions[i] and t.positions[i+1] then
local s1, o1 = cam:WorldToViewportPoint(t.positions[i])
local s2, o2 = cam:WorldToViewportPoint(t.positions[i+1])
if (o1 or o2) and s1.Z > 0 and s2.Z > 0 then
line.From = Vector2.new(s1.X, s1.Y)
line.To = Vector2.new(s2.X, s2.Y)
line.Transparency = (1 - i/Tuning.TrailMaxPoints) * 0.8
line.Visible = true
else line.Visible = false end
else line.Visible = false end
end
end
function Trails.hide(char)
local t = Trails.data[char]
if t then for _, l in ipairs(t.lines) do l.Visible = false end end
end
function Trails.hideAll()
for _, t in pairs(Trails.data) do
for _, l in ipairs(t.lines) do l.Visible = false end
end
end
function Trails.cleanup()
if not Config.ESP_Enabled or not Config.ESP_Trails then
Trails.hideAll()
end
for char in pairs(Trails.data) do
local found = false
for _, c in pairs(Cache.targets) do if c == char then found = true; break end end
if not found then
for _, l in ipairs(Trails.data[char].lines) do l:Remove() end
Trails.data[char] = nil
end
end
end
local FPV = {
cache = {},
partNames = {"Blade_BL", "Blade_BR", "Blade_FL", "Blade_FR", "Explosive", "Explosive1", "Rotator_BL", "Rotator_BR", "Rotator_FL", "Rotator_FR", "FPV"}
}
function FPV.create()
return {
Box = {Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line"), Drawing.new("Line")},
Name = Drawing.new("Text"), Dist = Drawing.new("Text"),
Trajectory = Drawing.new("Line"), TrajectoryEnd = Drawing.new("Circle"),
lastPos = nil, lastTime = 0, velocity = Vector3.new(0,0,0)
}
end
function FPV.setup(esp)
for _, l in pairs(esp.Box) do l.Thickness = 2; l.Color = Colors.FPV end
esp.Name.Size = 14; esp.Name.Font = Drawing.Fonts.Monospace; esp.Name.Center = true; esp.Name.Outline = true; esp.Name.Color = Colors.FPV
esp.Dist.Size = 12; esp.Dist.Font = Drawing.Fonts.Monospace; esp.Dist.Center = true; esp.Dist.Outline = true; esp.Dist.Color = Colors.FPV
esp.Trajectory.Thickness = 2; esp.Trajectory.Color = Color3.fromRGB(255, 100, 0)
esp.TrajectoryEnd.Filled = true; esp.TrajectoryEnd.Color = Color3.fromRGB(255, 50, 50); esp.TrajectoryEnd.Radius = 5; esp.TrajectoryEnd.NumSides = 16
end
function FPV.hide(esp)
for _, l in pairs(esp.Box) do l.Visible = false end
esp.Name.Visible = false; esp.Dist.Visible = false
esp.Trajectory.Visible = false; esp.TrajectoryEnd.Visible = false
end
function FPV.destroy(esp)
pcall(function()
for _, l in pairs(esp.Box) do l:Remove() end
esp.Name:Remove(); esp.Dist:Remove(); esp.Trajectory:Remove(); esp.TrajectoryEnd:Remove()
end)
end
local fpvNameSet = {}
for _, n in ipairs(FPV.partNames) do fpvNameSet[n] = true end
function FPV.scan()
if not Config.ESP_FPV then return {} end
local drones, seen = {}, {}
local camRef = workspace.CurrentCamera
local plrs = Players:GetPlayers()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and fpvNameSet[obj.Name] then
local model = obj.Parent
if model and model:IsA("Model") and not seen[model] then
local skip = false
if camRef and model:IsDescendantOf(camRef) then skip = true end
if not skip then
for i = 1, #plrs do
if plrs[i].Character and model:IsDescendantOf(plrs[i].Character) then skip = true; break end
end
end
if not skip then
seen[model] = true
local center = model:FindFirstChild("Explosive") or model:FindFirstChild("FPV") or obj
drones[model] = center
end
end
end
end
return drones
end
function FPV.step(cam)
if not Config.ESP_Enabled or not Config.ESP_FPV then
for _, e in pairs(FPV.cache) do FPV.hide(e) end
return
end
local screenPos, toShow = {}, {}
for drone, part in pairs(Cache.drones) do
local sp, on = cam:WorldToViewportPoint(part.Position)
if on and sp.Z > 0 then
local tooClose = false
for _, ex in pairs(screenPos) do
if math.sqrt((sp.X-ex.X)^2 + (sp.Y-ex.Y)^2) < Tuning.FPVClusterDist then tooClose = true; break end
end
if not tooClose then screenPos[drone] = sp; toShow[drone] = part end
end
end
for drone, esp in pairs(FPV.cache) do
if not toShow[drone] then FPV.hide(esp); FPV.destroy(esp); FPV.cache[drone] = nil end
end
for drone, part in pairs(toShow) do
if not FPV.cache[drone] then FPV.cache[drone] = FPV.create(); FPV.setup(FPV.cache[drone]) end
local esp = FPV.cache[drone]
local pos = part.Position
local sp, on = cam:WorldToViewportPoint(pos)
if on and sp.Z > 0 then
local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
local dist = myRoot and (pos - myRoot.Position).Magnitude or 0
if dist < Config.ESP_MaxDist then
local size = math.clamp(1000 / sp.Z, 20, 100)
local cx, cy = sp.X, sp.Y
esp.Box[1].From = Vector2.new(cx-size/2, cy-size/2); esp.Box[1].To = Vector2.new(cx+size/2, cy-size/2)
esp.Box[2].From = Vector2.new(cx+size/2, cy-size/2); esp.Box[2].To = Vector2.new(cx+size/2, cy+size/2)
esp.Box[3].From = Vector2.new(cx+size/2, cy+size/2); esp.Box[3].To = Vector2.new(cx-size/2, cy+size/2)
esp.Box[4].From = Vector2.new(cx-size/2, cy+size/2); esp.Box[4].To = Vector2.new(cx-size/2, cy-size/2)
for _, l in pairs(esp.Box) do l.Visible = true end
esp.Name.Text = "[FPV DRONE]"; esp.Name.Position = Vector2.new(cx, cy-size/2-18); esp.Name.Visible = true
esp.Dist.Text = math.floor(dist).."m"; esp.Dist.Position = Vector2.new(cx, cy+size/2+4); esp.Dist.Visible = true
if Config.ESP_FPVPredict then
local now = tick()
if esp.lastPos and now - esp.lastTime < 0.5 then
local dt = now - esp.lastTime
if dt > 0 then esp.velocity = esp.velocity:Lerp((pos - esp.lastPos)/dt, 0.3) end
end
esp.lastPos, esp.lastTime = pos, now
if esp.velocity.Magnitude > 1 then
local simPos, simVel, hit = pos, esp.velocity, nil
local dt = Tuning.FPVPredictTime / Tuning.FPVPredictSteps
for _ = 1, Tuning.FPVPredictSteps do
simVel = simVel + Vector3.new(0, -Tuning.FPVGravity * dt, 0)
simPos = simPos + simVel * dt
if simPos.Y < -10 then hit = simPos; break end
end
local endPos = hit or simPos
local es, eo = cam:WorldToViewportPoint(endPos)
if eo and es.Z > 0 then
esp.Trajectory.From = Vector2.new(cx, cy); esp.Trajectory.To = Vector2.new(es.X, es.Y); esp.Trajectory.Visible = true
esp.TrajectoryEnd.Position = Vector2.new(es.X, es.Y); esp.TrajectoryEnd.Visible = true
else esp.Trajectory.Visible = false; esp.TrajectoryEnd.Visible = false end
else esp.Trajectory.Visible = false; esp.TrajectoryEnd.Visible = false end
else esp.Trajectory.Visible = false; esp.TrajectoryEnd.Visible = false end
else FPV.hide(esp) end
else FPV.hide(esp) end
end
end
local Radar = {
bg = Drawing.new("Square"),
circleBg = Drawing.new("Circle"),
border = Drawing.new("Square"),
circleBorder = Drawing.new("Circle"),
cross1 = Drawing.new("Line"),
cross2 = Drawing.new("Line"),
center = Drawing.new("Triangle"),
dots = {},
fpvDots = {}
}
do
Radar.bg.Filled = true; Radar.bg.Color = Colors.RadarBg; Radar.bg.Transparency = 0.8
Radar.circleBg.Filled = true; Radar.circleBg.Color = Colors.RadarBg; Radar.circleBg.Transparency = 0.8; Radar.circleBg.NumSides = 64
Radar.border.Filled = false; Radar.border.Color = Colors.RadarBorder; Radar.border.Thickness = 2
Radar.circleBorder.Filled = false; Radar.circleBorder.Color = Colors.RadarBorder; Radar.circleBorder.Thickness = 2; Radar.circleBorder.NumSides = 64
Radar.cross1.Color = Color3.fromRGB(40,40,40); Radar.cross1.Thickness = 1
Radar.cross2.Color = Color3.fromRGB(40,40,40); Radar.cross2.Thickness = 1
Radar.center.Filled = true; Radar.center.Color = Colors.RadarYou
for i = 1, 50 do local d = Drawing.new("Triangle"); d.Filled = true; d.Visible = false; Radar.dots[i] = d end
for i = 1, 10 do local c = Drawing.new("Circle"); c.Filled = true; c.Color = Colors.FPV; c.Radius = 4; c.NumSides = 16; c.Visible = false; Radar.fpvDots[i] = c end
end
function Radar.hideAll()
Radar.bg.Visible = false; Radar.circleBg.Visible = false; Radar.border.Visible = false; Radar.circleBorder.Visible = false
Radar.center.Visible = false; Radar.cross1.Visible = false; Radar.cross2.Visible = false
for _, d in pairs(Radar.dots) do d.Visible = false end
for _, c in pairs(Radar.fpvDots) do c.Visible = false end
end
function Radar.step(cam)
if not Config.RADAR_Enabled then Radar.hideAll(); return end
local size = Config.RADAR_Size
local pos = Vector2.new(cam.ViewportSize.X - size - 20, 20)
local center = pos + Vector2.new(size/2, size/2)
if Config.RADAR_Circle then
Radar.bg.Visible = false; Radar.border.Visible = false
Radar.circleBg.Position = center; Radar.circleBg.Radius = size/2; Radar.circleBg.Visible = true
Radar.circleBorder.Position = center; Radar.circleBorder.Radius = size/2; Radar.circleBorder.Visible = true
else
Radar.circleBg.Visible = false; Radar.circleBorder.Visible = false
Radar.bg.Position = pos; Radar.bg.Size = Vector2.new(size, size); Radar.bg.Visible = true
Radar.border.Position = pos; Radar.border.Size = Vector2.new(size, size); Radar.border.Visible = true
end
Radar.cross1.From = Vector2.new(center.X, pos.Y + 10); Radar.cross1.To = Vector2.new(center.X, pos.Y + size - 10); Radar.cross1.Visible = true
Radar.cross2.From = Vector2.new(pos.X + 10, center.Y); Radar.cross2.To = Vector2.new(pos.X + size - 10, center.Y); Radar.cross2.Visible = true
local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
local myLook = cam.CFrame.LookVector
if not myRoot then Radar.center.Visible = false; for _, d in pairs(Radar.dots) do d.Visible = false end; return end
local myAngle = math.atan2(-myLook.X, -myLook.Z)
local cosA, sinA = math.cos(myAngle), math.sin(myAngle)
local scale = (size/2 - 10) / Tuning.RadarRange
local idx = 1
for root, char in pairs(Cache.targets) do
if idx > #Radar.dots then break end
if root and root.Parent then
local isTeam = Cache.teamStatus[root]
if not (Config.ESP_TeamCheck and isTeam) then
local rx, rz = root.Position.X - myRoot.Position.X, root.Position.Z - myRoot.Position.Z
local dist2D = math.sqrt(rx^2 + rz^2)
if dist2D < Tuning.RadarRange then
local rotX = rx * cosA - rz * sinA
local rotZ = rx * sinA + rz * cosA
local radarX, radarY = rotX * scale, rotZ * scale
local maxD = size/2 - 8
local rDist = math.sqrt(radarX^2 + radarY^2)
if rDist > maxD then radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD end
local dotPos = center + Vector2.new(radarX, radarY)
local dot = Radar.dots[idx]
local head = char:FindFirstChild("Head")
local eAngle = head and math.atan2(-head.CFrame.LookVector.X, -head.CFrame.LookVector.Z) - myAngle or 0
local eFwd = Vector2.new(-math.sin(eAngle), -math.cos(eAngle))
local eRight = Vector2.new(-eFwd.Y, eFwd.X)
dot.PointA = dotPos + eFwd * Tuning.RadarDotSize
dot.PointB = dotPos - eFwd * Tuning.RadarDotSize/2 + eRight * Tuning.RadarDotSize/2
dot.PointC = dotPos - eFwd * Tuning.RadarDotSize/2 - eRight * Tuning.RadarDotSize/2
dot.Color = isTeam and Colors.RadarTeam or Colors.RadarEnemy
dot.Visible = true
idx = idx + 1
end
end
end
end
for i = idx, #Radar.dots do Radar.dots[i].Visible = false end
local fpvIdx = 1
if Config.ESP_FPV then
for _, part in pairs(Cache.drones) do
if fpvIdx > #Radar.fpvDots then break end
local rx, rz = part.Position.X - myRoot.Position.X, part.Position.Z - myRoot.Position.Z
local dist2D = math.sqrt(rx^2 + rz^2)
if dist2D < Tuning.RadarRange then
local rotX = rx * cosA - rz * sinA
local rotZ = rx * sinA + rz * cosA
local radarX, radarY = rotX * scale, rotZ * scale
local maxD = size/2 - 8
local rDist = math.sqrt(radarX^2 + radarY^2)
if rDist > maxD then radarX, radarY = radarX/rDist*maxD, radarY/rDist*maxD end
Radar.fpvDots[fpvIdx].Position = center + Vector2.new(radarX, radarY)
Radar.fpvDots[fpvIdx].Visible = true
fpvIdx = fpvIdx + 1
end
end
end
for i = fpvIdx, #Radar.fpvDots do Radar.fpvDots[i].Visible = false end
Radar.center.PointA = center + Vector2.new(0, -Tuning.RadarArrowSize)
Radar.center.PointB = center + Vector2.new(-Tuning.RadarArrowSize/2, Tuning.RadarArrowSize/2)
Radar.center.PointC = center + Vector2.new(Tuning.RadarArrowSize/2, Tuning.RadarArrowSize/2)
Radar.center.Visible = true
end
local Aimbot = {
aiming = false,
locked = nil,
fov = Drawing.new("Circle")
}
Aimbot.fov.Thickness = 1; Aimbot.fov.NumSides = 64; Aimbot.fov.Filled = false; Aimbot.fov.Transparency = 0.6
Connections.mb2down = Mouse.Button2Down:Connect(function() Aimbot.aiming = true; Aimbot.locked = nil end)
Connections.mb2up = Mouse.Button2Up:Connect(function() Aimbot.aiming = false; Aimbot.locked = nil end)
function Aimbot.getBest(cam)
local center = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2)
local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not myRoot then return nil end
local best, bestDist = nil, math.huge
for root, char in pairs(Cache.targets) do
if root and root.Parent and char then
if not (Config.AIM_TeamCheck and Cache.teamStatus[root]) then
local head = char:FindFirstChild("Head")
if head then
local sp, on = cam:WorldToViewportPoint(head.Position)
if on and sp.Z > 0 then
local sDist = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if sDist <= Config.AIM_FOV then
local wDist = (root.Position - myRoot.Position).Magnitude
if wDist < bestDist then bestDist = wDist; best = char end
end
end
end
end
end
end
return best
end
function Aimbot.step(cam, screenCenter)
if Config.AIM_Enabled and Config.AIM_ShowFOV then
Aimbot.fov.Position = screenCenter
Aimbot.fov.Radius = Config.AIM_FOV
Aimbot.fov.Color = (Aimbot.aiming and Aimbot.locked) and Color3.fromRGB(255,0,0) or Color3.fromRGB(255,255,255)
Aimbot.fov.Visible = true
else Aimbot.fov.Visible = false end
end
RunService:BindToRenderStep("AimbotCore", Enum.RenderPriority.Camera.Value + 1, function()
if Unloaded or not Config.AIM_Enabled then return end
local rmb = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
if not (Aimbot.aiming or rmb) then Aimbot.locked = nil; return end
local cam = workspace.CurrentCamera
if not cam then return end
if not Aimbot.locked or not Aimbot.locked.Parent or not Aimbot.locked:FindFirstChild("Head") then
Aimbot.locked = Aimbot.getBest(cam)
end
if not Aimbot.locked then return end
local head = Aimbot.locked:FindFirstChild("Head")
local hum = Aimbot.locked:FindFirstChild("Humanoid")
if not head or not hum or hum.Health <= 0 then Aimbot.locked = nil; return end
local goal = CFrame.lookAt(cam.CFrame.Position, head.Position)
local newCF
if Config.AIM_Smooth <= 0 then newCF = goal
else
local alpha = math.clamp(0.9 - (Config.AIM_Smooth/100)*0.8, 0.1, 0.9)
newCF = cam.CFrame:Lerp(goal, alpha)
end
cam.CFrame = newCF
pcall(function()
local vm = cam:FindFirstChild("ViewModel")
if vm then
local cb = vm:FindFirstChild("CameraBone"); if cb then cb.CFrame = newCF end
local hrp = vm:FindFirstChild("HRP"); if hrp then hrp.CFrame = newCF end
end
end)
pcall(function()
local net = game.ReplicatedStorage:FindFirstChild("network")
if net then local lv = net:FindFirstChild("characterLookvector"); if lv then lv:FireServer(newCF.LookVector) end end
end)
end)
local Desync = { active = false }
function Desync.run()
Desync.active = true
while Desync.active and Config.DESYNC_Enabled and not Unloaded do
pcall(function()
if not LocalPlayer.Character then return end
local root = LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not root then return end
local a = Config.DESYNC_Amount
local cf = root.CFrame
root.CFrame = cf * CFrame.new(math.random(-a,a)*0.1, 0, math.random(-a,a)*0.1)
task.wait(0.01)
root.CFrame = cf
end)
task.wait(0.1 + 0.3/math.max(Config.DESYNC_Amount, 1))
end
Desync.active = false
end
task.spawn(function()
while not Unloaded do
if Config.DESYNC_Enabled and not Desync.active then task.spawn(Desync.run) end
task.wait(0.5)
end
end)
local Trigger = { active = false, lastShot = 0 }
function Trigger.check(cam)
local center = Vector2.new(cam.ViewportSize.X/2, cam.ViewportSize.Y/2)
for root, char in pairs(Cache.targets) do
if root and char then
if Config.TRIGGER_TeamCheck and Cache.teamStatus[root] then continue end
local hum = char:FindFirstChild("Humanoid")
if not hum or hum.Health <= 0 then continue end
for _, pn in pairs({"Head", "Torso", "HumanoidRootPart"}) do
local p = char:FindFirstChild(pn)
if p then
local sp, on = cam:WorldToViewportPoint(p.Position)
if on and sp.Z > 0 and (Vector2.new(sp.X, sp.Y) - center).Magnitude < Tuning.TriggerRadius then
return true
end
end
end
end
end
return false
end
function Trigger.shoot()
pcall(function() if mouse1click then mouse1click() end end)
pcall(function() if Input and Input.MouseButton1Click then Input.MouseButton1Click() end end)
pcall(function()
local vim = game:GetService("VirtualInputManager")
vim:SendMouseButtonEvent(0,0,0,true,game,1); task.wait(0.01); vim:SendMouseButtonEvent(0,0,0,false,game,1)
end)
end
function Trigger.run()
Trigger.active = true
while Config.TRIGGER_Enabled and not Unloaded do
pcall(function()
local cam = workspace.CurrentCamera
if cam and Trigger.check(cam) then
local now = tick() * 1000
if now - Trigger.lastShot >= Config.TRIGGER_Delay then
Trigger.shoot()
Trigger.lastShot = now
end
end
end)
task.wait(0.016)
end
Trigger.active = false
end
task.spawn(function()
while not Unloaded do
if Config.TRIGGER_Enabled and not Trigger.active then task.spawn(Trigger.run) end
task.wait(0.3)
end
end)
function Silent.getTarget()
local cam = workspace.CurrentCamera
if not cam then return nil, nil end
local mousePos = UserInputService:GetMouseLocation()
local best, bestDist, bestRoot = nil, Config.SILENT_FOV, nil
for root, char in pairs(Cache.targets) do
if root and root.Parent and char then
if Config.SILENT_TeamCheck and Cache.teamStatus[root] then continue end
local hum = char:FindFirstChild("Humanoid")
if not hum or hum.Health <= 0 then continue end
local head = char:FindFirstChild("Head")
if head then
local sp, on = cam:WorldToViewportPoint(head.Position)
if on and sp.Z > 0 then
local dist = (Vector2.new(sp.X, sp.Y) - mousePos).Magnitude
if dist < bestDist then bestDist = dist; best = head; bestRoot = root end
end
end
end
end
return best, bestRoot
end
function Silent.hook()
if Silent.hooked then return end
pcall(function()
for _, tbl in ipairs(getgc(true)) do
if type(tbl) == "table" and rawget(tbl, "Fire") and type(rawget(tbl, "Fire")) == "function" then
local orig = tbl.Fire
tbl.Fire = function(plr, gun, origin, dir, ...)
if plr == LocalPlayer and Config.SILENT_Enabled and not Unloaded then
local target = Silent.getTarget()
if target then dir = (target.Position - origin).Unit end
end
return orig(plr, gun, origin, dir, ...)
end
Silent.hooked = true
end
end
end)
end
function Silent.step()
if not Config.SILENT_Enabled then Silent.currentRoot = nil; return end
local _, root = Silent.getTarget()
Silent.currentRoot = root
end
task.spawn(Silent.hook)
local Menu = {
selected = 1,
drawings = {},
items = {
{name = "ESP", key = "ESP_Enabled", type = "toggle"},
{name = " Boxes", key = "ESP_Boxes", type = "toggle", parent = "ESP_Enabled"},
{name = " Names", key = "ESP_Names", type = "toggle", parent = "ESP_Enabled"},
{name = " Distance", key = "ESP_Distance", type = "toggle", parent = "ESP_Enabled"},
{name = " Skeleton", key = "ESP_Skeleton", type = "toggle", parent = "ESP_Enabled"},
{name = " Weapons", key = "ESP_Weapons", type = "toggle", parent = "ESP_Enabled"},
{name = " Health Bar", key = "ESP_Health", type = "toggle", parent = "ESP_Enabled"},
{name = " FPV Drones", key = "ESP_FPV", type = "toggle", parent = "ESP_Enabled"},
{name = " Trajectory", key = "ESP_FPVPredict", type = "toggle", parent = "ESP_FPV"},
{name = " Offscreen", key = "ESP_Offscreen", type = "toggle", parent = "ESP_Enabled"},
{name = " Aim Direction", key = "ESP_AimDir", type = "toggle", parent = "ESP_Enabled"},
{name = " Looking At You", key = "ESP_LookingAtYou", type = "toggle", parent = "ESP_Enabled"},
{name = " Tracers", key = "ESP_Tracers", type = "toggle", parent = "ESP_Enabled"},
{name = " Velocity", key = "ESP_Velocity", type = "toggle", parent = "ESP_Enabled"},
{name = " Sound ESP", key = "ESP_Sound", type = "toggle", parent = "ESP_Enabled"},
{name = " Trails", key = "ESP_Trails", type = "toggle", parent = "ESP_Enabled"},
{name = " Team Check", key = "ESP_TeamCheck", type = "toggle", parent = "ESP_Enabled"},
{name = " Max Dist", key = "ESP_MaxDist", type = "slider", min = 500, max = 5000, step = 100, parent = "ESP_Enabled"},
{name = "----------", type = "sep"},
{name = "RADAR", key = "RADAR_Enabled", type = "toggle"},
{name = " Size", key = "RADAR_Size", type = "slider", min = 80, max = 200, step = 10, parent = "RADAR_Enabled"},
{name = " Circle Mode", key = "RADAR_Circle", type = "toggle", parent = "RADAR_Enabled"},
{name = "----------", type = "sep"},
{name = "AIMBOT", key = "AIM_Enabled", type = "toggle"},
{name = " FOV", key = "AIM_FOV", type = "slider", min = 50, max = 500, step = 25, parent = "AIM_Enabled"},
{name = " Smooth", key = "AIM_Smooth", type = "slider", min = 0, max = 100, step = 5, parent = "AIM_Enabled"},
{name = " Show FOV", key = "AIM_ShowFOV", type = "toggle", parent = "AIM_Enabled"},
{name = " Team Check", key = "AIM_TeamCheck", type = "toggle", parent = "AIM_Enabled"},
{name = "----------", type = "sep"},
{name = "DESYNC", key = "DESYNC_Enabled", type = "toggle"},
{name = " Strength", key = "DESYNC_Amount", type = "slider", min = 1, max = 10, step = 1, parent = "DESYNC_Enabled"},
{name = "----------", type = "sep"},
{name = "TRIGGERBOT", key = "TRIGGER_Enabled", type = "toggle"},
{name = " Delay (ms)", key = "TRIGGER_Delay", type = "slider", min = 0, max = 200, step = 10, parent = "TRIGGER_Enabled"},
{name = " Team Check", key = "TRIGGER_TeamCheck", type = "toggle", parent = "TRIGGER_Enabled"},
{name = "----------", type = "sep"},
{name = "SILENT AIM", key = "SILENT_Enabled", type = "toggle"},
{name = " FOV", key = "SILENT_FOV", type = "slider", min = 50, max = 300, step = 25, parent = "SILENT_Enabled"},
{name = " Team Check", key = "SILENT_TeamCheck", type = "toggle", parent = "SILENT_Enabled"},
},
bg = Drawing.new("Square"),
border = Drawing.new("Square"),
title = Drawing.new("Text"),
warning = {
bg = Drawing.new("Square"), border = Drawing.new("Square"),
title = Drawing.new("Text"), text1 = Drawing.new("Text"), text2 = Drawing.new("Text")
}
}
Menu.bg.Position = Vector2.new(10,10); Menu.bg.Color = Colors.MenuBg; Menu.bg.Filled = true; Menu.bg.Transparency = 0.9
Menu.border.Position = Vector2.new(10,10); Menu.border.Color = Colors.MenuHighlight; Menu.border.Filled = false; Menu.border.Thickness = 1
Menu.title.Position = Vector2.new(18,14); Menu.title.Text = "INS menu | HOME panic"; Menu.title.Size = 13; Menu.title.Font = Drawing.Fonts.Monospace; Menu.title.Color = Color3.fromRGB(100,100,100); Menu.title.Outline = true
Menu.warning.bg.Filled = true; Menu.warning.bg.Color = Color3.fromRGB(20,0,0); Menu.warning.bg.Transparency = 0.9; Menu.warning.bg.Visible = false
Menu.warning.border.Filled = false; Menu.warning.border.Color = Color3.fromRGB(255,50,50); Menu.warning.border.Thickness = 2; Menu.warning.border.Visible = false
Menu.warning.title.Size = 16; Menu.warning.title.Font = Drawing.Fonts.Monospace; Menu.warning.title.Color = Color3.fromRGB(255,50,50); Menu.warning.title.Outline = true; Menu.warning.title.Center = true; Menu.warning.title.Text = "!! WARNING !!"; Menu.warning.title.Visible = false
Menu.warning.text1.Size = 13; Menu.warning.text1.Font = Drawing.Fonts.Monospace; Menu.warning.text1.Color = Color3.fromRGB(255,200,200); Menu.warning.text1.Outline = true; Menu.warning.text1.Center = true; Menu.warning.text1.Text = "Aimbot may get you banned!"; Menu.warning.text1.Visible = false
Menu.warning.text2.Size = 13; Menu.warning.text2.Font = Drawing.Fonts.Monospace; Menu.warning.text2.Color = Color3.fromRGB(255,150,150); Menu.warning.text2.Outline = true; Menu.warning.text2.Center = true; Menu.warning.text2.Text = "You will get reported and banned if you rage!"; Menu.warning.text2.Visible = false
for i = 1, #Menu.items do
local t = Drawing.new("Text"); t.Size = 13; t.Font = Drawing.Fonts.Monospace; t.Outline = true
Menu.drawings[i] = t
end
function Menu.showWarning(cam)
local cx = cam.ViewportSize.X / 2
local w, h = 320, 80
Menu.warning.bg.Position = Vector2.new(cx - w/2, 150); Menu.warning.bg.Size = Vector2.new(w, h); Menu.warning.bg.Visible = true
Menu.warning.border.Position = Vector2.new(cx - w/2, 150); Menu.warning.border.Size = Vector2.new(w, h); Menu.warning.border.Visible = true
Menu.warning.title.Position = Vector2.new(cx, 165); Menu.warning.title.Visible = true
Menu.warning.text1.Position = Vector2.new(cx, 188); Menu.warning.text1.Visible = true
Menu.warning.text2.Position = Vector2.new(cx, 205); Menu.warning.text2.Visible = true
Timers.warningEnd = tick() + 3
end
function Menu.updateWarning()
if Timers.warningEnd > 0 and tick() > Timers.warningEnd then
Menu.warning.bg.Visible = false; Menu.warning.border.Visible = false
Menu.warning.title.Visible = false; Menu.warning.text1.Visible = false; Menu.warning.text2.Visible = false
Timers.warningEnd = 0
end
end
function Menu.step()
if not Config.MenuOpen then
Menu.bg.Visible = false; Menu.border.Visible = false; Menu.title.Visible = false
for _, d in pairs(Menu.drawings) do d.Visible = false end
return
end
local y, count = 32, 0
for i, item in ipairs(Menu.items) do
local d = Menu.drawings[i]
local show = not item.parent or Config[item.parent]
if show then
count = count + 1
d.Position = Vector2.new(18, y)
if item.type == "sep" then d.Text = item.name; d.Color = Color3.fromRGB(50,50,50)
elseif item.type == "toggle" then
local on = Config[item.key]
d.Text = (i == Menu.selected and "> " or " ") .. item.name .. (on and " ON" or " OFF")
d.Color = i == Menu.selected and Colors.MenuHighlight or (on and Colors.MenuOn or Colors.MenuOff)
elseif item.type == "slider" then
d.Text = (i == Menu.selected and "> " or " ") .. item.name .. " " .. math.floor(Config[item.key])
d.Color = i == Menu.selected and Colors.MenuHighlight or Colors.MenuText
end
d.Visible = true; y = y + 16
else d.Visible = false end
end
Menu.bg.Size = Vector2.new(180, 28 + count * 16 + 6); Menu.border.Size = Vector2.new(180, 28 + count * 16 + 6)
Menu.bg.Visible = true; Menu.border.Visible = true; Menu.title.Visible = true
end
local function Unload()
if Unloaded then return end
Unloaded = true
Config.DESYNC_Enabled = false
Config.TRIGGER_Enabled = false
Desync.active = false
Trigger.active = false
pcall(function() RunService:UnbindFromRenderStep("AimbotCore") end)
for _, c in pairs(Connections) do pcall(function() c:Disconnect() end) end
for _, esp in pairs(ESP.cache) do ESP.destroy(esp) end
for _, esp in pairs(FPV.cache) do FPV.destroy(esp) end
for _, r in pairs(Sound.ripples) do for _, c in pairs(r.circles) do c:Remove() end end
for _, t in pairs(Trails.data) do for _, l in pairs(t.lines) do l:Remove() end end
Radar.bg:Remove(); Radar.circleBg:Remove(); Radar.border:Remove(); Radar.circleBorder:Remove()
Radar.cross1:Remove(); Radar.cross2:Remove(); Radar.center:Remove()
for _, d in pairs(Radar.dots) do d:Remove() end
for _, c in pairs(Radar.fpvDots) do c:Remove() end
Aimbot.fov:Remove()
Menu.bg:Remove(); Menu.border:Remove(); Menu.title:Remove()
for _, d in pairs(Menu.drawings) do d:Remove() end
Menu.warning.bg:Remove(); Menu.warning.border:Remove(); Menu.warning.title:Remove()
Menu.warning.text1:Remove(); Menu.warning.text2:Remove()
end
Connections.input = UserInputService.InputBegan:Connect(function(input, gp)
if input.KeyCode == Enum.KeyCode.Home then Unload(); return end
if input.KeyCode == Enum.KeyCode.Insert and not gp then Config.MenuOpen = not Config.MenuOpen; return end
if not Config.MenuOpen then return end
if input.KeyCode == Enum.KeyCode.Up then
repeat Menu.selected = Menu.selected - 1; if Menu.selected < 1 then Menu.selected = #Menu.items end
until Menu.items[Menu.selected].type ~= "sep" and (not Menu.items[Menu.selected].parent or Config[Menu.items[Menu.selected].parent])
elseif input.KeyCode == Enum.KeyCode.Down then
repeat Menu.selected = Menu.selected + 1; if Menu.selected > #Menu.items then Menu.selected = 1 end
until Menu.items[Menu.selected].type ~= "sep" and (not Menu.items[Menu.selected].parent or Config[Menu.items[Menu.selected].parent])
elseif input.KeyCode == Enum.KeyCode.Left or input.KeyCode == Enum.KeyCode.Right then
local item = Menu.items[Menu.selected]
if item and item.type == "toggle" then
Config[item.key] = not Config[item.key]
if item.key == "AIM_Enabled" and Config.AIM_Enabled then Menu.showWarning(workspace.CurrentCamera) end
elseif item and item.type == "slider" then
Config[item.key] = input.KeyCode == Enum.KeyCode.Left and math.max(item.min, Config[item.key] - item.step) or math.min(item.max, Config[item.key] + item.step)
end
end
end)
Connections.render = RunService.RenderStepped:Connect(function()
if Unloaded then return end
local cam = workspace.CurrentCamera
if not cam then return end
local screenSize = cam.ViewportSize
local screenCenter = Vector2.new(screenSize.X/2, screenSize.Y/2)
local now = tick()
if now - Timers.lastTeamRefresh > Tuning.TeamRefreshRate then Timers.lastTeamRefresh = now; Team.update() end
if now - Timers.lastTargetRefresh > Tuning.TargetRefreshRate then Timers.lastTargetRefresh = now; Targets.refresh() end
if now - Timers.lastVisRefresh > Tuning.VisibilityRefreshRate then Timers.lastVisRefresh = now; Targets.refreshVisibility() end
if now - Timers.lastWeaponRefresh > Tuning.WeaponRefreshRate then Timers.lastWeaponRefresh = now; Targets.refreshWeapons() end
if now - Timers.lastFPVRefresh > Tuning.FPVRefreshRate then Timers.lastFPVRefresh = now; Cache.drones = FPV.scan() end
ESP.step(cam, screenSize, screenCenter)
Sound.step(cam)
Trails.cleanup()
FPV.step(cam)
Radar.step(cam)
Aimbot.step(cam, screenCenter)
Silent.step()
Menu.updateWarning()
Menu.step()
end)
Menu.step()