Ultimate ESP
Key RequiredUniversal

Ultimate ESP

Universal ScriptChakyCooler72ChakyCooler72 546 views 520 executesUpdated May 15, 2026
Unrated
00
Lua Script•436 lines (7893 chars)
---------------------------------------------------------------------------

-- 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)

Features & Information

- Outlines that show health - Can show names, heath, tools, distance, team.
#esp

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts