BILLBOARD ESP Opened source
Key Required

BILLBOARD ESP Opened source

Evade ItzPnsdgItzPnsdg 1.2K views 58 executesUpdated Mar 22, 2026
Unrated
00
Lua Script•1409 lines (35654 chars)
WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
Window = WindUI:CreateWindow({
    Title = "",
    Icon = "",
    Author = "",
    Size = UDim2.fromOffset(580, 490),
    Theme = "Dark",
    HidePanelBackground = false,
    HideSearchBar = true,
    SideBarWidth = 200
})
Tabs = {
    ESP = Window:Tab({ 
        Title = "", 
        Icon = "" 
    })  
}
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer

playerEspElements = {}
nextbotEspElements = {}
downedEspElements = {}
ticketEspElements = {}
vehicleEspElements = {}

playerBoxesEnabled = false
playerNamesEnabled = false
playerDistanceEnabled = false
playerHighlightsEnabled = false
playerBoxType = "2D"

nextbotBoxesEnabled = false
nextbotNamesEnabled = false
nextbotDistanceEnabled = false
nextbotHighlightsEnabled = false
nextbotBoxType = "2D"

downedBoxesEnabled = false
downedNamesEnabled = false
downedDistanceEnabled = false
downedHighlightsEnabled = false
downedBoxType = "2D"

ticketBoxesEnabled = false
ticketNamesEnabled = false
ticketDistanceEnabled = false
ticketHighlightsEnabled = false
ticketBoxType = "2D"

vehicleBoxesEnabled = false
vehicleNamesEnabled = false
vehicleDistanceEnabled = false
vehicleHighlightsEnabled = false
vehicleBoxType = "2D"

innocentBots = {"Turkey", "Lupen"}
isRendering = true
windowFocused = true

function isInnocentBot(modelName)
for _, name in ipairs(innocentBots) do
if modelName == name then
return true
end
end
return false
end

nextBotNames = {}
if ReplicatedStorage:FindFirstChild("NPCs") then
for _, npc in ipairs(ReplicatedStorage.NPCs:GetChildren()) do
table.insert(nextBotNames, npc.Name)
end
end

function isNextbotModel(model)
if not model or not model.Name then return false end
for _, name in ipairs(nextBotNames) do
if model.Name == name then return true end
end
return false
end

function isPlayerNextbot(player)
if not player or not player.Character then return false end
local team = player.Character:GetAttribute("Team")
if team == "Nextbot" then
return true
end
return false
end

function getDistanceFromCamera(targetPosition)
local camera = workspace.CurrentCamera
if not camera then return 0 end
return (targetPosition - camera.CFrame.Position).Magnitude
end

function calculateBoxScale(distance)
if distance <= 17 then
return 1
else
local scale = 17 / distance
return math.max(scale, 0.3)
end
end

function getPlayerTeam(player)
local character = player.Character
if character then
local team = character:GetAttribute("Team")
if team then
return team
end
end
return nil
end

function getAttachPoint(character)
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
return rootPart
end
return character
end

function create3DBox(character, color, size)
local rootPart = character:FindFirstChild("HumanoidRootPart")
if not rootPart then return nil end

local folderName = "ESP_3DBox"
local folder = character:FindFirstChild(folderName)
if folder then
folder:Destroy()
end

folder = Instance.new("Folder")
folder.Name = folderName
folder.Parent = character

size = size or Vector3.new(4, 5, 3)
local offsetX = size.X / 2
local offsetY = size.Y / 2
local offsetZ = size.Z / 2

local edges = {
{Vector3.new(0, offsetY, offsetZ), Vector3.new(size.X, 0.1, 0.1), "TopFront"},
{Vector3.new(0, offsetY, -offsetZ), Vector3.new(size.X, 0.1, 0.1), "TopBack"},
{Vector3.new(-offsetX, offsetY, 0), Vector3.new(0.1, 0.1, size.Z), "TopLeft"},
{Vector3.new(offsetX, offsetY, 0), Vector3.new(0.1, 0.1, size.Z), "TopRight"},
{Vector3.new(0, -offsetY, offsetZ), Vector3.new(size.X, 0.1, 0.1), "BottomFront"},
{Vector3.new(0, -offsetY, -offsetZ), Vector3.new(size.X, 0.1, 0.1), "BottomBack"},
{Vector3.new(-offsetX, -offsetY, 0), Vector3.new(0.1, 0.1, size.Z), "BottomLeft"},
{Vector3.new(offsetX, -offsetY, 0), Vector3.new(0.1, 0.1, size.Z), "BottomRight"},
{Vector3.new(-offsetX, 0, offsetZ), Vector3.new(0.1, size.Y, 0.1), "FrontLeft"},
{Vector3.new(offsetX, 0, offsetZ), Vector3.new(0.1, size.Y, 0.1), "FrontRight"},
{Vector3.new(-offsetX, 0, -offsetZ), Vector3.new(0.1, size.Y, 0.1), "BackLeft"},
{Vector3.new(offsetX, 0, -offsetZ), Vector3.new(0.1, size.Y, 0.1), "BackRight"}
}

for _, edge in ipairs(edges) do
local position = edge[1]
local boxSize = edge[2]
local name = edge[3]

local adornment = Instance.new("BoxHandleAdornment")
adornment.Name = name
adornment.Adornee = rootPart
adornment.Size = boxSize
adornment.CFrame = CFrame.new(position)
adornment.Color3 = color
adornment.Transparency = 0.2
adornment.ZIndex = 10
adornment.AlwaysOnTop = true
adornment.Visible = true
adornment.Parent = folder
end

return folder
end

function update3DBoxColor(character, color)
local folder = character:FindFirstChild("ESP_3DBox")
if folder then
for _, adornment in ipairs(folder:GetChildren()) do
if adornment:IsA("BoxHandleAdornment") then
adornment.Color3 = color
end
end
end
end

function remove3DBox(character)
local folder = character:FindFirstChild("ESP_3DBox")
if folder then
folder:Destroy()
end
end

function createBillboard(character, name, color, useModelParent)
local existing = character:FindFirstChild("ESP_Billboard")
if existing then
existing:Destroy()
end

local billboard = Instance.new("BillboardGui")
billboard.Name = "ESP_Billboard"

if useModelParent then
billboard.Adornee = character
billboard.Parent = character
else
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
billboard.Adornee = rootPart
billboard.Parent = rootPart
else
billboard.Adornee = character
billboard.Parent = character
end
end

billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.StudsOffset = Vector3.new(0, 3, 0)
billboard.ClipsDescendants = false
billboard.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
billboard.Active = true

local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(1, 0, 1, 0)
mainFrame.BackgroundTransparency = 1
mainFrame.Parent = billboard

local nameLabel = Instance.new("TextLabel")
nameLabel.Name = "NameLabel"
nameLabel.Size = UDim2.new(1, 0, 0, 20)
nameLabel.Position = UDim2.new(0, 0, 0, 0)
nameLabel.BackgroundTransparency = 1
nameLabel.Text = name
nameLabel.TextColor3 = color
nameLabel.TextSize = 14
nameLabel.Font = Enum.Font.GothamSemibold
nameLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
nameLabel.TextStrokeTransparency = 0.3
nameLabel.TextXAlignment = Enum.TextXAlignment.Center
nameLabel.TextYAlignment = Enum.TextYAlignment.Bottom
nameLabel.Parent = mainFrame

local distanceLabel = Instance.new("TextLabel")
distanceLabel.Name = "DistanceLabel"
distanceLabel.Size = UDim2.new(1, 0, 0, 16)
distanceLabel.Position = UDim2.new(0, 0, 0, 20)
distanceLabel.BackgroundTransparency = 1
distanceLabel.Text = ""
distanceLabel.TextColor3 = color
distanceLabel.TextSize = 12
distanceLabel.Font = Enum.Font.Gotham
distanceLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
distanceLabel.TextStrokeTransparency = 0.3
distanceLabel.TextXAlignment = Enum.TextXAlignment.Center
distanceLabel.TextYAlignment = Enum.TextYAlignment.Top
distanceLabel.Parent = mainFrame

return {
billboard = billboard,
nameLabel = nameLabel,
distanceLabel = distanceLabel
}
end

function updateBillboard(billboardData, name, distance, color)
if not billboardData then return end

if name then
billboardData.nameLabel.Text = name
billboardData.nameLabel.TextColor3 = color
end

if distance then
billboardData.distanceLabel.Text = string.format("%.1f studs", distance)
billboardData.distanceLabel.TextColor3 = color
end

billboardData.nameLabel.Visible = name ~= nil
billboardData.distanceLabel.Visible = distance ~= nil
end

function create2DBox(character, color, scale, useModelParent)
local existing = character:FindFirstChild("ESP_2DBox")
if existing then
existing:Destroy()
end

local billboard = Instance.new("BillboardGui")
billboard.Name = "ESP_2DBox"

if useModelParent then
billboard.Adornee = character
billboard.Parent = character
else
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
billboard.Adornee = rootPart
billboard.Parent = rootPart
else
billboard.Adornee = character
billboard.Parent = character
end
end

billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 80 * scale, 0, 100 * scale)
billboard.StudsOffset = Vector3.new(0, 0, 0)
billboard.ClipsDescendants = false

local boxFrame = Instance.new("Frame")
boxFrame.Name = "BoxFrame"
boxFrame.Size = UDim2.new(1, 0, 1, 0)
boxFrame.BackgroundTransparency = 1
boxFrame.BorderSizePixel = 0
boxFrame.Parent = billboard

local uiStroke = Instance.new("UIStroke")
uiStroke.Thickness = math.max(1.5 * scale, 1)
uiStroke.Transparency = 0
uiStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
uiStroke.Color = color
uiStroke.Parent = boxFrame

return {
billboard = billboard,
boxFrame = boxFrame,
stroke = uiStroke,
scale = scale
}
end

function update2DBox(boxData, color, scale)
if boxData then
if boxData.stroke then
boxData.stroke.Color = color
end
if boxData.billboard then
boxData.billboard.Size = UDim2.new(0, 80 * scale, 0, 100 * scale)
end
if boxData.stroke then
boxData.stroke.Thickness = math.max(1.5 * scale, 1)
end
boxData.scale = scale
end
end

function remove2DBox(character)
local box = character:FindFirstChild("ESP_2DBox")
if box then
box:Destroy()
end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local boxInRoot = rootPart:FindFirstChild("ESP_2DBox")
if boxInRoot then
boxInRoot:Destroy()
end
end
end

function createHighlight(character, color)
local existing = character:FindFirstChild("ESP_Highlight")
if existing then
existing:Destroy()
end

local highlight = Instance.new("Highlight")
highlight.Name = "ESP_Highlight"
highlight.Adornee = character
highlight.FillColor = color
highlight.OutlineColor = color
highlight.FillTransparency = 0.5
highlight.OutlineTransparency = 0.3
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Parent = character

return highlight
end

function updateHighlight(highlight, color)
if highlight then
highlight.FillColor = color
highlight.OutlineColor = color
end
end

function removeHighlight(character)
local highlight = character:FindFirstChild("ESP_Highlight")
if highlight then
highlight:Destroy()
end
end

function getPlayerColor(player)
if isInnocentBot(player.Name) then
return Color3.fromRGB(255, 255, 255)
end

if isPlayerNextbot(player) then
return Color3.fromRGB(255, 0, 0)
end

local team = getPlayerTeam(player)
if team == "Nextbot" then
return Color3.fromRGB(255, 0, 0)
end

return Color3.fromRGB(0, 255, 0)
end

function getNextbotColor(model)
if isInnocentBot(model.Name) then
return Color3.fromRGB(255, 255, 255)
end
return Color3.fromRGB(255, 0, 0)
end

function getDownedColor()
return Color3.fromRGB(255, 165, 0)
end

function getTicketColor()
return Color3.fromRGB(156, 39, 176)
end

function getVehicleColor(vehicle)
return Color3.fromRGB(0, 255, 255)
end

function cleanupPlayerESP()
for character, esp in pairs(playerEspElements) do
if esp.box2D then
local box = character:FindFirstChild("ESP_2DBox")
if box then box:Destroy() end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local boxInRoot = rootPart:FindFirstChild("ESP_2DBox")
if boxInRoot then boxInRoot:Destroy() end
end
end
if esp.box3D then remove3DBox(character) end
if esp.highlight then removeHighlight(character) end
if esp.billboard then
local bill = character:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
end
playerEspElements = {}
end

function cleanupNextbotESP()
for model, esp in pairs(nextbotEspElements) do
if esp.box2D then
local box = model:FindFirstChild("ESP_2DBox")
if box then box:Destroy() end
end
if esp.box3D then remove3DBox(model) end
if esp.highlight then removeHighlight(model) end
if esp.billboard then
local bill = model:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
end
end
nextbotEspElements = {}
end

function cleanupDownedESP()
for char, esp in pairs(downedEspElements) do
if esp.box2D then
local box = char:FindFirstChild("ESP_2DBox")
if box then box:Destroy() end
local rootPart = char:FindFirstChild("HumanoidRootPart")
if rootPart then
local boxInRoot = rootPart:FindFirstChild("ESP_2DBox")
if boxInRoot then boxInRoot:Destroy() end
end
end
if esp.box3D then remove3DBox(char) end
if esp.highlight then removeHighlight(char) end
if esp.billboard then
local bill = char:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = char:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
end
downedEspElements = {}
end

function cleanupTicketESP()
for ticket, esp in pairs(ticketEspElements) do
if esp.box2D then
local box = ticket:FindFirstChild("ESP_2DBox")
if box then box:Destroy() end
local rootPart = ticket:FindFirstChild("HumanoidRootPart")
if rootPart then
local boxInRoot = rootPart:FindFirstChild("ESP_2DBox")
if boxInRoot then boxInRoot:Destroy() end
end
end
if esp.box3D then remove3DBox(ticket) end
if esp.highlight then removeHighlight(ticket) end
if esp.billboard then
local bill = ticket:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = ticket:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
end
ticketEspElements = {}
end

function cleanupVehicleESP()
for vehicle, esp in pairs(vehicleEspElements) do
if esp.box2D then
local box = vehicle:FindFirstChild("ESP_2DBox")
if box then box:Destroy() end
local rootPart = vehicle:FindFirstChild("HumanoidRootPart")
if rootPart then
local boxInRoot = rootPart:FindFirstChild("ESP_2DBox")
if boxInRoot then boxInRoot:Destroy() end
end
end
if esp.box3D then remove3DBox(vehicle) end
if esp.highlight then removeHighlight(vehicle) end
if esp.billboard then
local bill = vehicle:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = vehicle:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
end
vehicleEspElements = {}
end

function updatePlayerESP()
if not isRendering or not windowFocused then return end
if not workspace.CurrentCamera then return end

local currentTargets = {}

for _, otherPlayer in ipairs(Players:GetPlayers()) do
if otherPlayer ~= LocalPlayer then
local character = otherPlayer.Character
if character and character:FindFirstChild("HumanoidRootPart") then
local humanoid = character:FindFirstChild("Humanoid")
if humanoid and humanoid.Health > 0 then
currentTargets[character] = true

if not playerEspElements[character] then
playerEspElements[character] = {}
end

local esp = playerEspElements[character]
local distance = getDistanceFromCamera(character.HumanoidRootPart.Position)
local scale = calculateBoxScale(distance)
local boxColor = getPlayerColor(otherPlayer)
local isNextbotPlayer = isPlayerNextbot(otherPlayer)

if playerBoxesEnabled then
if playerBoxType == "2D" then
if not esp.box2D then
esp.box2D = create2DBox(character, boxColor, scale, isNextbotPlayer)
end
update2DBox(esp.box2D, boxColor, scale)
if esp.box3D then
remove3DBox(character)
esp.box3D = nil
end
else
local boxSize = Vector3.new(4, 5, 3)
if humanoid then
boxSize = Vector3.new(2, humanoid.HipHeight + 5, 2)
end
if not esp.box3D then
esp.box3D = create3DBox(character, boxColor, boxSize)
end
update3DBoxColor(character, boxColor)
if esp.box2D then
remove2DBox(character)
esp.box2D = nil
end
end
else
if esp.box2D then
remove2DBox(character)
esp.box2D = nil
end
if esp.box3D then
remove3DBox(character)
esp.box3D = nil
end
end

if playerHighlightsEnabled then
if not esp.highlight then
esp.highlight = createHighlight(character, boxColor)
end
updateHighlight(esp.highlight, boxColor)
else
if esp.highlight then
removeHighlight(character)
esp.highlight = nil
end
end

if playerNamesEnabled or playerDistanceEnabled then
if not esp.billboard then
esp.billboard = createBillboard(character, otherPlayer.Name, boxColor, isNextbotPlayer)
end
local displayDistance = playerDistanceEnabled and distance or nil
updateBillboard(esp.billboard, playerNamesEnabled and otherPlayer.Name or nil, displayDistance, boxColor)
else
if esp.billboard then
local bill = character:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
esp.billboard = nil
end
end
end
end
end
end

for character, esp in pairs(playerEspElements) do
if not currentTargets[character] then
if esp.box2D then remove2DBox(character) end
if esp.box3D then remove3DBox(character) end
if esp.highlight then removeHighlight(character) end
if esp.billboard then
local bill = character:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
playerEspElements[character] = nil
end
end
end

function updateNextbotESP()
if not isRendering or not windowFocused then return end
if not workspace.CurrentCamera then return end

local currentTargets = {}

local function processModel(model)
if not model or not model:IsA("Model") or not model:FindFirstChild("HumanoidRootPart") then return end
if not isNextbotModel(model) then return end

currentTargets[model] = true

if not nextbotEspElements[model] then
nextbotEspElements[model] = {}
end

local esp = nextbotEspElements[model]
local distance = getDistanceFromCamera(model.HumanoidRootPart.Position)
local scale = calculateBoxScale(distance)
local boxColor = getNextbotColor(model)

if nextbotBoxesEnabled then
if nextbotBoxType == "2D" then
if not esp.box2D then
esp.box2D = create2DBox(model, boxColor, scale, true)
end
update2DBox(esp.box2D, boxColor, scale)
if esp.box3D then
remove3DBox(model)
esp.box3D = nil
end
else
local humanoid = model:FindFirstChild("Humanoid")
local boxSize = Vector3.new(4, 5, 3)
if humanoid then
boxSize = Vector3.new(2, humanoid.HipHeight + 5, 2)
end
if not esp.box3D then
esp.box3D = create3DBox(model, boxColor, boxSize)
end
update3DBoxColor(model, boxColor)
if esp.box2D then
remove2DBox(model)
esp.box2D = nil
end
end
else
if esp.box2D then remove2DBox(model) end
if esp.box3D then remove3DBox(model) end
end

if nextbotHighlightsEnabled then
if not esp.highlight then
esp.highlight = createHighlight(model, boxColor)
end
updateHighlight(esp.highlight, boxColor)
else
if esp.highlight then
removeHighlight(model)
esp.highlight = nil
end
end

if nextbotNamesEnabled or nextbotDistanceEnabled then
if not esp.billboard then
esp.billboard = createBillboard(model, model.Name, boxColor, true)
end
local displayDistance = nextbotDistanceEnabled and distance or nil
updateBillboard(esp.billboard, nextbotNamesEnabled and model.Name or nil, displayDistance, boxColor)
else
if esp.billboard then
local bill = model:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
esp.billboard = nil
end
end
end

if workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players") then
for _, model in pairs(workspace.Game.Players:GetChildren()) do
processModel(model)
end
end
if workspace:FindFirstChild("NPCs") then
for _, model in pairs(workspace.NPCs:GetChildren()) do
processModel(model)
end
end

for model, esp in pairs(nextbotEspElements) do
if not currentTargets[model] then
if esp.box2D then remove2DBox(model) end
if esp.box3D then remove3DBox(model) end
if esp.highlight then removeHighlight(model) end
if esp.billboard then
local bill = model:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
end
nextbotEspElements[model] = nil
end
end
end

function updateDownedESP()
if not isRendering or not windowFocused then return end
if not workspace.CurrentCamera then return end

local currentTargets = {}
local folder = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players")

if folder then
for _, char in ipairs(folder:GetChildren()) do
if char:IsA("Model") then
local team = char:GetAttribute("Team")
local downed = char:GetAttribute("Downed")
if team ~= "Nextbot" and char.Name ~= LocalPlayer.Name and downed == true then
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
currentTargets[char] = true

if not downedEspElements[char] then
downedEspElements[char] = {}
end

local esp = downedEspElements[char]
local distance = getDistanceFromCamera(hrp.Position)
local scale = calculateBoxScale(distance)
local color = getDownedColor()
local isNextbotPlayer = isPlayerNextbot(Players:GetPlayerFromCharacter(char))

if downedBoxesEnabled then
if downedBoxType == "2D" then
if not esp.box2D then
esp.box2D = create2DBox(char, color, scale, isNextbotPlayer)
end
update2DBox(esp.box2D, color, scale)
if esp.box3D then
remove3DBox(char)
esp.box3D = nil
end
else
if not esp.box3D then
esp.box3D = create3DBox(char, color, Vector3.new(3, 5, 2))
end
update3DBoxColor(char, color)
if esp.box2D then
remove2DBox(char)
esp.box2D = nil
end
end
else
if esp.box2D then remove2DBox(char) end
if esp.box3D then remove3DBox(char) end
end

if downedHighlightsEnabled then
if not esp.highlight then
esp.highlight = createHighlight(char, color)
end
updateHighlight(esp.highlight, color)
else
if esp.highlight then
removeHighlight(char)
esp.highlight = nil
end
end

if downedNamesEnabled or downedDistanceEnabled then
if not esp.billboard then
esp.billboard = createBillboard(char, char.Name, color, isNextbotPlayer)
end
local displayDistance = downedDistanceEnabled and distance or nil
updateBillboard(esp.billboard, downedNamesEnabled and char.Name or nil, displayDistance, color)
else
if esp.billboard then
local bill = char:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = char:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
esp.billboard = nil
end
end
end
end
end
end
end

for char, esp in pairs(downedEspElements) do
if not currentTargets[char] then
if esp.box2D then remove2DBox(char) end
if esp.box3D then remove3DBox(char) end
if esp.highlight then removeHighlight(char) end
if esp.billboard then
local bill = char:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = char:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
downedEspElements[char] = nil
end
end
end

function updateTicketESP()
if not isRendering or not windowFocused then return end
if not workspace.CurrentCamera then return end

local currentTargets = {}
local tickets = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Effects") and workspace.Game.Effects:FindFirstChild("Tickets")
local brightPurple = getTicketColor()

if tickets then
for _, ticket in ipairs(tickets:GetChildren()) do
if ticket:IsA("Model") and ticket:FindFirstChild("HumanoidRootPart") then
currentTargets[ticket] = true

if not ticketEspElements[ticket] then
ticketEspElements[ticket] = {}
end

local esp = ticketEspElements[ticket]
local distance = getDistanceFromCamera(ticket.HumanoidRootPart.Position)
local scale = calculateBoxScale(distance)

if ticketBoxesEnabled then
if ticketBoxType == "2D" then
if not esp.box2D then
esp.box2D = create2DBox(ticket, brightPurple, scale, false)
end
update2DBox(esp.box2D, brightPurple, scale)
if esp.box3D then
remove3DBox(ticket)
esp.box3D = nil
end
else
if not esp.box3D then
esp.box3D = create3DBox(ticket, brightPurple, Vector3.new(4, 4, 4))
end
update3DBoxColor(ticket, brightPurple)
if esp.box2D then
remove2DBox(ticket)
esp.box2D = nil
end
end
else
if esp.box2D then remove2DBox(ticket) end
if esp.box3D then remove3DBox(ticket) end
end

if ticketHighlightsEnabled then
if not esp.highlight then
esp.highlight = createHighlight(ticket, brightPurple)
end
updateHighlight(esp.highlight, brightPurple)
else
if esp.highlight then
removeHighlight(ticket)
esp.highlight = nil
end
end

if ticketNamesEnabled or ticketDistanceEnabled then
if not esp.billboard then
esp.billboard = createBillboard(ticket, "Ticket", brightPurple, false)
end
local displayDistance = ticketDistanceEnabled and distance or nil
updateBillboard(esp.billboard, ticketNamesEnabled and "Ticket" or nil, displayDistance, brightPurple)
else
if esp.billboard then
local bill = ticket:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = ticket:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
esp.billboard = nil
end
end
end
end
end

for ticket, esp in pairs(ticketEspElements) do
if not currentTargets[ticket] then
if esp.box2D then remove2DBox(ticket) end
if esp.box3D then remove3DBox(ticket) end
if esp.highlight then removeHighlight(ticket) end
if esp.billboard then
local bill = ticket:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = ticket:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
ticketEspElements[ticket] = nil
end
end
end

function updateVehicleESP()
if not isRendering or not windowFocused then return end
if not workspace.CurrentCamera then return end

local currentTargets = {}
local vehicles = workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Vehicles")

if vehicles then
for _, vehicle in ipairs(vehicles:GetChildren()) do
if vehicle:IsA("Model") and vehicle:FindFirstChild("HumanoidRootPart") then
currentTargets[vehicle] = true

if not vehicleEspElements[vehicle] then
vehicleEspElements[vehicle] = {}
end

local esp = vehicleEspElements[vehicle]
local distance = getDistanceFromCamera(vehicle.HumanoidRootPart.Position)
local scale = calculateBoxScale(distance)
local vehicleColor = getVehicleColor(vehicle)
local vehicleName = vehicle.Name or "Vehicle"

if vehicleBoxesEnabled then
if vehicleBoxType == "2D" then
if not esp.box2D then
esp.box2D = create2DBox(vehicle, vehicleColor, scale, false)
end
update2DBox(esp.box2D, vehicleColor, scale)
if esp.box3D then
remove3DBox(vehicle)
esp.box3D = nil
end
else
local boxSize = Vector3.new(8, 4, 12)
local vehicleSize = vehicle:FindFirstChild("Size")
if vehicleSize then
boxSize = vehicleSize.Value
end
if not esp.box3D then
esp.box3D = create3DBox(vehicle, vehicleColor, boxSize)
end
update3DBoxColor(vehicle, vehicleColor)
if esp.box2D then
remove2DBox(vehicle)
esp.box2D = nil
end
end
else
if esp.box2D then remove2DBox(vehicle) end
if esp.box3D then remove3DBox(vehicle) end
end

if vehicleHighlightsEnabled then
if not esp.highlight then
esp.highlight = createHighlight(vehicle, vehicleColor)
end
updateHighlight(esp.highlight, vehicleColor)
else
if esp.highlight then
removeHighlight(vehicle)
esp.highlight = nil
end
end

if vehicleNamesEnabled or vehicleDistanceEnabled then
if not esp.billboard then
esp.billboard = createBillboard(vehicle, vehicleName, vehicleColor, false)
end
local displayDistance = vehicleDistanceEnabled and distance or nil
updateBillboard(esp.billboard, vehicleNamesEnabled and vehicleName or nil, displayDistance, vehicleColor)
else
if esp.billboard then
local bill = vehicle:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = vehicle:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
esp.billboard = nil
end
end
end
end
end

for vehicle, esp in pairs(vehicleEspElements) do
if not currentTargets[vehicle] then
if esp.box2D then remove2DBox(vehicle) end
if esp.box3D then remove3DBox(vehicle) end
if esp.highlight then removeHighlight(vehicle) end
if esp.billboard then
local bill = vehicle:FindFirstChild("ESP_Billboard")
if bill then bill:Destroy() end
local rootPart = vehicle:FindFirstChild("HumanoidRootPart")
if rootPart then
local billInRoot = rootPart:FindFirstChild("ESP_Billboard")
if billInRoot then billInRoot:Destroy() end
end
end
vehicleEspElements[vehicle] = nil
end
end
end

renderConnection = nil
lastRenderTime = tick()
renderCheckConnection = nil
attributeConnections = {}

function onAttributeChanged(player, attribute)
if attribute == "Team" then
updatePlayerESP()
end
end

function setupAttributeWatchers()
for _, otherPlayer in ipairs(Players:GetPlayers()) do
if otherPlayer ~= LocalPlayer and otherPlayer.Character then
if not attributeConnections[otherPlayer] then
attributeConnections[otherPlayer] = otherPlayer.Character:GetAttributeChangedSignal("Team"):Connect(function()
updatePlayerESP()
end)
end
end
end
end

function onRenderStepped()
lastRenderTime = tick()
isRendering = true

if playerBoxesEnabled or playerNamesEnabled or playerDistanceEnabled or playerHighlightsEnabled then
updatePlayerESP()
else
cleanupPlayerESP()
end

if nextbotBoxesEnabled or nextbotNamesEnabled or nextbotDistanceEnabled or nextbotHighlightsEnabled then
updateNextbotESP()
else
cleanupNextbotESP()
end

if downedBoxesEnabled or downedNamesEnabled or downedDistanceEnabled or downedHighlightsEnabled then
updateDownedESP()
else
cleanupDownedESP()
end

if ticketBoxesEnabled or ticketNamesEnabled or ticketDistanceEnabled or ticketHighlightsEnabled then
updateTicketESP()
else
cleanupTicketESP()
end

if vehicleBoxesEnabled or vehicleNamesEnabled or vehicleDistanceEnabled or vehicleHighlightsEnabled then
updateVehicleESP()
else
cleanupVehicleESP()
end

setupAttributeWatchers()
end

function startRenderLoop()
if renderConnection then return end
renderConnection = RunService.RenderStepped:Connect(onRenderStepped)
end

function stopRenderLoop()
if renderConnection then
renderConnection:Disconnect()
renderConnection = nil
end
end

function setupNextbotDetection()
local function onNextbotAdded(model)
if model:IsA("Model") and isNextbotModel(model) then
task.wait(0.5)
updateNextbotESP()
end
end

if workspace:FindFirstChild("Game") and workspace.Game:FindFirstChild("Players") then
workspace.Game.Players.ChildAdded:Connect(onNextbotAdded)
end
if workspace:FindFirstChild("NPCs") then
workspace.NPCs.ChildAdded:Connect(onNextbotAdded)
end
end

function cleanupAllESP()
cleanupPlayerESP()
cleanupNextbotESP()
cleanupDownedESP()
cleanupTicketESP()
cleanupVehicleESP()

for _, connection in pairs(attributeConnections) do
connection:Disconnect()
end
attributeConnections = {}
end

RunService.RenderStepped:Connect(function()
lastRenderTime = tick()
isRendering = true
end)

renderCheckConnection = RunService.Heartbeat:Connect(function()
local currentTime = tick()
if currentTime - lastRenderTime > 1 then
isRendering = false
cleanupAllESP()
end
end)

UserInputService.WindowFocusReleased:Connect(function()
windowFocused = false
isRendering = false
cleanupAllESP()
end)

UserInputService.WindowFocused:Connect(function()
windowFocused = true
isRendering = true
end)

game:GetService("GuiService"):GetPropertyChangedSignal("MenuIsOpen"):Connect(function()
if game:GetService("GuiService").MenuIsOpen then
isRendering = false
cleanupAllESP()
else
isRendering = true
end
end)

Players.PlayerRemoving:Connect(function(leavingPlayer)
if leavingPlayer == LocalPlayer then
cleanupAllESP()
stopRenderLoop()
end
end)

startRenderLoop()
setupNextbotDetection()

Tabs.ESP:Section({ Title = "Player ESP", TextSize = 20 })
Tabs.ESP:Divider()

Tabs.ESP:Toggle({
Title = "Player Boxes",
Value = false,
Callback = function(state) playerBoxesEnabled = state end
})

Tabs.ESP:Dropdown({
Title = "Player Box Type",
Values = {"2D", "3D"},
Value = "2D",
Callback = function(value) playerBoxType = value end
})

Tabs.ESP:Toggle({
Title = "Player Names",
Value = false,
Callback = function(state) playerNamesEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Player Distance",
Value = false,
Callback = function(state) playerDistanceEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Player Highlights",
Value = false,
Callback = function(state) playerHighlightsEnabled = state end
})

Tabs.ESP:Divider()
Tabs.ESP:Section({ Title = "Nextbot ESP", TextSize = 20 })
Tabs.ESP:Divider()

Tabs.ESP:Toggle({
Title = "Nextbot Boxes",
Value = false,
Callback = function(state) nextbotBoxesEnabled = state end
})

Tabs.ESP:Dropdown({
Title = "Nextbot Box Type",
Values = {"2D", "3D"},
Value = "2D",
Callback = function(value) nextbotBoxType = value end
})

Tabs.ESP:Toggle({
Title = "Nextbot Names",
Value = false,
Callback = function(state) 
nextbotNamesEnabled = state
if state then setupNextbotDetection() end
end
})

Tabs.ESP:Toggle({
Title = "Nextbot Distance",
Value = false,
Callback = function(state) nextbotDistanceEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Nextbot Highlights",
Value = false,
Callback = function(state) nextbotHighlightsEnabled = state end
})

Tabs.ESP:Divider()
Tabs.ESP:Section({ Title = "Downed Player ESP", TextSize = 20 })
Tabs.ESP:Divider()

Tabs.ESP:Toggle({
Title = "Downed Boxes",
Value = false,
Callback = function(state) downedBoxesEnabled = state end
})

Tabs.ESP:Dropdown({
Title = "Downed Box Type",
Values = {"2D", "3D"},
Value = "2D",
Callback = function(value) downedBoxType = value end
})

Tabs.ESP:Toggle({
Title = "Downed Names",
Value = false,
Callback = function(state) downedNamesEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Downed Distance",
Value = false,
Callback = function(state) downedDistanceEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Downed Highlights",
Value = false,
Callback = function(state) downedHighlightsEnabled = state end
})

Tabs.ESP:Divider()
Tabs.ESP:Section({ Title = "Ticket ESP", TextSize = 20 })
Tabs.ESP:Divider()

Tabs.ESP:Toggle({
Title = "Ticket Boxes",
Value = false,
Callback = function(state) ticketBoxesEnabled = state end
})

Tabs.ESP:Dropdown({
Title = "Ticket Box Type",
Values = {"2D", "3D"},
Value = "2D",
Callback = function(value) ticketBoxType = value end
})

Tabs.ESP:Toggle({
Title = "Ticket Names",
Value = false,
Callback = function(state) ticketNamesEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Ticket Distance",
Value = false,
Callback = function(state) ticketDistanceEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Ticket Highlights",
Value = false,
Callback = function(state) ticketHighlightsEnabled = state end
})

Tabs.ESP:Divider()
Tabs.ESP:Section({ Title = "Vehicle ESP", TextSize = 20 })
Tabs.ESP:Divider()

Tabs.ESP:Toggle({
Title = "Vehicle Boxes",
Value = false,
Callback = function(state) vehicleBoxesEnabled = state end
})

Tabs.ESP:Dropdown({
Title = "Vehicle Box Type",
Values = {"2D", "3D"},
Value = "2D",
Callback = function(value) vehicleBoxType = value end
})

Tabs.ESP:Toggle({
Title = "Vehicle Names",
Value = false,
Callback = function(state) vehicleNamesEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Vehicle Distance",
Value = false,
Callback = function(state) vehicleDistanceEnabled = state end
})

Tabs.ESP:Toggle({
Title = "Vehicle Highlights",
Value = false,
Callback = function(state) vehicleHighlightsEnabled = state end
})

Features & Information

Esp Player Esp Bot Esp Ticket Esp Downed Player Esp Vehicles 2d and 3D Box esp Distance esp name esp and highlights esp

Community Comments (0)

No comments yet for this script.

More Scripts for Evade