
Key RequiredUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local espEnabled = false
local badgeParts = {}
-- Cleanup old GUI if exists
if PlayerGui:FindFirstChild("BadgeESPGUI") then
PlayerGui.BadgeESPGUI:Destroy()
end
-- Create GUI
local gui = Instance.new("ScreenGui", PlayerGui)
gui.Name = "BadgeESPGUI"
gui.ResetOnSpawn = false
local toggle = Instance.new("TextButton", gui)
toggle.Size = UDim2.new(0, 130, 0, 40)
toggle.Position = UDim2.new(0, 10, 0, 10)
toggle.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
toggle.TextColor3 = Color3.new(1, 1, 1)
toggle.TextScaled = true
toggle.Font = Enum.Font.SourceSansBold
toggle.Text = "⚪ ESP: OFF"
-- Utility: case-insensitive search
local function stringContainsInsensitive(str, sub)
return string.find(string.lower(str), string.lower(sub)) ~= nil
end
-- Check if part is badge-related (name or parent name contains "badge")
local function isBadgePart(part)
if not part:IsA("BasePart") then return false end
if stringContainsInsensitive(part.Name, "badge") then
return true
end
local parent = part.Parent
while parent and parent ~= workspace do
if stringContainsInsensitive(parent.Name, "badge") then
return true
end
parent = parent.Parent
end
return false
end
-- Create ESP BillboardGui on part
local function createESP(part)
if part:FindFirstChild("BadgeESP") then return end
local billboard = Instance.new("BillboardGui")
billboard.Name = "BadgeESP"
billboard.Adornee = part
billboard.Size = UDim2.new(0, 110, 0, 50)
billboard.StudsOffset = Vector3.new(0, part.Size.Y + 1, 0)
billboard.AlwaysOnTop = true
billboard.Parent = part
local frame = Instance.new("Frame")
frame.Size = UDim2.new(1, 0, 1, 0)
frame.BackgroundColor3 = Color3.fromRGB(255, 255, 0)
frame.BackgroundTransparency = 0.5
frame.BorderSizePixel = 1
frame.BorderColor3 = Color3.new(1, 1, 0)
frame.Parent = billboard
local label = Instance.new("TextLabel", billboard)
label.Size = UDim2.new(1, 0, 0.5, 0)
label.Position = UDim2.new(0, 0, 0, 0)
label.BackgroundTransparency = 1
label.Text = "🎖️ Badge"
label.TextColor3 = Color3.fromRGB(255, 255, 0)
label.TextScaled = true
label.Font = Enum.Font.SourceSansBold
local distLabel = Instance.new("TextLabel", billboard)
distLabel.Size = UDim2.new(1, 0, 0.5, 0)
distLabel.Position = UDim2.new(0, 0, 0.5, 0)
distLabel.BackgroundTransparency = 1
distLabel.Text = ""
distLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
distLabel.TextScaled = true
distLabel.Font = Enum.Font.SourceSans
-- Update distance text every frame
local connection
connection = RunService.RenderStepped:Connect(function()
if not billboard.Parent or not part:IsDescendantOf(workspace) then
connection:Disconnect()
return
end
local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if hrp then
local dist = (part.Position - hrp.Position).Magnitude
distLabel.Text = math.floor(dist) .. " studs"
else
distLabel.Text = ""
end
end)
end
-- Remove all ESPs
local function clearESP()
for _, part in ipairs(badgeParts) do
if part and part:FindFirstChild("BadgeESP") then
part.BadgeESP:Destroy()
end
end
badgeParts = {}
end
-- Enable ESP
local function enableESP()
clearESP()
print("[Badge ESP] Scanning for badge parts...")
for _, part in ipairs(workspace:GetDescendants()) do
if part:IsA("BasePart") and isBadgePart(part) then
createESP(part)
table.insert(badgeParts, part)
print("[Badge ESP] Found badge part:", part:GetFullName())
end
end
print("[Badge ESP] Done.")
end
-- Disable ESP
local function disableESP()
clearESP()
end
-- Toggle button event
toggle.MouseButton1Click:Connect(function()
espEnabled = not espEnabled
if espEnabled then
toggle.Text = "🔵 ESP: ON"
enableESP()
else
toggle.Text = "⚪ ESP: OFF"
disableESP()
end
end)



Only works for parts.
We lookalike