--------------------------------------------------------------------------- -- Ultimate ESP :3 --------------------------------------------------------------------------- local Settings = { -- ESP ShowOutline = true, -- Enables player outline OutlineTransparency = 0.2, -- Outline transparency FillTransparency = 0.6, -- Fill transparency AlwaysOnTopHighlight = true, -- Visible through walls RainbowOutline = false, -- So gaemer effect -- Text ShowBillboard = true, -- Enables text ESP ShowNames = true, -- Shows player names ShowHealth = true, -- Shows player health ShowHealthPercent = true, -- Shows health percentage ShowItem = true, -- Shows equipped tool ShowDistanceInStuds = true, -- Shows distance ShowTeam = false, -- Shows team name TextStroke = true, -- Enables text outline TextSize = 5, -- Text size BillboardSize = UDim2.new(0, 160, 0, 60), BillboardOffset = Vector3.new(0, 2.8, 0), AlwaysOnTopBillboard = true, -- Text visible through walls DefaultTextColor = Color3.fromRGB(255,255,255), -- Other HideLocalPlayer = true, -- Hides ESP on yourself MaxDistance = 1000, -- Maximum ESP distance (recommended something lower than 10000) -- Dont touch HighlightName = "PlayerHighlight", BillboardName = "PlayerInfo", } -- .__ __ -- ______ ___________|__|______/ |_ -- / ___// ___\_ __ \ \____ \ __\ -- \___ \\ \___| | \/ | |_> > | --/____ >\___ >__| |__| __/|__| -- \/ \/ |__| --------------------------------------------------------------------------- local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer --------------------------------------------------------------------------- local function removeOldInstances(character) local oldHighlight = character:FindFirstChild(Settings.HighlightName) if oldHighlight then oldHighlight:Destroy() end local head = character:FindFirstChild("Head") if head then local oldBillboard = head:FindFirstChild(Settings.BillboardName) if oldBillboard then oldBillboard:Destroy() end end end local function updateOutlineColor(highlight, humanoid) if not highlight or not humanoid then return end local healthPercent = math.clamp(humanoid.Health / humanoid.MaxHealth, 0, 1) local red = 1 - healthPercent local green = healthPercent highlight.OutlineColor = Color3.new(red, green, 0) end local function updateInfoText(label, humanoid, character, player) if not label then return end local lines = {} if Settings.ShowNames then table.insert(lines, player.Name) end if Settings.ShowTeam and player.Team then table.insert(lines, "[" .. player.Team.Name .. "]") end if Settings.ShowHealth and humanoid then local healthText = math.floor(humanoid.Health) .. "/" .. math.floor(humanoid.MaxHealth) if Settings.ShowHealthPercent then local percent = math.floor((humanoid.Health / humanoid.MaxHealth) * 100) healthText = healthText .. " (" .. percent .. "%)" end table.insert(lines, healthText) end if Settings.ShowItem then local equippedTool = "None" for _, obj in pairs(character:GetChildren()) do if obj:IsA("Tool") then equippedTool = obj.Name break end end table.insert(lines, equippedTool) end if Settings.ShowDistanceInStuds then local localCharacter = LocalPlayer.Character if localCharacter and localCharacter:FindFirstChild("HumanoidRootPart") then local targetHRP = character:FindFirstChild("HumanoidRootPart") if targetHRP then local distance = (localCharacter.HumanoidRootPart.Position - targetHRP.Position).Magnitude table.insert( lines, math.floor(distance) .. " studs" ) end end end label.Text = table.concat(lines, "\n") end local function setupCharacter(player, character) local humanoid = character:WaitForChild("Humanoid") local head = character:WaitForChild("Head") removeOldInstances(character) local highlight if Settings.ShowOutline then highlight = Instance.new("Highlight") highlight.Name = Settings.HighlightName highlight.DepthMode = Settings.AlwaysOnTopHighlight and Enum.HighlightDepthMode.AlwaysOnTop or Enum.HighlightDepthMode.Occluded highlight.FillTransparency = Settings.FillTransparency highlight.OutlineTransparency = Settings.OutlineTransparency if player.Team then highlight.FillColor = player.Team.TeamColor.Color else highlight.FillColor = Settings.DefaultTextColor end highlight.Parent = character if Settings.RainbowOutline then task.spawn(function() while highlight and highlight.Parent do local hue = tick() % 5 / 5 highlight.OutlineColor = Color3.fromHSV(hue,1,1) task.wait() end end) else updateOutlineColor(highlight, humanoid) end end local textLabel if Settings.ShowBillboard then local billboard = Instance.new("BillboardGui") billboard.Name = Settings.BillboardName billboard.Size = Settings.BillboardSize billboard.StudsOffset = Settings.BillboardOffset billboard.AlwaysOnTop = Settings.AlwaysOnTopBillboard billboard.Parent = head textLabel = Instance.new("TextLabel") textLabel.Size = UDim2.new(1,0,1,0) textLabel.BackgroundTransparency = 1 textLabel.TextScaled = true textLabel.TextSize = Settings.TextSize textLabel.Font = Enum.Font.GothamBold textLabel.TextStrokeTransparency = Settings.TextStroke and 0 or 1 if player.Team then textLabel.TextColor3 = player.Team.TeamColor.Color else textLabel.TextColor3 = Settings.DefaultTextColor end textLabel.Parent = billboard updateInfoText( textLabel, humanoid, character, player ) end humanoid.HealthChanged:Connect(function() if highlight and not Settings.RainbowOutline then updateOutlineColor(highlight, humanoid) end if textLabel then updateInfoText( textLabel, humanoid, character, player ) end end) player:GetPropertyChangedSignal("Team"):Connect(function() local color = player.Team and player.Team.TeamColor.Color or Settings.DefaultTextColor if highlight then highlight.FillColor = color end if textLabel then textLabel.TextColor3 = color end end) character.ChildAdded:Connect(function(child) if child:IsA("Tool") and textLabel then updateInfoText( textLabel, humanoid, character, player ) end end) character.ChildRemoved:Connect(function(child) if child:IsA("Tool") and textLabel then updateInfoText( textLabel, humanoid, character, player ) end end) RunService.RenderStepped:Connect(function() if not character or not character.Parent then return end local localCharacter = LocalPlayer.Character if not localCharacter then return end local localHRP = localCharacter:FindFirstChild("HumanoidRootPart") local targetHRP = character:FindFirstChild("HumanoidRootPart") if not localHRP or not targetHRP then return end local distance = (localHRP.Position - targetHRP.Position).Magnitude local visible = distance <= Settings.MaxDistance if highlight then highlight.Enabled = visible end if textLabel then textLabel.Visible = visible updateInfoText( textLabel, humanoid, character, player ) end end) end local function setupPlayer(player) if Settings.HideLocalPlayer and player == LocalPlayer then return end if player.Character then setupCharacter(player, player.Character) end player.CharacterAdded:Connect(function(character) setupCharacter(player, character) end) end for _, player in pairs(Players:GetPlayers()) do setupPlayer(player) end Players.PlayerAdded:Connect(setupPlayer)