-- ESP ULTRA OPTIMIZADO (SIN LAG + Muertos + Nunca se desactiva AL MORIR) -- SINGLE LOOP (1 conexión total), Distancia límite, Limpieza auto, _G para no duplicados -- Muestra TODO el tiempo (incluso muerto tú: distancia "???"), Font pequeña, Bajo uso CPU local Players = game:GetService("Players") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera -- Globals para persistencia y no duplicados _G.ESP = _G.ESP or {} local ESP = _G.ESP -- Colores local TeamColor = Color3.fromRGB(0, 255, 0) -- Verde aliados vivos local EnemyColor = Color3.fromRGB(255, 0, 0) -- Rojo enemigos vivos local DeadColor = Color3.fromRGB(128, 128, 128) -- Gris muertos local BoxThickness = 1.5 -- Más delgado local MaxDist = 1000 -- Oculta texto si >1000 studs (pero box se ve) -- LIMPIEZA INICIAL (evita duplicados/lag acumulado) for player, data in pairs(ESP) do if data.Box then data.Box:Remove() end if data.Name then data.Name:Remove() end ESP[player] = nil end -- FUNCIÓN para crear drawings de un jugador (solo UNA vez) local function CreateDrawings(player) if ESP[player] then return end local Box = Drawing.new("Square") Box.Thickness = BoxThickness Box.Filled = false Box.Transparency = 1 Box.Visible = false local Name = Drawing.new("Text") Name.Size = 14 -- Más pequeño (menos lag) Name.Center = true Name.Outline = true Name.Font = 2 Name.Visible = false ESP[player] = {Box = Box, Name = Name} end -- FUNCIÓN para remover drawings local function RemoveDrawings(player) local data = ESP[player] if data then if data.Box then data.Box:Remove() end if data.Name then data.Name:Remove() end ESP[player] = nil end end -- SINGLE LOOP ULTRA OPTIMIZADO (¡1 sola conexión para TODOS los jugadores!) _G.UpdateConnection = _G.UpdateConnection if _G.UpdateConnection then _G.UpdateConnection:Disconnect() end _G.UpdateConnection = RunService.RenderStepped:Connect(function() local myRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local myPos = myRoot and myRoot.Position for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local char = player.Character if not char then RemoveDrawings(player) -- Limpia si no tiene char continue end local root = char:FindFirstChild("HumanoidRootPart") local head = char:FindFirstChild("Head") local humanoid = char:FindFirstChild("Humanoid") if not root or not head then RemoveDrawings(player) continue end -- Crear drawings si no existen CreateDrawings(player) local data = ESP[player] local screenPos, onScreen = Camera:WorldToViewportPoint(root.Position) if not onScreen then data.Box.Visible = false data.Name.Visible = false return end -- Tamaño dinámico local headPos = Camera:WorldToViewportPoint(head.Position + head.Size/2) local footPos = Camera:WorldToViewportPoint(root.Position - Vector3.new(0, 4, 0)) local boxHeight = math.abs(headPos.Y - footPos.Y) local boxWidth = boxHeight * 0.5 if boxHeight < 10 then -- Muy lejos/pequeño = ocultar data.Box.Visible = false data.Name.Visible = false return end -- Posición y tamaño data.Box.Size = Vector2.new(boxWidth, boxHeight) data.Box.Position = Vector2.new(screenPos.X - boxWidth/2, screenPos.Y - boxHeight/2) -- Distancia (??? si estás muerto) local distance = myPos and math.floor((myPos - root.Position).Magnitude) or 999 if distance > MaxDist then distance = 999 end -- Estado vivo/muerto local isDead = humanoid and humanoid.Health <= 0 local color = (player.Team == LocalPlayer.Team and player.Team) and TeamColor or EnemyColor local status = isDead and " DEAD" or "" if isDead then color = DeadColor end -- Aplicar data.Box.Color = color data.Name.Color = color data.Name.Text = string.format("%s%s [%s]", player.Name, status, distance >= 999 and "???" or tostring(distance)) data.Name.Position = Vector2.new(screenPos.X, screenPos.Y - boxHeight/2 - 18) data.Box.Visible = true data.Name.Visible = true end end) -- Limpieza cuando jugador sale Players.PlayerRemoving:Connect(function(player) RemoveDrawings(player) end) print("ESP ULTRA LAG-FREE cargado! 🔥 (Single loop + Limpieza auto + Persistente FOREVER)") print("Muestra muertos, distancia ??? cuando tú mueres, oculta lejos/pequeños.")