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