
KeylessUniversal

getgenv().crosshair = {
enabled = true,
refreshrate = 0,
mode = 'mouse',
position = Vector2.new(0, 0),
width = 1.5,
length = 10,
radius = 11,
color = Color3.fromRGB(128, 16, 255),
spin = true,
spin_speed = 150,
spin_max = 340,
spin_style = Enum.EasingStyle.Sine,
resize = true,
resize_speed = 150,
resize_min = 5,
resize_max = 22,
}
local old; old = hookfunction(Drawing.new, function(class, properties)
local drawing = old(class)
for i, v in next, properties or {} do
drawing[i] = v
end
return drawing
end)
local runservice = game:GetService('RunService')
local inputservice = game:GetService('UserInputService')
local tweenservice = game:GetService('TweenService')
local camera = workspace.CurrentCamera
local last_render = 0
local drawings = {
crosshair = {},
text = {Drawing.new('Text', {Size = 13, Font = 2, Outline = true, Text = 'Client', Color = Color3.new(1, 1, 1)}),
Drawing.new('Text', {Size = 13, Font = 2, Outline = true, Text = ".cc"}),},
}
for idx = 1, 8 do
drawings.crosshair[idx] = Drawing.new('Line')
end
function solve(angle, radius)
return Vector2.new(
math.sin(math.rad(angle)) * radius,
math.cos(math.rad(angle)) * radius
)
end
runservice.PostSimulation:Connect(function()
local _tick = tick()
if _tick - last_render > crosshair.refreshrate then
last_render = _tick
local position = (
crosshair.mode == 'center' and camera.ViewportSize / 2 or
crosshair.mode == 'mouse' and inputservice:GetMouseLocation() or
crosshair.position
)
local text_x = drawings.text[1].TextBounds.X + drawings.text[2].TextBounds.X
drawings.text[1].Visible = crosshair.enabled
drawings.text[2].Visible = crosshair.enabled
if crosshair.enabled then
drawings.text[1].Position = position + Vector2.new(-text_x / 2, crosshair.radius + (crosshair.resize and crosshair.resize_max or crosshair.length) + 15)
drawings.text[2].Position = drawings.text[1].Position + Vector2.new(drawings.text[1].TextBounds.X)
drawings.text[2].Color = crosshair.color
for idx = 1, 4 do
local outline = drawings.crosshair[idx]
local inline = drawings.crosshair[idx + 4]
local angle = (idx - 1) * 90
local length = crosshair.length
if crosshair.spin then
local spin_angle = -_tick * crosshair.spin_speed % crosshair.spin_max
angle = angle + tweenservice:GetValue(spin_angle / 360, crosshair.spin_style, Enum.EasingDirection.InOut) * 360
end
if crosshair.resize then
local resize_length = tick() * crosshair.resize_speed % 180
length = crosshair.resize_min + math.sin(math.rad(resize_length)) * crosshair.resize_max
end
inline.Visible = true
inline.Color = crosshair.color
inline.From = position + solve(angle, crosshair.radius)
inline.To = position + solve(angle, crosshair.radius + length)
inline.Thickness = crosshair.width
outline.Visible = true
outline.From = position + solve(angle, crosshair.radius - 1)
outline.To = position + solve(angle, crosshair.radius + length + 1)
outline.Thickness = crosshair.width + 1.5
end
else
for idx = 1, 8 do
drawings.crosshair[idx].Visible = false
end
end
end
end)
--////////////
--////////////
_G.SilentAim = false
_G.AimbotNPC = false
_G.FOV = 150
_G.VisibleCheck = true
_G.TeamCheck = true
_G.TeamCheckForNPCs = false
_G.Prediction = 0.165
_G.UpdateRate = 0.1
_G.TargetMode = "NPCs" -- "NPCs", "Both"
_G.AimPart = "Head" -- "Head", "Torso", "Both", "Random"
_G.ShowTarget = true
_G.HitChance = 100
_G.BulletTeleport = false
_G.ShowTargetName = true
_G.ShowTargetType = true
_G.ShowTargetHP = true
_G.ShowTargetDistance = true
_G.ShowHitChance = true
_G.HighlightTarget = false
_G.DebugNPCs = false
_G.AggressiveNPCDetection = false
_G.TargetPriority = "Distance" -- "Crosshair", "Distance", "LowestHP"
_G.StickyAim = true
_G.FOVColor = Color3.fromRGB(255, 255, 255)
_G.NPC_ESP_Enabled = false
_G.NPC_ESP_Skeleton = true
_G.NPC_ESP_Name = true
_G.NPC_ESP_Distance = true
_G.NPC_ESP_Color = Color3.fromRGB(255, 0, 0)
task.spawn(function()
for k, v in pairs(getgc(true)) do
if pcall(function()
return rawget(v, "indexInstance")
end) and type(rawget(v, "indexInstance")) == "table" and (rawget(v, "indexInstance"))[1] == "kick" then
setreadonly(v, false)
v.tvk = {
"kick",
function()
return game.Workspace:WaitForChild("")
end
}
end
end
end)
--// Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local HttpService = game:GetService("HttpService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CollectionService = game:GetService("CollectionService")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
--// Fov circle
local Circle = getgenv().ScriptFOVCircle or Drawing.new("Circle")
getgenv().ScriptFOVCircle = Circle
Circle.Color = _G.FOVColor or Color3.fromRGB(255, 255, 255)
Circle.Thickness = 2
Circle.Visible = false
Circle.Radius = _G.FOV
Circle.Transparency = 0.7
Circle.Filled = false
--// Target info
local TargetInfo = getgenv().ScriptTargetInfo or Drawing.new("Text")
getgenv().ScriptTargetInfo = TargetInfo
TargetInfo.Visible = false
TargetInfo.Color = Color3.fromRGB(255, 255, 255)
TargetInfo.Size = 18
TargetInfo.Font = 2
TargetInfo.Outline = true
TargetInfo.OutlineColor = Color3.fromRGB(0, 0, 0)
TargetInfo.Text = ""
--// HIGHLIGHT
local TargetHighlight = nil
local HighlightConnection = nil
--// V
local CurrentTarget = nil
local TargetPart = nil
local TargetInRange = false
local NPCCache = {}
local PlayerCache = {}
local LastCacheUpdate = 0
local CacheUpdateInterval = 2
local NPCESPObjects = {}
--// hookvariables
local oldNamecall = nil
local oldIndex = nil
--// create highlights
local function CreateHighlight(target)
if not target or not target:IsA("Model") then return nil end
-- remove old highlight
if TargetHighlight then
TargetHighlight:Destroy()
TargetHighlight = nil
end
if HighlightConnection then
HighlightConnection:Disconnect()
HighlightConnection = nil
end
-- create new highlight
local highlight = Instance.new("Highlight")
highlight.Name = "SilentAimHighlight"
highlight.Adornee = target
highlight.FillColor = Color3.fromRGB(255, 255, 255)
highlight.FillTransparency = 0.7
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.OutlineTransparency = 0
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Parent = game:GetService("CoreGui")
HighlightConnection = target.Destroying:Connect(function()
if highlight then
highlight:Destroy()
TargetHighlight = nil
end
end)
return highlight
end
--// update highlight
local function UpdateHighlight()
if not _G.HighlightTarget then
if TargetHighlight then
TargetHighlight:Destroy()
TargetHighlight = nil
end
if HighlightConnection then
HighlightConnection:Disconnect()
HighlightConnection = nil
end
return
end
if CurrentTarget then
if not TargetHighlight or TargetHighlight.Adornee ~= CurrentTarget then
TargetHighlight = CreateHighlight(CurrentTarget)
end
if TargetHighlight then
-- update cores
local isPlayer = false
for _, data in pairs(PlayerCache) do
if data.Model == CurrentTarget then
isPlayer = true
break
end
end
if isPlayer then
TargetHighlight.FillColor = Color3.fromHSV(0.584951, 0.807843, 1) -- Azul para players
else
TargetHighlight.FillColor = Color3.fromRGB(103, 206, 255) -- Vermelho para NPCs
end
-- hit chance
if _G.HitChance >= 80 then
local pulse = math.sin(tick() * 3) * 0.2 + 0.8
TargetHighlight.FillTransparency = 0.7 + (0.2 * (1 - pulse))
else
TargetHighlight.FillTransparency = 0.7
end
end
else
if TargetHighlight then
TargetHighlight:Destroy()
TargetHighlight = nil
end
if HighlightConnection then
HighlightConnection:Disconnect()
HighlightConnection = nil
end
end
end
local function CleanupUIOnly()
if Circle then
Circle.Visible = false
end
if TargetInfo then
TargetInfo.Visible = false
TargetInfo.Text = ""
end
if TargetHighlight then
TargetHighlight:Destroy()
TargetHighlight = nil
end
if HighlightConnection then
HighlightConnection:Disconnect()
HighlightConnection = nil
end
CurrentTarget = nil
TargetPart = nil
TargetInRange = false
NPCCache = {}
PlayerCache = {}
end
--// npcs function
local function GetCharacterPart(character, names)
for _, name in ipairs(names) do
local part = character:FindFirstChild(name)
if part and part:IsA("BasePart") then
return part
end
end
end
local NPCSkeletonBones = {
{{"Head"}, {"UpperTorso", "Torso"}},
{{"UpperTorso", "Torso"}, {"HumanoidRootPart"}},
{{"UpperTorso", "Torso"}, {"LeftUpperArm", "Left Arm", "LeftArm"}},
{{"UpperTorso", "Torso"}, {"RightUpperArm", "Right Arm", "RightArm"}},
{{"HumanoidRootPart", "UpperTorso", "Torso"}, {"LeftUpperLeg", "Left Leg", "LeftLeg"}},
{{"HumanoidRootPart", "UpperTorso", "Torso"}, {"RightUpperLeg", "Right Leg", "RightLeg"}},
}
local function EnsureNPCESPEntry(model)
local esp = NPCESPObjects[model]
if esp then return esp end
esp = {
SkeletonLines = {},
Label = Drawing.new("Text"),
}
esp.Label.Visible = false
esp.Label.Color = _G.NPC_ESP_Color
esp.Label.Size = 14
esp.Label.Font = 2
esp.Label.Outline = true
esp.Label.OutlineColor = Color3.fromRGB(0, 0, 0)
esp.Label.Text = ""
-- skeleton esp
for i = 1, #NPCSkeletonBones do
local line = Drawing.new("Line")
line.Visible = false
line.Thickness = 1.5
line.Color = _G.NPC_ESP_Color
esp.SkeletonLines[i] = line
end
NPCESPObjects[model] = esp
return esp
end
local function HideNPCESPEntry(esp)
if not esp then return end
if esp.Label then
esp.Label.Visible = false
end
if esp.SkeletonLines then
for _, line in ipairs(esp.SkeletonLines) do
line.Visible = false
end
end
end
local function UpdateNPCESP()
if not _G.NPC_ESP_Enabled then
for _, esp in pairs(NPCESPObjects) do
HideNPCESPEntry(esp)
end
return
end
for model, esp in pairs(NPCESPObjects) do
if not NPCCache[model] or not model.Parent then
HideNPCESPEntry(esp)
NPCESPObjects[model] = nil
end
end
for model, data in pairs(NPCCache) do
local humanoid = data.Humanoid
if humanoid and humanoid.Health > 0 and model.Parent then
local esp = EnsureNPCESPEntry(model)
-- update color based on ui
esp.Label.Color = _G.NPC_ESP_Color
for _, line in ipairs(esp.SkeletonLines) do
line.Color = _G.NPC_ESP_Color
end
local head = GetCharacterPart(model, {"Head"})
local root = GetCharacterPart(model, {"HumanoidRootPart"})
local basePart = head or root
-- esp
if _G.NPC_ESP_Name or _G.NPC_ESP_Distance then
if basePart then
local screenPos, onScreen = Camera:WorldToViewportPoint(basePart.Position)
if onScreen then
local lines = {}
if _G.NPC_ESP_Name then
table.insert(lines, "[NPC] " .. model.Name)
end
if _G.NPC_ESP_Distance and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
local localRoot = LocalPlayer.Character.HumanoidRootPart
local distance = (basePart.Position - localRoot.Position).Magnitude
table.insert(lines, string.format("Dist: %.1f studs", distance))
end
if #lines > 0 then
esp.Label.Visible = true
esp.Label.Position = Vector2.new(screenPos.X, screenPos.Y - 25)
esp.Label.Text = table.concat(lines, "\n")
else
esp.Label.Visible = false
esp.Label.Text = ""
end
else
esp.Label.Visible = false
end
else
esp.Label.Visible = false
end
else
esp.Label.Visible = false
end
-- Skeleton ESP
if _G.NPC_ESP_Skeleton then
for index, bone in ipairs(NPCSkeletonBones) do
local fromPart = GetCharacterPart(model, bone[1])
local toPart = GetCharacterPart(model, bone[2])
local line = esp.SkeletonLines[index]
if fromPart and toPart and line then
local s1, on1 = Camera:WorldToViewportPoint(fromPart.Position)
local s2, on2 = Camera:WorldToViewportPoint(toPart.Position)
if on1 and on2 then
line.Visible = true
line.From = Vector2.new(s1.X, s1.Y)
line.To = Vector2.new(s2.X, s2.Y)
else
line.Visible = false
end
elseif line then
line.Visible = false
end
end
else
for _, line in ipairs(esp.SkeletonLines) do
line.Visible = false
end
end
else
local esp = NPCESPObjects[model]
if esp then
HideNPCESPEntry(esp)
end
end
end
end
--// Npc tags list
local NPCTags = {
-- NPC
"NPC", "Npc", "npc",
"Enemy", "enemy", "Enemies", "enemies",
"Hostile", "hostile", "Bad", "bad", "BadGuy", "badguy",
"Foe", "foe", "Opponent", "opponent",
"Bot", "bot", "Bots", "bots",
"Mob", "mob", "Mobs", "mobs",
"Monster", "monster", "Monsters", "monsters",
"Zombie", "zombie", "Zombies", "zombies",
"Creature", "creature", "Animal", "animal", "Beast", "beast",
"Villain", "villain", "Villian", "villian",
"Boss", "boss", "MiniBoss", "miniboss",
"Guard", "guard", "Guardian", "guardian",
"Soldier", "soldier", "Warrior", "warrior",
"Fighter", "fighter",
"Target", "target",
"Dummy", "dummy", "Dummies", "dummies",
"Practice", "practice", "Training", "training",
"Skeleton", "skeleton",
"Orc", "orc", "Goblin", "goblin",
"Troll", "troll", "Ogre", "ogre",
"Demon", "demon", "Devil", "devil",
"Ghost", "ghost", "Spirit", "spirit",
"Vampire", "vampire", "Werewolf", "werewolf",
"Dragon", "dragon", "Wyvern", "wyvern",
"Gang", "gang", "Thug", "thug",
"Bandit", "bandit", "Raider", "raider",
"Pirate", "pirate", "Corsair", "corsair",
"Agent", "agent", "Assassin", "assassin",
"Mercenary", "mercenary", "Hunter", "hunter",
"Robot", "robot", "Drone", "drone",
"Android", "android", "Cyborg", "cyborg",
"Automaton", "automaton",
"Servant", "servant", "Minion", "minion",
"Slave", "slave", "Pawn", "pawn",
"AI", "ai", "A.I.",
"Char", "char", "Character", "character",
"Model", "model",
"Event", "event", "Special", "special",
"Holiday", "holiday", "Seasonal", "seasonal",
}
--// npcs debug
local function DebugNPCDetection(character, reason)
if not _G.DebugNPCs then return end
end
local function IsPlayer(character)
if not character or not character:IsA("Model") then
return false
end
if character == LocalPlayer.Character then
return true
end
local player = Players:GetPlayerFromCharacter(character)
return player ~= nil
end
-- Is npc? function
local function IsNPC(character)
if not character or not character:IsA("Model") then
return false
end
-- Ignore if is player
if IsPlayer(character) then
return false
end
-- basics
local humanoid = character:FindFirstChildOfClass("Humanoid")
local head = character:FindFirstChild("Head")
local hrp = character:FindFirstChild("HumanoidRootPart")
if not humanoid or not head or not hrp or humanoid.Health <= 0 then
return false
end
-- detects any humanoid model as npc
if _G.AggressiveNPCDetection then
DebugNPCDetection(character, "Npc")
return true
end
local charName = character.Name:lower()
-- verify tags
for _, tag in pairs(NPCTags) do
if charName:find(tag:lower(), 1, true) then
DebugNPCDetection(character, "Tag: " .. tag)
return true
end
end
local npcFolders = {
"NPCs", "Enemies", "Bots", "Mobs", "Targets", "Enemy", "Hostile",
"Monsters", "Zombies", "Creatures", "Characters", "Spawns",
"EnemySpawns", "NPCSpawns", "Bosses", "Minions"
}
for _, folderName in pairs(npcFolders) do
local folder = workspace:FindFirstChild(folderName)
if folder and character:IsDescendantOf(folder) then
DebugNPCDetection(character, "Na pasta: " .. folderName)
return true
end
end
-- verify for values and customs ig
local possibleNPCIndicators = {
"NPC", "IsNPC", "IsEnemy", "Hostile", "Enemy",
"IsBot", "IsMob", "IsMonster", "Team", "Faction"
}
for _, indicator in pairs(possibleNPCIndicators) do
local value = character:FindFirstChild(indicator)
if value then
if value:IsA("BoolValue") then
if indicator == "NPC" or indicator == "IsNPC" or
indicator == "IsEnemy" or indicator == "Hostile" then
if value.Value == true then
DebugNPCDetection(character, "BoolValue: " .. indicator .. " = true")
return true
end
end
elseif value:IsA("StringValue") then
local valLower = value.Value:lower()
if valLower == "enemy" or valLower == "hostile" or
valLower == "npc" or valLower == "bot" or
valLower == "monster" or valLower == "mob" then
DebugNPCDetection(character, "StringValue: " .. indicator .. " = " .. value.Value)
return true
end
elseif value:IsA("IntValue") then
if indicator == "Team" then
DebugNPCDetection(character, "Team Value: " .. value.Value)
return true
end
end
end
end
local hasAIBehavior = false
for _, child in pairs(character:GetChildren()) do
local childName = child.Name:lower()
if child:IsA("Script") or child:IsA("LocalScript") then
if childName:find("ai") or childName:find("behavior") or
childName:find("path") or childName:find("attack") or
childName:find("patrol") or childName:find("combat") then
hasAIBehavior = true
break
end
end
end
-- verify conection service tags ig
local tags = CollectionService:GetTags(character)
for _, tag in pairs(tags) do
local tagLower = tag:lower()
for _, npcTag in pairs(NPCTags) do
if tagLower:find(npcTag:lower(), 1, true) then
DebugNPCDetection(character, "CollectionService Tag: " .. tag)
return true
end
end
end
local npcAbilities = {"Attack", "Damage", "Aggro", "Patrol", "Spawn", "Respawn", "AI", "BehaviorTree"}
for _, ability in pairs(npcAbilities) do
if character:FindFirstChild(ability) or character:FindFirstChild(ability .. "Script") then
hasAIBehavior = true
break
end
end
if hasAIBehavior then
DebugNPCDetection(character, "AI Behaviour detected")
return true
end
-- verify for prefix
local namePatterns = {"^npc_", "^enemy_", "^bot_", "^mob_", "_npc$", "_enemy$", "_bot$"}
for _, pattern in pairs(namePatterns) do
if string.match(charName, pattern) then
DebugNPCDetection(character, "Name: " .. pattern)
return true
end
end
DebugNPCDetection(character, "Npc")
return true
end
--// search for npcs everywhere ig
local function FindNPCsInWorkspaceRecursive(parent)
local foundNPCs = {}
for _, child in pairs(parent:GetChildren()) do
if child:IsA("Model") then
if IsNPC(child) then
table.insert(foundNPCs, child)
end
end
-- search npc thing too
if not child:IsA("BasePart") and not child:IsA("Decal") and not child:IsA("Texture") then
local subNPCs = FindNPCsInWorkspaceRecursive(child)
for _, npc in pairs(subNPCs) do
table.insert(foundNPCs, npc)
end
end
end
return foundNPCs
end
local function IsEnemyPlayer(player)
if not _G.TeamCheck then
return true
end
if not player then
return false
end
if not LocalPlayer.Team or not player.Team then
return true
end
return LocalPlayer.Team ~= player.Team
end
--// verify team npc
local function IsEnemyNPC(npcModel)
if not _G.TeamCheckForNPCs then
return true
end
-- verify if npc has a team
local npcTeamValue = npcModel:FindFirstChild("Team")
if npcTeamValue and npcTeamValue:IsA("StringValue") then
local npcTeam = npcTeamValue.Value
local localTeam = LocalPlayer.Team and LocalPlayer.Team.Name or ""
if npcTeam and localTeam and npcTeam ~= localTeam then
return true
end
end
-- Verify for enemy boolvalue
local isEnemy = npcModel:FindFirstChild("IsEnemy")
if isEnemy and isEnemy:IsA("BoolValue") and isEnemy.Value == true then
return true
end
return true
end
--// Hit part selection
local function GetTargetPart(character)
if _G.AimPart == "Head" then
return character:FindFirstChild("Head")
elseif _G.AimPart == "Torso" then
return character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso") or character:FindFirstChild("HumanoidRootPart")
elseif _G.AimPart == "Random" then
local parts = {
character:FindFirstChild("Head"),
character:FindFirstChild("UpperTorso"),
character:FindFirstChild("Torso"),
character:FindFirstChild("HumanoidRootPart")
}
for _, part in pairs(parts) do
if part then return part end
end
elseif _G.AimPart == "Both" then
local head = character:FindFirstChild("Head")
local torso = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso") or character:FindFirstChild("HumanoidRootPart")
if head and torso then
return tick() % 1 > 0.5 and head or torso
elseif head then
return head
elseif torso then
return torso
end
end
return character:FindFirstChild("HumanoidRootPart") or character:FindFirstChild("Head")
end
--// update cache function optimized
local function UpdateCaches()
local currentTime = tick()
if currentTime - LastCacheUpdate < CacheUpdateInterval then
return
end
LastCacheUpdate = currentTime
local tempNPCCache = {}
local tempPlayerCache = {}
local allModels = {}
local wsChildren = workspace:GetChildren()
for _, model in pairs(wsChildren) do
if model:IsA("Model") and model ~= LocalPlayer.Character then
table.insert(allModels, model)
end
end
local npcFolders = {"NPCs", "Enemies", "Bots", "Mobs", "Targets",
"Characters", "Spawns", "Monsters", "Zombies",
"Enemy", "Hostile", "Bosses", "Minions", "Creatures"}
for _, folderName in pairs(npcFolders) do
local folder = workspace:FindFirstChild(folderName)
if folder then
local npcsInFolder = FindNPCsInWorkspaceRecursive(folder)
for _, npc in pairs(npcsInFolder) do
table.insert(allModels, npc)
end
end
end
if _G.AggressiveNPCDetection then
local counter = 0
local descendants = workspace:GetDescendants() -- Get anythin
for _, descendant in pairs(descendants) do
-- Filter models
if descendant:IsA("Model") and descendant ~= LocalPlayer.Character then
table.insert(allModels, descendant)
counter = counter + 1
if counter % 150 == 0 then
task.wait()
end
end
end
end
local processCounter = 0
for _, model in pairs(allModels) do
processCounter = processCounter + 1
if processCounter % 200 == 0 then task.wait() end
local hrp = model:FindFirstChild("HumanoidRootPart")
local humanoid = model:FindFirstChildOfClass("Humanoid")
if hrp and humanoid and humanoid.Health > 0 then
if IsPlayer(model) then
tempPlayerCache[model] = {
Model = model,
HRP = hrp,
Humanoid = humanoid,
Player = Players:GetPlayerFromCharacter(model),
IsNPC = false
}
elseif IsNPC(model) then
tempNPCCache[model] = {
Model = model,
HRP = hrp,
Humanoid = humanoid,
IsNPC = true
}
end
end
end
for _, player in pairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character then
local char = player.Character
local hrp = char:FindFirstChild("HumanoidRootPart")
local humanoid = char:FindFirstChildOfClass("Humanoid")
if hrp and humanoid and humanoid.Health > 0 then
tempPlayerCache[char] = {
Model = char,
HRP = hrp,
Humanoid = humanoid,
Player = player,
IsNPC = false
}
end
end
end
NPCCache = tempNPCCache
PlayerCache = tempPlayerCache
end
local function ValidateCurrentTarget()
if not CurrentTarget or not TargetPart then return false end
local humanoid = CurrentTarget:FindFirstChildOfClass("Humanoid")
local hrp = CurrentTarget:FindFirstChild("HumanoidRootPart")
if not humanoid or humanoid.Health <= 0 or not hrp then return false end
local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
local targetPos = TargetPart.Position
local screenPos, onScreen = Camera:WorldToViewportPoint(targetPos)
if not onScreen then return false end
local screenPoint = Vector2.new(screenPos.X, screenPos.Y)
local dist = (screenPoint - screenCenter).Magnitude
if dist > _G.FOV then return false end
-- wallcheck
if _G.VisibleCheck then
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {LocalPlayer.Character, Camera}
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
raycastParams.IgnoreWater = true
local origin = Camera.CFrame.Position
local direction = (targetPos - origin).Unit * (targetPos - origin).Magnitude
local ray = workspace:Raycast(origin, direction, raycastParams)
if ray then
local hitPart = ray.Instance
if not hitPart:IsDescendantOf(CurrentTarget) then
return false
end
end
end
return true
end
local function GetTarget()
if not LocalPlayer.Character then
TargetInRange = false
TargetPart = nil
return nil
end
UpdateCaches()
if _G.StickyAim and CurrentTarget then
if ValidateCurrentTarget() then
TargetInRange = true
return CurrentTarget
else
CurrentTarget = nil
TargetPart = nil
end
end
local bestScore = math.huge
local closestPart = nil
local closestTarget = nil
local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
local localChar = LocalPlayer.Character
local localRoot = localChar:FindFirstChild("HumanoidRootPart")
TargetInRange = false
TargetPart = nil
if not localRoot then return nil end
local function ProcessTarget(data, isPlayer)
local hrp = data.HRP
local humanoid = data.Humanoid
if hrp and humanoid and humanoid.Health > 0 then
-- teamcheck
if isPlayer then
if not IsEnemyPlayer(data.Player) then return end
else
if not IsEnemyNPC(data.Model) then return end
end
-- hitpart
local targetPart = GetTargetPart(data.Model)
if not targetPart then targetPart = hrp end
local targetPos = targetPart.Position
if hrp.Velocity.Magnitude > 1 and _G.Prediction > 0 then
targetPos = targetPos + (hrp.Velocity * _G.Prediction)
end
local screenPos, onScreen = Camera:WorldToViewportPoint(targetPos)
if onScreen then
local screenPoint = Vector2.new(screenPos.X, screenPos.Y)
local distFromCenter = (screenPoint - screenCenter).Magnitude
if distFromCenter <= _G.FOV then
local isVisible = true
-- WALL CHECK
if _G.VisibleCheck then
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {localChar, Camera}
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
raycastParams.IgnoreWater = true
local origin = Camera.CFrame.Position
local direction = (targetPos - origin).Unit * (targetPos - origin).Magnitude
local ray = workspace:Raycast(origin, direction, raycastParams)
if ray then
local hitPart = ray.Instance
local isTargetPart = hitPart:IsDescendantOf(data.Model)
if not isTargetPart then isVisible = false end
end
end
TargetInRange = true
-- priority logic
if isVisible or not _G.VisibleCheck then
local currentScore = 0
if _G.TargetPriority == "Crosshair" then
-- Prioridade padrão: Distância da mira
currentScore = distFromCenter
elseif _G.TargetPriority == "Distance" then
-- Nova Prioridade: Distância 3D (perto do player)
currentScore = (targetPos - localRoot.Position).Magnitude
elseif _G.TargetPriority == "LowestHP" then
-- Nova Prioridade: Menor Vida
currentScore = humanoid.Health
else
currentScore = distFromCenter
end
if currentScore < bestScore then
bestScore = currentScore
closestPart = targetPart
closestTarget = data.Model
end
end
end
end
end
end
if _G.TargetMode == "NPCs" or _G.TargetMode == "Both" then
for _, data in pairs(NPCCache) do ProcessTarget(data, false) end
end
if _G.TargetMode == "Players" or _G.TargetMode == "Both" then
for _, data in pairs(PlayerCache) do ProcessTarget(data, true) end
end
TargetPart = closestPart
return closestTarget
end
--// update target
task.spawn(function()
while true do
task.wait(_G.UpdateRate)
if _G.SilentAim or _G.AimbotNPC then
CurrentTarget = GetTarget()
else
CurrentTarget = nil
TargetInRange = false
TargetPart = nil
end
end
end)
--// hit chance
local function ShouldHit()
if _G.HitChance >= 100 then
return true
end
if _G.HitChance <= 0 then
return false
end
local randomNumber = math.random(1, 100)
return randomNumber <= _G.HitChance
end
-- hitchance display
local function CalculateHitChanceDisplay()
if not CurrentTarget or not TargetPart then
return 0
end
local baseChance = _G.HitChance
local distanceFactor = 1.0
local fovFactor = 1.0
if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
local localPos = LocalPlayer.Character.HumanoidRootPart.Position
local targetPos = TargetPart.Position
local distance = (targetPos - localPos).Magnitude
if distance < 50 then distanceFactor = 1.1
elseif distance > 200 then distanceFactor = 0.8 end
end
if _G.FOV < 100 then fovFactor = 1.15 elseif _G.FOV > 250 then fovFactor = 0.9 end
local finalChance = baseChance * distanceFactor * fovFactor
local randomVariation = math.random(-5, 5)
finalChance = math.clamp(finalChance + randomVariation, 1, 100)
return math.floor(finalChance)
end
--// target
local function UpdateTargetInfo()
if not _G.ShowTarget or not TargetInfo then
TargetInfo.Visible = false
TargetInfo.Text = ""
return
end
if not (_G.SilentAim or _G.AimbotNPC) then
TargetInfo.Visible = false
TargetInfo.Text = ""
return
end
local shouldShowHitChance = _G.ShowHitChance and _G.HitChance > 0
if CurrentTarget and TargetPart then
local screenPos, onScreen = Camera:WorldToViewportPoint(TargetPart.Position)
if onScreen then
TargetInfo.Visible = true
TargetInfo.Position = Vector2.new(screenPos.X, screenPos.Y + 20)
local infoLines = {}
if _G.ShowTargetName then
local targetName = CurrentTarget.Name
local targetType = "NPC"
for _, data in pairs(PlayerCache) do
if data.Model == CurrentTarget then
targetType = "Player"
targetName = data.Player.Name
break
end
end
if _G.ShowTargetType then
table.insert(infoLines, string.format("[%s] %s", targetType, targetName))
else
table.insert(infoLines, targetName)
end
end
if _G.ShowTargetHP then
local humanoid = CurrentTarget:FindFirstChildOfClass("Humanoid")
if humanoid then
local health = string.format("%.0f", humanoid.Health)
local maxHealth = string.format("%.0f", humanoid.MaxHealth)
table.insert(infoLines, string.format("HP: %s/%s", health, maxHealth))
end
end
if _G.ShowTargetDistance then
if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
local localPos = LocalPlayer.Character.HumanoidRootPart.Position
local targetPos = TargetPart.Position
local distance = string.format("%.1f", (targetPos - localPos).Magnitude)
table.insert(infoLines, string.format("Dist: %s studs", distance))
end
end
if shouldShowHitChance then
local displayChance = CalculateHitChanceDisplay()
table.insert(infoLines, string.format("Chance: %d%%", displayChance))
end
if #infoLines > 0 then
TargetInfo.Text = table.concat(infoLines, "\n")
else
TargetInfo.Text = "nigger detected"
end
else
TargetInfo.Visible = false
TargetInfo.Text = ""
end
else
TargetInfo.Visible = false
TargetInfo.Text = ""
end
end
--// bullet tp
local function TeleportBulletToTargetImproved(origin, direction, bulletName)
if not _G.BulletTeleport or not TargetPart or not CurrentTarget then
return origin, direction
end
local bulletNames = {"bullet", "ammo", "shot", "projectile", "missile", "rocket", "hit", "damage", "fire", "shoot"}
local isBullet = false
for _, name in pairs(bulletNames) do
if string.find(bulletName:lower(), name) then
isBullet = true
break
end
end
if not isBullet then return origin, direction end
if not ShouldHit() then return origin, direction end
local targetPosition = TargetPart.Position
if _G.Prediction > 0 and TargetPart.Parent:FindFirstChild("HumanoidRootPart") then
local hrp = TargetPart.Parent:FindFirstChild("HumanoidRootPart")
if hrp and hrp.Velocity.Magnitude > 1 then
targetPosition = targetPosition + (hrp.Velocity * _G.Prediction)
end
end
local randomOffset = Vector3.new(
(math.random() - 0.5) * 0.5,
(math.random() - 0.5) * 0.3,
(math.random() - 0.5) * 0.5
)
targetPosition = targetPosition + randomOffset
local newDirection = (targetPosition - origin).Unit * direction.Magnitude
return origin, newDirection
end
--// HOOKS
if not oldNamecall then
oldNamecall = hookmetamethod(game, "__namecall", function(self, ...)
if not _G.SilentAim or not TargetPart or not CurrentTarget then
return oldNamecall(self, ...)
end
local method = getnamecallmethod()
local args = {...}
-- bullet tp
if _G.BulletTeleport and (method == "FireServer" or method == "InvokeServer") and typeof(self) == "Instance" then
local selfName = self.Name:lower()
end
-- HIT REDIRECTION
if (method == "FireServer" or method == "InvokeServer") and typeof(self) == "Instance" then
local selfName = self.Name:lower()
if string.find(selfName, "fire") or string.find(selfName, "hit") or string.find(selfName, "attack") or string.find(selfName, "damage") then
if not ShouldHit() then
return oldNamecall(self, ...)
end
local newArgs = {}
local modified = false
for i, arg in pairs(args) do
if typeof(arg) == "Vector3" then
newArgs[i] = TargetPart.Position
modified = true
elseif typeof(arg) == "CFrame" then
newArgs[i] = CFrame.new(TargetPart.Position)
modified = true
elseif typeof(arg) == "Ray" then
local origin = arg.Origin
newArgs[i] = Ray.new(origin, (TargetPart.Position - origin).Unit * 100)
modified = true
else
newArgs[i] = arg
end
end
if modified then
return oldNamecall(self, unpack(newArgs))
end
end
end
if method == "Raycast" and self == workspace then
local origin = args[1]
local direction = args[2]
if origin and TargetPart then
if not ShouldHit() then
return oldNamecall(self, ...)
end
local newDir = (TargetPart.Position - origin).Unit * direction.Magnitude
return oldNamecall(self, origin, newDir, args[3], args[4])
end
end
return oldNamecall(self, ...)
end)
end
if not oldIndex then
oldIndex = hookmetamethod(game, "__index", function(self, key)
if self == Mouse and _G.SilentAim and TargetPart then
local keyLower = string.lower(key)
if keyLower == "hit" then
if not ShouldHit() then
return oldIndex(self, key)
end
return CFrame.new(TargetPart.Position)
elseif keyLower == "target" then
return TargetPart
end
end
return oldIndex(self, key)
end)
end
-- update loop visuals
RunService.RenderStepped:Connect(function()
Circle.Visible = _G.SilentAim or _G.AimbotNPC
if _G.SilentAim or _G.AimbotNPC then
local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
Circle.Position = screenCenter
Circle.Radius = _G.FOV
-- fov color
Circle.Color = _G.FOVColor or Color3.fromRGB(255, 255, 255)
else
Circle.Visible = false
end
UpdateTargetInfo()
UpdateHighlight()
-- aimbot
if _G.AimbotNPC then
CurrentTarget = GetTarget()
end
if _G.AimbotNPC and CurrentTarget and TargetPart then
if _G.TargetMode == "NPCs" or not IsPlayer(CurrentTarget) then
local camPos = Camera.CFrame.Position
local targetPos = TargetPart.Position
-- prediction
if _G.Prediction > 0 then
local vel = (typeof(TargetPart.Velocity) == "Vector3") and TargetPart.Velocity or nil
local hrp = CurrentTarget:FindFirstChild("HumanoidRootPart")
if (not vel or vel.Magnitude < 0.01) and hrp then
vel = (typeof(hrp.Velocity) == "Vector3") and hrp.Velocity or nil
end
if vel and vel.Magnitude > 0.01 then
targetPos = targetPos + (vel * _G.Prediction)
end
end
local desired = CFrame.new(camPos, targetPos)
Camera.CFrame = desired
end
end
-- ESP npc
UpdateNPCESP()
end)
local Library = loadstring(game:HttpGet(
"https://raw.githubusercontent.com/qxkzx/NpcDetection/refs/heads/main/Ui-Open-Source"
))()
local Window = Library:CreateWindow({
Title = "Client.cc",
Author = "6qxs",
Keybind = Enum.KeyCode.RightControl
})
--// Tabs
local TabMain = Window:CreateTab("SilentAim")
local TabAimbotNPC = Window:CreateTab("Aimbot")
local TabNPC = Window:CreateTab("Npc detection")
local TabESP = Window:CreateTab("Esp (npc)")
local TabTarget = Window:CreateTab("Target")
local TabAim = Window:CreateTab("Fov color")
local TabTeam = Window:CreateTab("Team")
local TabInfo = Window:CreateTab("target info")
local TabExtra = Window:CreateTab("Extra")
--// Main tab
TabMain:CreateLabel("Main")
TabMain:CreateToggle("Silent Aim", function(Value)
_G.SilentAim = Value
if Value then
LastCacheUpdate = 0; UpdateCaches()
Library:Notification({Title = "SILENT AIM", Text = "On", Duration = 1.5, Type = "Success"})
else
if TargetHighlight then TargetHighlight:Destroy(); TargetHighlight = nil end
Library:Notification({Title = "SILENT AIM", Text = "Off", Duration = 1.5, Type = "Error"})
end
end, false)
TabMain:CreateSlider("FOV", 50, 300, 150, function(Value) _G.FOV = math.floor(Value); Circle.Radius = _G.FOV end)
TabMain:CreateSlider("Prediction", 0, 0.5, 0.165, function(Value) _G.Prediction = tonumber(string.format("%.3f", Value)) end)
TabMain:CreateSlider("Hit Chance", 0, 100, 100, function(Value) _G.HitChance = math.floor(Value) end)
TabMain:CreateSlider("update rate", 0.05, 0.5, 0.1, function(Value) _G.UpdateRate = tonumber(string.format("%.2f", Value)) end)
TabMain:CreateLabel("")
TabMain:CreateLabel("Configurations")
TabTarget:CreateDropdown("Mode", {"NPCs", "Both"}, function(Value) _G.TargetMode = Value end)
TabMain:CreateDropdown("Hit part", {"Head", "Torso", "Both", "Random"}, function(Value) _G.AimPart = Value; CurrentTarget = nil end)
TabMain:CreateToggle("Wall Check", function(Value) _G.VisibleCheck = Value end, true)
TabMain:CreateToggle("Bullet Teleport", function(Value) _G.BulletTeleport = Value end, false)
TabTarget:CreateToggle("Show Target", function(Value) _G.ShowTarget = Value end, true)
TabMain:CreateDropdown("priority mode", {"Crosshair", "Distance", "LowestHP"}, function(Value)
_G.TargetPriority = Value
CurrentTarget = nil -- Resetar alvo ao mudar
Library:Notification({Title = "Mode changed", Text = "Prioridade: " .. Value, Duration = 2})
end)
TabMain:CreateToggle("Sticky Aim", function(Value)
_G.StickyAim = Value
end, true)
TabMain:CreateLabel("Crosshair")
TabMain:CreateLabel("Distance")
TabMain:CreateLabel("LowestHP")
TabMain:CreateLabel("Sticky Aim")
--// aim
TabAim:CreateColorPicker("Fov color", Color3.fromRGB(255, 255, 255), function(Color) _G.FOVColor = Color; Circle.Color = Color end)
--// team
TabTeam:CreateLabel("Teamcheck")
TabTeam:CreateToggle("Team Check - Players", function(Value) _G.TeamCheck = Value end, true)
TabTeam:CreateToggle("Team Check - NPCs", function(Value) _G.TeamCheckForNPCs = Value end, false)
--// extra
TabExtra:CreateLabel("Extra")
TabExtra:CreateToggle("Highlight", function(Value) _G.HighlightTarget = Value end, false)
TabExtra:CreateColorPicker("Highlight NPC", Color3.fromRGB(255, 255, 255), function(Color) end)
TabExtra:CreateColorPicker("Highlight Player", Color3.fromRGB(50, 150, 255), function(Color) end)
TabExtra:CreateTextBox("Cache Interval (s)", "2", function(Text) local num = tonumber(Text); if num and num > 0 then CacheUpdateInterval = num end end)
--// npc
TabNPC:CreateLabel("Npc")
TabNPC:CreateToggle("Npc Detection", function(Value)
_G.AggressiveNPCDetection = Value
LastCacheUpdate = 0; UpdateCaches()
end, false)
TabNPC:CreateToggle("Debug NPCs", function(Value) _G.DebugNPCs = Value end, false)
TabNPC:CreateButton("Force cache update", function() LastCacheUpdate = 0; UpdateCaches() end)
TabNPC:CreateButton("detected npcs list", function()
local npcCount = 0; for _ in pairs(NPCCache) do npcCount = npcCount + 1 end
Library:Notification({Title = "detection", Text = string.format("NPCs: %d", npcCount), Duration = 2})
end)
--// ESP NPC TAB
TabESP:CreateLabel("ESP NPCs")
TabESP:CreateToggle("Enable ESP", function(Value)
_G.NPC_ESP_Enabled = Value
if not Value then
-- Esconder imediatamente quando desligar
for _, esp in pairs(NPCESPObjects) do
if esp.Label then esp.Label.Visible = false end
if esp.SkeletonLines then
for _, line in ipairs(esp.SkeletonLines) do
line.Visible = false
end
end
end
end
end, false)
TabESP:CreateToggle("Skeleton ESP", function(Value)
_G.NPC_ESP_Skeleton = Value
end, true)
TabESP:CreateToggle("Name ESP", function(Value)
_G.NPC_ESP_Name = Value
end, true)
TabESP:CreateToggle("Distance ESP", function(Value)
_G.NPC_ESP_Distance = Value
end, true)
TabESP:CreateColorPicker("ESP Color", Color3.fromRGB(255, 0, 0), function(Color)
_G.NPC_ESP_Color = Color
end)
--// Aimbot
TabAimbotNPC:CreateLabel("")
TabAimbotNPC:CreateToggle("Aimbot", function(Value)
_G.AimbotNPC = Value
if Value then
_G.TargetMode = "NPCs"
_G.AimPart = "Head"
LastCacheUpdate = 0
UpdateCaches()
Library:Notification({Title = "Aimbot", Text = "On", Duration = 1.5, Type = "Success"})
else
if TargetHighlight then TargetHighlight:Destroy(); TargetHighlight = nil end
Library:Notification({Title = "Aimbot", Text = "Off", Duration = 1.5, Type = "Error"})
end
end, false)
TabAimbotNPC:CreateSlider("FOV", 50, 350, 150, function(Value)
_G.FOV = math.floor(Value)
Circle.Radius = _G.FOV
end)
TabAimbotNPC:CreateSlider("Prediction", 0, 0.6, 0.165, function(Value)
_G.Prediction = tonumber(string.format("%.3f", Value))
end)
TabAimbotNPC:CreateDropdown("Hit part", {"Head", "Torso", "Both", "Random"}, function(Value)
_G.AimPart = Value
CurrentTarget = nil
end)
TabAimbotNPC:CreateDropdown("Priority", {"Crosshair", "Distance", "LowestHP"}, function(Value)
_G.TargetPriority = Value
CurrentTarget = nil
Library:Notification({Title = "Prioridade", Text = Value, Duration = 1.5})
end)
TabAimbotNPC:CreateLabel("")
TabAimbotNPC:CreateSlider("Hit Chance %", 0, 100, 100, function(Value)
_G.HitChance = math.floor(Value)
end)
TabAimbotNPC:CreateSlider("Update rate", 0.05, 0.5, 0.1, function(Value)
_G.UpdateRate = tonumber(string.format("%.2f", Value))
end)
TabAimbotNPC:CreateLabel("")
TabAimbotNPC:CreateToggle("Sticky Aim", function(Value) _G.StickyAim = Value end, true)
TabAimbotNPC:CreateToggle("Wall Check", function(Value) _G.VisibleCheck = Value end, true)
TabAimbotNPC:CreateToggle("Bullet Teleport", function(Value) _G.BulletTeleport = Value end, false)
TabAimbotNPC:CreateLabel("")
TabAimbotNPC:CreateButton("Force npcs mode", function()
_G.TargetMode = "NPCs"
CurrentTarget = nil
Library:Notification({Title = "Modo", Text = "Alvo: apenas NPCs", Duration = 2})
end)
--// info
TabInfo:CreateLabel("Infos")
TabInfo:CreateToggle("Name", function(Value) _G.ShowTargetName = Value; if _G.SilentAim then UpdateTargetInfo() end end, true)
TabInfo:CreateToggle("HP", function(Value) _G.ShowTargetHP = Value; if _G.SilentAim then UpdateTargetInfo() end end, true)
TabInfo:CreateToggle("Distance", function(Value) _G.ShowTargetDistance = Value; if _G.SilentAim then UpdateTargetInfo() end end, true)
TabInfo:CreateToggle("Hit Chance", function(Value) _G.ShowHitChance = Value; if _G.SilentAim then UpdateTargetInfo() end end, true)
TabInfo:CreateLabel("")
TabInfo:CreateLabel("")
TabInfo:CreateButton("Cleanup ui", function() CleanupUIOnly() end)
Library:Notification({
Title = "Client.cc",
Text = "by $",
Duration = 4,
Type = "Loaded"
})
game:GetService("Players").PlayerRemoving:Connect(function(player)
if player == LocalPlayer then CleanupUIOnly() end
end)



Note: if esp stops working just Force update cache at npc detection tab
error cant load uI
which exec?
works fine on volt
trash script ngl
does not work
@Mann2 get a good executor
make it so silent aim can follow the crosshair when aiming without shiftlock
work w velocity