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)