--[[ WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk! ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local ESP = { Enabled = true, BeamEnabled = true, TeamCheck = false, MaxDistance = 1500, Box = { Thickness = 1.5, }, Tracer = { Thickness = 1.2, }, Name = { Size = 13, } } -- Screen GUI setup local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "Custom_ESP_Menu" ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") ScreenGui.ResetOnSpawn = false local MainFrame = Instance.new("Frame") MainFrame.Size = UDim2.new(0, 110, 0, 85) MainFrame.Position = UDim2.new(0, 15, 0.12, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) MainFrame.BorderSizePixel = 0 MainFrame.Active = true -- Critical for reliable UI dragging interaction MainFrame.Parent = ScreenGui local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 8) Corner.Parent = MainFrame local UIListLayout = Instance.new("UIListLayout") UIListLayout.Parent = MainFrame UIListLayout.Padding = UDim.new(0, 6) UIListLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center UIListLayout.VerticalAlignment = Enum.VerticalAlignment.Center ---------------------------------------------------------------- -- DRAGGABLE ENGINE (Smooth interpolation for ScreenGuis) ---------------------------------------------------------------- local dragging, dragInput, dragStart, startPos local function update(input) local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end MainFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) MainFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) ---------------------------------------------------------------- -- BUTTON CREATION ---------------------------------------------------------------- local function CreateButton(text, toggleTable, toggleVar) local Btn = Instance.new("TextButton") Btn.Size = UDim2.new(0, 95, 0, 32) Btn.BackgroundColor3 = toggleTable[toggleVar] and Color3.fromRGB(50, 150, 50) or Color3.fromRGB(150, 50, 50) Btn.Text = text .. ": " .. (toggleTable[toggleVar] and "ON" or "OFF") Btn.TextColor3 = Color3.new(1, 1, 1) Btn.Font = Enum.Font.GothamBold Btn.TextSize = 11 Btn.AutoButtonColor = false Btn.BorderSizePixel = 0 Btn.Parent = MainFrame local BtnCorner = Instance.new("UICorner") BtnCorner.CornerRadius = UDim.new(0, 4) BtnCorner.Parent = Btn Btn.MouseButton1Click:Connect(function() toggleTable[toggleVar] = not toggleTable[toggleVar] Btn.Text = text .. ": " .. (toggleTable[toggleVar] and "ON" or "OFF") Btn.BackgroundColor3 = toggleTable[toggleVar] and Color3.fromRGB(50, 150, 50) or Color3.fromRGB(150, 50, 50) end) end CreateButton("ESP BOX", ESP, "Enabled") CreateButton("RED BEAM", ESP, "BeamEnabled") ---------------------------------------------------------------- -- ESP DRAWING MANAGEMENT ---------------------------------------------------------------- local ESPObjects = {} local function CreateDrawing(type, properties) local drawing = Drawing.new(type) for prop, value in pairs(properties) do drawing[prop] = value end return drawing end local function CreateESP(Player) local Drawings = { -- Base color dynamically changes in the update render block below Box = CreateDrawing("Square", {Visible = false, Thickness = ESP.Box.Thickness, Filled = false}), Tracer = CreateDrawing("Line", {Visible = false, Thickness = ESP.Tracer.Thickness}), Name = CreateDrawing("Text", {Visible = false, Size = ESP.Name.Size, Center = true, Outline = true}), HealthBarOutline = CreateDrawing("Square", {Visible = false, Color = Color3.new(0,0,0), Thickness = 1, Filled = true}), HealthBar = CreateDrawing("Square", {Visible = false, Color = Color3.new(0,1,0), Thickness = 1, Filled = true}) } ESPObjects[Player] = Drawings end local function UpdatePlayerESP(Player, Drawings) local char = Player.Character local hum = char and char:FindFirstChild("Humanoid") local root = char and char:FindFirstChild("HumanoidRootPart") if not (char and hum and root) or (ESP.TeamCheck and Player.Team == LocalPlayer.Team) then for _, d in pairs(Drawings) do d.Visible = false end return end local pos, onScreen = Camera:WorldToViewportPoint(root.Position) if not onScreen then for _, d in pairs(Drawings) do d.Visible = false end return end local distance = (Camera.CFrame.Position - root.Position).Magnitude if distance > ESP.MaxDistance then for _, d in pairs(Drawings) do d.Visible = false end return end -- Dynamic Team Color Assignment -- Falls back to pure white if the player is teamless local elementColor = Player.TeamColor and Player.TeamColor.Color or Color3.fromRGB(255, 255, 255) local boxSize = Vector2.new(2000 / pos.Z, 3000 / pos.Z) local boxPos = Vector2.new(pos.X - boxSize.X / 2, pos.Y - boxSize.Y / 2) local showESP = ESP.Enabled -- Update Box visual attributes Drawings.Box.Visible = showESP Drawings.Box.Size = boxSize Drawings.Box.Position = boxPos Drawings.Box.Color = elementColor -- Update Text visual attributes Drawings.Name.Visible = showESP Drawings.Name.Text = string.format("%s [%dm]", Player.Name, math.floor(distance)) Drawings.Name.Position = Vector2.new(pos.X, boxPos.Y - 15) Drawings.Name.Color = elementColor -- Calculate Health Layout local healthPct = math.clamp(hum.Health / hum.MaxHealth, 0, 1) Drawings.HealthBarOutline.Visible = showESP Drawings.HealthBarOutline.Size = Vector2.new(4, boxSize.Y) Drawings.HealthBarOutline.Position = Vector2.new(boxPos.X - 6, boxPos.Y) Drawings.HealthBar.Visible = showESP Drawings.HealthBar.Size = Vector2.new(2, boxSize.Y * healthPct) Drawings.HealthBar.Position = Vector2.new(boxPos.X - 5, boxPos.Y + boxSize.Y - Drawings.HealthBar.Size.Y) Drawings.HealthBar.Color = Color3.new(1, 0, 0):Lerp(Color3.new(0, 1, 0), healthPct) -- Update Tracer visual attributes Drawings.Tracer.Visible = ESP.BeamEnabled Drawings.Tracer.From = Vector2.new(Camera.ViewportSize.X / 2, 0) Drawings.Tracer.To = Vector2.new(pos.X, pos.Y) Drawings.Tracer.Color = elementColor end RunService.RenderStepped:Connect(function() for Player, Drawings in pairs(ESPObjects) do if Player.Parent then UpdatePlayerESP(Player, Drawings) else for _, d in pairs(Drawings) do d:Remove() end ESPObjects[Player] = nil end end end) Players.PlayerAdded:Connect(CreateESP) Players.PlayerRemoving:Connect(function(p) if ESPObjects[p] then for _, d in pairs(ESPObjects[p]) do d:Remove() end ESPObjects[p] = nil end end) for _, p in pairs(Players:GetPlayers()) do if p ~= LocalPlayer then CreateESP(p) end end