SCP PROJECT TEAM NAME ESP
Key Required

SCP PROJECT TEAM NAME ESP

Project: SCPdereksseptini20dereksseptini20 2.1K views 29 executesUpdated Nov 9, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•157 lines (5165 chars)
-- Opponent Team ESP with distance-based scaling (Final Fixed Version)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Teams = game:GetService("Teams")
local CurrentCamera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer
 
local FOV_OFFSET = Vector3.new(0, 3, 0)
local espFrames = {} -- [player] = TextLabel
 
-- Script I made with chat gpt in like 10 mins so enjoy made by roblox "Dereks_altz"
-- Enjoy!
 
-- Scaling config
local MAX_DISTANCE = 100000 -- farthest distance considered
local MIN_SCALE = 0.5    -- smallest text scale
local MAX_SCALE = 2.0    -- largest text scale
 
-- Create GUI
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "OpponentTeamESP"
screenGui.ResetOnSpawn = false
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
 
-- Create a TextLabel for a player
local function CreateTeamLabel(player, teamName, color)
    local label = Instance.new("TextLabel")
    label.Size = UDim2.new(0, 120, 0, 24)
    label.BackgroundTransparency = 1
    label.TextColor3 = color or Color3.new(1, 1, 1)
    label.Text = teamName or "Neutral"
    label.TextScaled = true
    label.Font = Enum.Font.SourceSansBold
    label.Parent = screenGui
    return label
end
 
-- Safely get player's team name
local function GetPlayerTeamName(player)
    -- Custom attribute support
    local attrTeam = player:GetAttribute("teamname")
    if attrTeam and attrTeam ~= "" then
        return attrTeam
    end
 
    -- Fallback to Roblox Team property
    if player.Team then
        return player.Team.Name
    end
 
    -- No team
    return nil
end
 
-- Safely get team color
local function GetTeamColorFromService(teamName)
    if not teamName then
        return Color3.new(1, 1, 1)
    end
    for _, team in ipairs(Teams:GetTeams()) do
        if team.Name == teamName then
            return team.TeamColor.Color
        end
    end
    return Color3.new(1, 1, 1)
end
 
local function WorldToScreen(part)
    if not part then return nil end
    local pos, onScreen = CurrentCamera:WorldToViewportPoint(part.Position + FOV_OFFSET)
    if onScreen then
        return Vector2.new(pos.X, pos.Y), pos.Z
    end
end
 
-- Main ESP loop
local function UpdateESP()
    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= LocalPlayer then
            local char = player.Character
            if char then
                local head = char:FindFirstChild("Head")
                if head then
                    local teamName = GetPlayerTeamName(player)
                    local localTeam = GetPlayerTeamName(LocalPlayer)
 
                    -- Only show ESP for opponents, or neutral players if local has a team
                    if teamName and (not localTeam or teamName ~= localTeam) then
                        local color = GetTeamColorFromService(teamName)
                        if not espFrames[player] then
                            espFrames[player] = CreateTeamLabel(player, teamName, color)
                        end
 
                        local label = espFrames[player]
                        label.Text = teamName or "Neutral"
                        label.TextColor3 = color
 
                        local screenPos, depth = WorldToScreen(head)
                        if screenPos then
                            label.Position = UDim2.new(0, screenPos.X - 60, 0, screenPos.Y - 12)
                            label.Visible = true
 
                            -- Distance-based scaling
                            local distance = (head.Position - CurrentCamera.CFrame.Position).Magnitude
                            local scaleFactor = math.clamp(MAX_DISTANCE / distance, MIN_SCALE, MAX_SCALE)
                            label.TextSize = math.floor(18 * scaleFactor)
                        else
                            label.Visible = false
                        end
                    else
                        if espFrames[player] then
                            espFrames[player].Visible = false
                        end
                    end
                end
            end
        end
    end
end
 
-- Handle new players and respawns
local function HandleCharacter(player)
    local function CreateOrUpdateESP()
        task.wait(1) -- ensure character fully loads
        local teamName = GetPlayerTeamName(player)
        local color = GetTeamColorFromService(teamName)
 
        -- Always refresh label
        if espFrames[player] then
            espFrames[player]:Destroy()
        end
        espFrames[player] = CreateTeamLabel(player, teamName, color)
    end
 
    if player.Character then
        CreateOrUpdateESP()
    end
 
    player.CharacterAdded:Connect(CreateOrUpdateESP)
end
 
-- Initialize existing players
for _, player in ipairs(Players:GetPlayers()) do
    HandleCharacter(player)
end
 
-- Detect join/leave
Players.PlayerAdded:Connect(HandleCharacter)
Players.PlayerRemoving:Connect(function(player)
    if espFrames[player] then
        espFrames[player]:Destroy()
        espFrames[player] = nil
    end
end)
 
-- Update every frame
RunService.RenderStepped:Connect(UpdateESP)

Features & Information

Team name esp. takes a bit to load shows all roles of player above the actual player

Community Comments (6)

DolbaebDolbaebNov 16, 2025

detected

Replying to @Dolbaeb

@Dolbaeb 'detected' bro it is NOT detected

idkbro1448idkbro1448Feb 22, 2026

Do not use it detected

Replying to @idkbro1448
JupiterrrJupiterrrFeb 24, 2026

@idkbro1448 it ban u?

*gf*gfMar 8, 2026

its def detected now

not detected, just broken

More Scripts for Project: SCP