Universal Highlight
Key RequiredUniversal

Universal Highlight

Universal Scriptschlawschlaw 2K views 13.4K executesUpdated Feb 27, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•202 lines (7134 chars)
-- Services
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")

local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
local highlightEnabled = true

-- Colors for different teams
local enemyColor = Color3.fromRGB(255, 50, 50)     -- Red
local teammateColor = Color3.fromRGB(50, 255, 50)  -- Green
local neutralColor = Color3.fromRGB(100, 150, 255) -- Blue

-- Store player highlights
local playerHighlights = {}

-- Get color based on team
local function getTeamColor(player)
    if LocalPlayer.Team and player.Team then
        return LocalPlayer.Team == player.Team and teammateColor or enemyColor
    else
        return neutralColor
    end
end

-- Create highlight for a player
local function createHighlight(player)
    if player == LocalPlayer then return end
    
    local highlight = {
        main = nil,
        nameTag = nil
    }
    
    local function setupCharacter(character)
        if not character then return end
        
        -- Clear old highlight
        if highlight.main then
            highlight.main:Destroy()
        end
        if highlight.nameTag then
            highlight.nameTag:Destroy()
        end
        
        -- Create main highlight
        highlight.main = Instance.new("Highlight")
        highlight.main.Name = "ESP_" .. player.UserId
        highlight.main.Adornee = character
        highlight.main.FillColor = getTeamColor(player)
        highlight.main.FillTransparency = 0.8
        highlight.main.OutlineColor = getTeamColor(player)
        highlight.main.OutlineTransparency = 0
        highlight.main.Enabled = highlightEnabled
        highlight.main.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
        highlight.main.Parent = character
        
        -- Create name tag
        local head = character:WaitForChild("Head", 2)
        if head then
            local nameTag = Instance.new("BillboardGui")
            nameTag.Name = "NameTag_" .. player.UserId
            nameTag.Adornee = head
            nameTag.AlwaysOnTop = true
            nameTag.StudsOffset = Vector3.new(0, 2.5, 0)
            nameTag.MaxDistance = 0  -- Infinite distance
            
            -- Simple text label (no background)
            local nameLabel = Instance.new("TextLabel")
            nameLabel.Name = "Label"
            nameLabel.Size = UDim2.new(0, 100, 0, 20)
            nameLabel.BackgroundTransparency = 1
            nameLabel.Text = player.Name
            nameLabel.TextColor3 = getTeamColor(player)
            nameLabel.TextStrokeColor3 = Color3.new(0, 0, 0)
            nameLabel.TextStrokeTransparency = 0.2
            nameLabel.Font = Enum.Font.GothamMedium
            nameLabel.TextScaled = true  -- Allow text scaling
            nameLabel.TextXAlignment = Enum.TextXAlignment.Center
            nameLabel.TextYAlignment = Enum.TextYAlignment.Center
            
            nameLabel.Parent = nameTag
            nameTag.Parent = head
            
            highlight.nameTag = nameTag
            nameTag.Enabled = highlightEnabled
        end
    end
    
    -- Setup initial character
    if player.Character then
        setupCharacter(player.Character)
    end
    
    -- Listen for character changes
    player.CharacterAdded:Connect(function(character)
        setupCharacter(character)
    end)
    
    playerHighlights[player] = highlight
end

-- Update name sizes based on distance
RunService.RenderStepped:Connect(function()
    if not highlightEnabled then return end
    
    for player, highlight in pairs(playerHighlights) do
        if highlight.nameTag and player.Character then
            local head = player.Character:FindFirstChild("Head")
            if head and highlight.nameTag.Enabled then
                -- Calculate distance from camera to player
                local distance = (head.Position - Camera.CFrame.Position).Magnitude
                
                -- Get the name label
                local nameLabel = highlight.nameTag:FindFirstChild("Label")
                if nameLabel then
                    -- Scale text size based on distance
                    -- Closer = smaller text, farther = larger text
                    local baseSize = 100  -- Base size at 0 distance
                    local minSize = 80    -- Minimum size (very close)
                    local maxSize = 150   -- Maximum size (far away)
                    
                    -- Calculate size (inverse relationship: closer = smaller)
                    local scaleFactor = math.clamp(distance / 100, 0.5, 2.0)
                    local calculatedSize = math.clamp(baseSize * scaleFactor, minSize, maxSize)
                    
                    -- Update the BillboardGui size
                    highlight.nameTag.Size = UDim2.new(0, calculatedSize, 0, calculatedSize * 0.2)
                    
                    -- Update text size based on distance
                    -- Text gets smaller as you get closer
                    local textSize = math.clamp(14 - (distance / 50), 8, 16)
                    nameLabel.TextSize = textSize
                end
            end
        end
    end
end)

-- Toggle highlights
UserInputService.InputBegan:Connect(function(input)
    if input.KeyCode == Enum.KeyCode.RightBracket then
        highlightEnabled = not highlightEnabled
        
        -- Update all highlights
        for player, highlight in pairs(playerHighlights) do
            if highlight.main then
                highlight.main.Enabled = highlightEnabled
            end
            if highlight.nameTag then
                highlight.nameTag.Enabled = highlightEnabled
            end
        end
        
        print("Player Highlights: " .. (highlightEnabled and "ON" or "OFF"))
    end
end)

-- Initialize highlights for existing players
for _, player in pairs(Players:GetPlayers()) do
    createHighlight(player)
end

-- Handle new players
Players.PlayerAdded:Connect(function(player)
    createHighlight(player)
end)

-- Clean up when players leave
Players.PlayerRemoving:Connect(function(player)
    if playerHighlights[player] then
        local highlight = playerHighlights[player]
        if highlight.main then
            highlight.main:Destroy()
        end
        if highlight.nameTag then
            highlight.nameTag:Destroy()
        end
        playerHighlights[player] = nil
    end
end)

-- Update team colors when teams change
local function updateAllColors()
    for player, highlight in pairs(playerHighlights) do
        if highlight.main then
            highlight.main.FillColor = getTeamColor(player)
            highlight.main.OutlineColor = getTeamColor(player)
        end
        if highlight.nameTag then
            local label = highlight.nameTag:FindFirstChild("Label")
            if label then
                label.TextColor3 = getTeamColor(player)
            end
        end
    end
end

-- Listen for team changes
LocalPlayer:GetPropertyChangedSignal("Team"):Connect(updateAllColors)

Features & Information

Best Highlight Script On the Web. Toggle by pressing ] Features 1-Works for infinite distances! 2-Completely Universal! 3-Has team colours! 4-Has usernames! 5-Has username scaling!
#Esp#Highlight#Chams#Universal#Universal Esp

Community Comments (3)

schlawschlawFeb 27, 2026

Guys if theres a problem tell me here

orbit167orbit167Feb 27, 2026

chatgpt detected

Replying to @orbit167
schlawschlawMar 1, 2026

@orbit167 deepseek.it works perectly tho

More Scripts for Universal Scripts