local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera --credits by azure local TOGGLE_KEY = Enum.KeyCode.Q local enabled = false local AimPart = "Head" local Smoothness = 0.3 local FOV = 100 local ESP_CACHE = {} local function IsEnemy(player) return player.Team ~= LocalPlayer.Team end local function GetClosestEnemy() local closest local shortest = FOV for _, plr in pairs(Players:GetPlayers()) do if plr ~= LocalPlayer and IsEnemy(plr) and plr.Character and plr.Character:FindFirstChild(AimPart) then local screenPos, onScreen = Camera:WorldToViewportPoint(plr.Character[AimPart].Position) if onScreen then local dist = (Vector2.new(screenPos.X, screenPos.Y) - Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)).Magnitude if dist < shortest then closest = plr shortest = dist end end end end return closest end local function AimAt(part) local dir = (part.Position - Camera.CFrame.Position).Unit Camera.CFrame = CFrame.new(Camera.CFrame.Position, Camera.CFrame.Position + dir * Smoothness) end local function UpdateESP(plr) if plr.Character then local root = plr.Character:FindFirstChild("HumanoidRootPart") or plr.Character:FindFirstChild("Torso") if root then if not ESP_CACHE[plr] then local billboard = Instance.new("BillboardGui") billboard.Name = "SmallNameTag" billboard.Adornee = root billboard.Size = UDim2.new(0,80,0,20) billboard.StudsOffset = Vector3.new(0,2.5,0) billboard.AlwaysOnTop = true billboard.Parent = root local nameLabel = Instance.new("TextLabel") nameLabel.Size = UDim2.new(1,0,1,0) nameLabel.BackgroundTransparency = 1 nameLabel.Text = plr.Name nameLabel.TextColor3 = plr.TeamColor.Color nameLabel.TextScaled = true nameLabel.Font = Enum.Font.SourceSansBold nameLabel.Parent = billboard ESP_CACHE[plr] = billboard else ESP_CACHE[plr].Adornee = root ESP_CACHE[plr].Parent = root end end end end local function RemoveESP(plr) if ESP_CACHE[plr] then ESP_CACHE[plr]:Destroy() ESP_CACHE[plr] = nil end end Players.PlayerAdded:Connect(function(plr) plr.CharacterAdded:Connect(function() UpdateESP(plr) end) end) for _, plr in pairs(Players:GetPlayers()) do plr.CharacterAdded:Connect(function() UpdateESP(plr) end) end UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.KeyCode == TOGGLE_KEY then enabled = not enabled end end) RunService.RenderStepped:Connect(function() for _, plr in pairs(Players:GetPlayers()) do if plr ~= LocalPlayer and IsEnemy(plr) and plr.Character then UpdateESP(plr) else RemoveESP(plr) end end if enabled then local target = GetClosestEnemy() if target and target.Character then AimAt(target.Character[AimPart]) end end end)