ESP
Key RequiredUniversal

ESP

Universal ScriptLurIsAqtLurIsAqt 887 views 74 executesUpdated Jan 29, 2026
2.5/ 5(2 votes)
1150% Positive
Lua Script•155 lines (4656 chars)
--// Simple ESP 2025-2026 version
--// Put in LocalScript (StarterPlayerScripts / Backpack / etc)

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

local ESP_SETTINGS = {
    Enabled = true,
    
    -- Visuals
    Box_Thickness = 1.5,
    Box_Color = Color3.fromRGB(255, 80, 80),
    Tracer_Thickness = 1,
    Tracer_Color = Color3.fromRGB(255, 80, 80),
    Tracer_Origin = "Bottom",          -- "Top", "Bottom", "Mouse", "Center"
    
    -- Text
    ShowName = true,
    ShowHealth = true,
    ShowDistance = true,
    Text_Size = 13,
    Text_Color = Color3.fromRGB(255, 255, 255),
    Text_Outline = true,
    
    -- Team check
    TeamCheck = true,                  -- set false to see teammates too
    MaxDistance = 2500,
}

-- ────────────────────────────────────────────────

local function createBox()
    local box = Drawing.new("Square")
    box.Thickness = ESP_SETTINGS.Box_Thickness
    box.Color = ESP_SETTINGS.Box_Color
    box.Filled = false
    box.Transparency = 1
    box.Visible = false
    return box
end

local function createTracer()
    local tracer = Drawing.new("Line")
    tracer.Thickness = ESP_SETTINGS.Tracer_Thickness
    tracer.Color = ESP_SETTINGS.Tracer_Color
    tracer.Transparency = 1
    tracer.Visible = false
    return tracer
end

local function createText()
    local text = Drawing.new("Text")
    text.Size = ESP_SETTINGS.Text_Size
    text.Color = ESP_SETTINGS.Text_Color
    text.Outline = ESP_SETTINGS.Text_Outline
    text.Center = true
    text.Visible = false
    return text
end

local espCache = {}

local function removeESP(plr)
    if espCache[plr] then
        for _, obj in pairs(espCache[plr]) do
            obj:Remove()
        end
        espCache[plr] = nil
    end
end

local function addESP(plr)
    if plr == LocalPlayer then return end
    if espCache[plr] then return end
    
    local box    = createBox()
    local tracer = createTracer()
    local name   = createText()
    local info   = createText()
    
    espCache[plr] = {box = box, tracer = tracer, name = name, info = info}
    
    local con
    con = plr.CharacterRemoving:Connect(function()
        removeESP(plr)
        con:Disconnect()
    end)
end

-- Initial players
for _, plr in ipairs(Players:GetPlayers()) do
    task.spawn(addESP, plr)
end

Players.PlayerAdded:Connect(addESP)
Players.PlayerRemoving:Connect(removeESP)

RunService.RenderStepped:Connect(function()
    if not ESP_SETTINGS.Enabled then
        for _, data in pairs(espCache) do
            for k,v in pairs(data) do v.Visible = false end
        end
        return
    end

    for plr, drawings in pairs(espCache) do
        local char = plr.Character
        if not char then 
            for k,v in pairs(drawings) do v.Visible = false end
            continue 
        end
        
        local hrp = char:FindFirstChild("HumanoidRootPart")
        local hum = char:FindFirstChildOfClass("Humanoid")
        if not hrp or not hum or hum.Health <= 0 then
            for k,v in pairs(drawings) do v.Visible = false end
            continue
        end
        
        if ESP_SETTINGS.TeamCheck and plr.Team == LocalPlayer.Team then
            for k,v in pairs(drawings) do v.Visible = false end
            continue
        end
        
        local rootPos, onScreen = Camera:WorldToViewportPoint(hrp.Position)
        local headPos = Camera:WorldToViewportPoint(hrp.Position + Vector3.new(0, 3, 0))
        local legPos  = Camera:WorldToViewportPoint(hrp.Position - Vector3.new(0, 3.5, 0))
        
        if not onScreen then
            for k,v in pairs(drawings) do v.Visible = false end
            continue
        end
        
        local distance = (LocalPlayer.Character.HumanoidRootPart.Position - hrp.Position).Magnitude
        if distance > ESP_SETTINGS.MaxDistance then
            for k,v in pairs(drawings) do v.Visible = false end
            continue
        end
        
        -- Box
        local boxHeight = math.abs(headPos.Y - legPos.Y)
        local boxWidth = boxHeight * 0.55
        
        drawings.box.Size = Vector2.new(boxWidth, boxHeight)
        drawings.box.Position = Vector2.new(rootPos.X - boxWidth/2, rootPos.Y - boxHeight/2)
        drawings.box.Visible = true
        
        -- Tracer
        local tracerFrom
        if ESP_SETTINGS.Tracer_Origin == "Bottom" then
            tracerFrom = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
        elseif ESP_SETTINGS.Tracer_Origin == "Top" then
            tracerFrom = Vector2.new(Camera.ViewportSize.X /

Features & Information

WORKING ESP

Community Comments (5)

LurIsAqtLurIsAqtJan 29, 2026

c00l esp

AkoutiAkoutiJan 29, 2026

Stealef by bilo

AkoutiAkoutiJan 29, 2026

Stealer use by bilo

Replying to @Akouti
LurIsAqtLurIsAqtJan 29, 2026

@Akouti no i didnt,i dont know who tf that is

xyrevexxyrevexFeb 1, 2026

AI

More Scripts for Universal Scripts