local localPlayer = game.Players.LocalPlayer local camera = workspace.CurrentCamera local runService = game:GetService("RunService") local espBoxes = {} local espNames = {} function getTeamColor(player) if player.Team and typeof(player.TeamColor) == "BrickColor" then return player.TeamColor.Color end return Color3.fromRGB(0, 0, 0) end function createESP(player) if player == localPlayer then return end local box = Drawing.new("Square") box.Thickness = 1 box.Transparency = 1 box.Color = getTeamColor(player) box.Filled = false box.Visible = false espBoxes[player] = box local nameTag = Drawing.new("Text") nameTag.Size = 16 nameTag.Color = getTeamColor(player) nameTag.Center = true nameTag.Outline = true nameTag.Visible = false espNames[player] = nameTag end function removeESP(player) if espBoxes[player] then espBoxes[player]:Remove() espBoxes[player] = nil end if espNames[player] then espNames[player]:Remove() espNames[player] = nil end end for _, player in pairs(game.Players:GetPlayers()) do createESP(player) end game.Players.PlayerAdded:Connect(createESP) game.Players.PlayerRemoving:Connect(removeESP) runService.RenderStepped:Connect(function() for player, box in pairs(espBoxes) do local character = player.Character if character and character:FindFirstChild("HumanoidRootPart") then local hrp = character.HumanoidRootPart local cf = hrp.CFrame local size = Vector3.new(2, 3, 1.5) local points = { cf * Vector3.new(-size.X, size.Y, -size.Z), cf * Vector3.new(size.X, size.Y, -size.Z), cf * Vector3.new(size.X, -size.Y, -size.Z), cf * Vector3.new(-size.X, -size.Y, -size.Z) } local screenPoints = {} local onScreen = true for _, point in ipairs(points) do local screenPos, visible = camera:WorldToViewportPoint(point) if not visible then onScreen = false break end table.insert(screenPoints, screenPos) end if onScreen then local color = getTeamColor(player) box.Color = color espNames[player].Color = color local topLeft = screenPoints[1] local bottomRight = screenPoints[3] local width = bottomRight.X - topLeft.X local height = bottomRight.Y - topLeft.Y box.Size = Vector2.new(width, height) box.Position = Vector2.new(topLeft.X, topLeft.Y) box.Visible = true local nameTag = espNames[player] nameTag.Text = player.Name nameTag.Position = Vector2.new(topLeft.X + width / 2, topLeft.Y - 16) nameTag.Visible = true else box.Visible = false espNames[player].Visible = false end else box.Visible = false if espNames[player] then espNames[player].Visible = false end end end end)