ESP M
Key RequiredUniversal

ESP M

Universal ScriptAder_151Ader_151 1.8K views 2.3K executesUpdated Jun 19, 2026
Unrated
00
Lua Script•339 lines (11288 chars)
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)

Features & Information

.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts