
Key RequiredUniversal

local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local espActive = false
local showNames = false
local nameSize = 16
local showDistance = false
local distanceSize = 14
local showHealth = false
local healthSize = 14
local customDefaultColor = Color3.fromRGB(40, 40, 40)
local currentMenuHeight = 400
local colorOptions = {
Color3.fromRGB(40, 40, 40),
Color3.fromRGB(120, 20, 20),
Color3.fromRGB(20, 20, 120),
Color3.fromRGB(200, 200, 200),
Color3.fromRGB(20, 100, 20)
}
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "MenuESP_Mobile"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local IconInstance = Instance.new("TextButton")
IconInstance.Name = "IconMenu"
IconInstance.Size = UDim2.new(0, 60, 0, 60)
IconInstance.Position = UDim2.new(0.05, 0, 0.2, 0)
IconInstance.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
IconInstance.Text = "M"
IconInstance.TextColor3 = Color3.fromRGB(0, 120, 255)
IconInstance.TextSize = 32
IconInstance.Font = Enum.Font.SourceSansBold
IconInstance.Active = true
IconInstance.Draggable = true
IconInstance.Parent = ScreenGui
local UICornerIcon = Instance.new("UICorner")
UICornerIcon.CornerRadius = UDim.new(0, 12)
UICornerIcon.Parent = IconInstance
local MainMenu = Instance.new("Frame")
MainMenu.Name = "MainMenu"
MainMenu.Size = UDim2.new(0, 320, 0, currentMenuHeight)
MainMenu.Position = UDim2.new(0.5, -160, 0.5, -200)
MainMenu.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
MainMenu.Visible = false
MainMenu.Parent = ScreenGui
local UICornerMenu = Instance.new("UICorner")
UICornerMenu.CornerRadius = UDim.new(0, 15)
UICornerMenu.Parent = MainMenu
local Title = Instance.new("TextLabel")
Title.Name = "Title"
Title.Size = UDim2.new(1, 0, 0, 40)
Title.BackgroundTransparency = 1
Title.Text = "ESP PANEL"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.TextSize = 20
Title.Font = Enum.Font.SourceSansBold
Title.Parent = MainMenu
local ScrollContainer = Instance.new("ScrollingFrame")
ScrollContainer.Name = "ScrollContainer"
ScrollContainer.Size = UDim2.new(1, -20, 1, -50)
ScrollContainer.Position = UDim2.new(0, 10, 0, 45)
ScrollContainer.BackgroundTransparency = 1
ScrollContainer.CanvasSize = UDim2.new(0, 0, 0, 580)
ScrollContainer.ScrollBarThickness = 6
ScrollContainer.Parent = MainMenu
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
UIListLayout.Padding = UDim.new(0, 12)
UIListLayout.Parent = ScrollContainer
local function refreshLabels(character, player)
local billboard = character:FindFirstChild("ESPMobileGui")
local humanoid = character:FindFirstChild("Humanoid")
if not billboard or not humanoid then return end
local hrp = character:FindFirstChild("HumanoidRootPart")
local localHrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if showDistance and hrp and localHrp then
local distance = math.floor((localHrp.Position - hrp.Position).Magnitude)
billboard.LabelDistance.Text = distance .. " Studs"
billboard.LabelDistance.TextSize = distanceSize
billboard.LabelDistance.Visible = true
else
billboard.LabelDistance.Visible = false
end
if showNames then
billboard.LabelName.Text = player.DisplayName
billboard.LabelName.TextSize = nameSize
billboard.LabelName.Visible = true
else
billboard.LabelName.Visible = false
end
if showHealth then
billboard.FrameHealth.LabelHealth.Text = math.floor(humanoid.Health) .. " HP"
billboard.FrameHealth.LabelHealth.TextSize = healthSize
local healthPercentage = math.clamp(humanoid.Health / humanoid.MaxHealth, 0, 1)
billboard.FrameHealth.BarBackground.GreenBar.Size = UDim2.new(healthPercentage, 0, 1, 0)
billboard.FrameHealth.Visible = true
else
billboard.FrameHealth.Visible = false
end
end
local function getFinalColor(player)
if player.Team and not player.Neutral then
return player.TeamColor.Color
else
return customDefaultColor
end
end
local function cleanESP(character)
local highlight = character:FindFirstChild("ESPHighlight")
if highlight then highlight:Destroy() end
local billboard = character:FindFirstChild("ESPMobileGui")
if billboard then billboard:Destroy() end
end
local function applyESP(character, player)
cleanESP(character)
if not espActive or player == LocalPlayer then return end
local head = character:WaitForChild("Head", 5)
if not head then return end
local col = getFinalColor(player)
local highlight = Instance.new("Highlight")
highlight.Name = "ESPHighlight"
highlight.FillColor = col
highlight.OutlineColor = col
highlight.FillTransparency = 0.5
highlight.Parent = character
local billboard = Instance.new("BillboardGui")
billboard.Name = "ESPMobileGui"
billboard.Size = UDim2.new(0, 250, 0, 120)
billboard.StudsOffset = Vector3.new(0, 3.5, 0)
billboard.Parent = character
local list = Instance.new("UIListLayout")
list.SortOrder = Enum.SortOrder.LayoutOrder
list.HorizontalAlignment = Enum.HorizontalAlignment.Center
list.Padding = UDim.new(0, 2)
list.Parent = billboard
local lblDist = Instance.new("TextLabel", billboard)
lblDist.Name = "LabelDistance"
lblDist.Size = UDim2.new(1, 0, 0, 20)
lblDist.BackgroundTransparency = 1
lblDist.TextColor3 = col
lblDist.LayoutOrder = 1
local lblNom = Instance.new("TextLabel", billboard)
lblNom.Name = "LabelName"
lblNom.Size = UDim2.new(1, 0, 0, 20)
lblNom.BackgroundTransparency = 1
lblNom.TextColor3 = col
lblNom.LayoutOrder = 2
local frameHealth = Instance.new("Frame", billboard)
frameHealth.Name = "FrameHealth"
frameHealth.Size = UDim2.new(0, 180, 0, 20)
frameHealth.BackgroundTransparency = 1
frameHealth.LayoutOrder = 3
local lblH = Instance.new("TextLabel", frameHealth)
lblH.Name = "LabelHealth"
lblH.Size = UDim2.new(0, 80, 1, 0)
lblH.BackgroundTransparency = 1
lblH.TextColor3 = Color3.fromRGB(255, 255, 255)
local bgBar = Instance.new("Frame", frameHealth)
bgBar.Name = "BarBackground"
bgBar.Size = UDim2.new(0, 90, 0, 8)
bgBar.Position = UDim2.new(0, 85, 0.5, -4)
bgBar.BackgroundColor3 = Color3.fromRGB(50, 0, 0)
local greenBar = Instance.new("Frame", bgBar)
greenBar.Name = "GreenBar"
greenBar.BackgroundColor3 = Color3.fromRGB(0, 255, 0)
refreshLabels(character, player)
end
local function updateAllPlayers()
for _, p in ipairs(Players:GetPlayers()) do
if p.Character then
applyESP(p.Character, p)
end
end
end
local function createCheckButton(text, layoutOrder, callback)
local button = Instance.new("TextButton")
button.Size = UDim2.new(1, -10, 0, 40)
button.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
button.Text = text .. " [OFF]"
button.TextColor3 = Color3.fromRGB(200, 200, 200)
button.TextSize = 16
button.Font = Enum.Font.SourceSans
button.LayoutOrder = layoutOrder
button.Parent = ScrollContainer
Instance.new("UICorner", button).CornerRadius = UDim.new(0, 8)
local active = false
button.MouseButton1Click:Connect(function()
active = not active
button.BackgroundColor3 = active and Color3.fromRGB(0, 120, 255) or Color3.fromRGB(40, 40, 40)
button.Text = text .. (active and " [ON]" or " [OFF]")
callback(active)
end)
return button
end
local function createMobileAdjuster(text, min, max, startValue, step, layoutOrder, callback)
local container = Instance.new("Frame")
container.Size = UDim2.new(1, -10, 0, 45)
container.BackgroundTransparency = 1
container.LayoutOrder = layoutOrder
container.Parent = ScrollContainer
local currentValue = startValue
local label = Instance.new("TextLabel", container)
label.Size = UDim2.new(0, 160, 1, 0)
label.BackgroundTransparency = 1
label.Text = text .. ": " .. currentValue
label.TextColor3 = Color3.fromRGB(180, 180, 180)
label.TextSize = 14
label.TextXAlignment = Enum.TextXAlignment.Left
local minusBtn = Instance.new("TextButton", container)
minusBtn.Size = UDim2.new(0, 40, 0, 35)
minusBtn.Position = UDim2.new(1, -95, 0.5, -17)
minusBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
minusBtn.Text = "-"
minusBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
minusBtn.TextSize = 20
Instance.new("UICorner", minusBtn).CornerRadius = UDim.new(0, 5)
local plusBtn = Instance.new("TextButton", container)
plusBtn.Size = UDim2.new(0, 40, 0, 35)
plusBtn.Position = UDim2.new(1, -45, 0.5, -17)
plusBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 255)
plusBtn.Text = "+"
plusBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
plusBtn.TextSize = 20
Instance.new("UICorner", plusBtn).CornerRadius = UDim.new(0, 5)
minusBtn.MouseButton1Click:Connect(function()
currentValue = math.clamp(currentValue - step, min, max)
label.Text = text .. ": " .. currentValue
callback(currentValue)
end)
plusBtn.MouseButton1Click:Connect(function()
currentValue = math.clamp(currentValue + step, min, max)
label.Text = text .. ": " .. currentValue
callback(currentValue)
end)
end
createCheckButton("Enable ESP", 1, function(state) espActive = state updateAllPlayers() end)
createCheckButton("Show Player Names", 2, function(state) showNames = state updateAllPlayers() end)
createMobileAdjuster("Name Text Size", 10, 30, 16, 2, 3, function(val) nameSize = val updateAllPlayers() end)
createCheckButton("Show Distance (Studs)", 4, function(state) showDistance = state updateAllPlayers() end)
createMobileAdjuster("Distance Text Size", 10, 30, 14, 2, 5, function(val) distanceSize = val updateAllPlayers() end)
createCheckButton("Show Player Health", 6, function(state) showHealth = state updateAllPlayers() end)
createMobileAdjuster("Health Text Size", 10, 30, 14, 2, 7, function(val) healthSize = val updateAllPlayers() end)
local ColorsFrame = Instance.new("Frame")
ColorsFrame.Size = UDim2.new(1, -10, 0, 45)
ColorsFrame.BackgroundTransparency = 1
ColorsFrame.LayoutOrder = 8
ColorsFrame.Parent = ScrollContainer
local ColorsLabel = Instance.new("TextLabel", ColorsFrame)
ColorsLabel.Size = UDim2.new(1, 0, 0, 15)
ColorsLabel.BackgroundTransparency = 1
ColorsLabel.Text = "Custom Color (For Neutral Players Only):"
ColorsLabel.TextColor3 = Color3.fromRGB(180, 180, 180)
for i, color in ipairs(colorOptions) do
local btnColor = Instance.new("TextButton", ColorsFrame)
btnColor.Size = UDim2.new(0, 35, 0, 25)
btnColor.Position = UDim2.new(0, (i-1) * 45 + 10, 0, 20)
btnColor.BackgroundColor3 = color
btnColor.Text = ""
Instance.new("UICorner", btnColor).CornerRadius = UDim.new(0, 5)
btnColor.MouseButton1Click:Connect(function() customDefaultColor = color updateAllPlayers() end)
end
createMobileAdjuster("Menu Size", 250, 500, 400, 25, 9, function(val)
MainMenu.Size = UDim2.new(0, 320, 0, val)
ScrollContainer.Size = UDim2.new(1, -20, 1, -50)
end)
IconInstance.MouseButton1Click:Connect(function()
MainMenu.Visible = not MainMenu.Visible
end)
local function trackPlayer(player)
player.CharacterAdded:Connect(function(character)
character:WaitForChild("Humanoid")
applyESP(character, player)
end)
if player.Character then
applyESP(player.Character, player)
end
end
Players.PlayerAdded:Connect(trackPlayer)
for _, p in ipairs(Players:GetPlayers()) do
trackPlayer(p)
end
task.spawn(function()
while true do
task.wait(0.2)
for _, p in ipairs(Players:GetPlayers()) do
if p.Character then
refreshLabels(p.Character, p)
end
end
end
end)No comments yet for this script.



