
Key Required VerifiedUniversal

-- Services
local Players = game:GetService('Players')
local RunService = game:GetService('RunService')
local UserInputService = game:GetService('UserInputService')
local TweenService = game:GetService('TweenService')
-- Constants
local LOCAL_PLAYER = Players.LocalPlayer
local MONSTER_FOLDER = workspace:WaitForChild('MonsterFolder')
local DEBOUNCE_TIME = 0.5
local COLORS = {
DEFAULT = Color3.new(1, 1, 1),
HIGHLIGHTED = Color3.new(0, 0, 1),
MONSTER = Color3.new(1, 0, 0),
NEUTRAL = Color3.new(0, 1, 0)
}
-- State
local State = {
isESPEnabled = false,
lastActivationTime = 0,
highlightedPlayer = nil,
monsterPlayer = nil,
connections = {}
}
-- Utility Functions
local function debounce(func)
return function(...)
local now = tick()
if now - State.lastActivationTime < DEBOUNCE_TIME then return end
State.lastActivationTime = now
return func(...)
end
end
local function createHighlight(player, color)
local highlight = Instance.new('Highlight')
highlight.FillColor = color
highlight.FillTransparency = 0.5
highlight.OutlineColor = color
highlight.OutlineTransparency = 0
highlight.Adornee = player.Character
highlight.Parent = player.Character
return highlight
end
-- ESP Logic
local function updatePlayerESP(player)
if player == LOCAL_PLAYER then return end
local highlight = player.Character:FindFirstChild('Highlight')
if not highlight then
highlight = createHighlight(player, COLORS.DEFAULT)
end
local color = COLORS.DEFAULT
if player == State.highlightedPlayer then
color = COLORS.HIGHLIGHTED
elseif player == State.monsterPlayer then
color = COLORS.MONSTER
elseif player.Backpack then
if player.Backpack:FindFirstChild('Gun') then
State.highlightedPlayer = player
color = COLORS.HIGHLIGHTED
elseif player.Backpack:FindFirstChild('Monster') then
State.monsterPlayer = player
color = COLORS.MONSTER
else
color = COLORS.NEUTRAL
end
end
highlight.FillColor = color
highlight.OutlineColor = color
end
local function updateMonsterESP()
for _, monster in ipairs(MONSTER_FOLDER:GetChildren()) do
if monster:IsA('Model') and monster.Name:sub(1, 7) == 'MONSTER' then
local player = Players:FindFirstChild(monster.Name:sub(8))
if player then
State.monsterPlayer = player
break
end
end
end
end
local function updateESP()
if not State.isESPEnabled then return end
for _, player in ipairs(Players:GetPlayers()) do
updatePlayerESP(player)
end
updateMonsterESP()
end
-- GUI Creation
local function createGUI()
local ScreenGui = Instance.new('ScreenGui')
ScreenGui.Name = 'ESPHUD'
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = game.CoreGui
local MainFrame = Instance.new('Frame')
MainFrame.Name = 'MainFrame'
MainFrame.Size = UDim2.new(0, 200, 0, 120)
MainFrame.Position = UDim2.new(0.5, -100, 0.5, -60)
MainFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
local UICorner = Instance.new('UICorner')
UICorner.CornerRadius = UDim.new(0, 8)
UICorner.Parent = MainFrame
local Title = Instance.new('TextLabel')
Title.Name = 'Title'
Title.Size = UDim2.new(1, -10, 0, 30)
Title.Position = UDim2.new(0, 5, 0, 5)
Title.BackgroundTransparency = 1
Title.Text = 'Advanced ESP HUD'
Title.TextColor3 = Color3.new(1, 1, 1)
Title.TextSize = 18
Title.Font = Enum.Font.SourceSansBold
Title.Parent = MainFrame
local ToggleButton = Instance.new('TextButton')
ToggleButton.Name = 'ToggleButton'
ToggleButton.Size = UDim2.new(0.9, 0, 0, 35)
ToggleButton.Position = UDim2.new(0.05, 0, 0.5, -17)
ToggleButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
ToggleButton.BorderSizePixel = 0
ToggleButton.Text = 'Enable ESP'
ToggleButton.TextColor3 = Color3.new(1, 1, 1)
ToggleButton.TextSize = 14
ToggleButton.Font = Enum.Font.SourceSansBold
ToggleButton.Parent = MainFrame
local ButtonCorner = Instance.new('UICorner')
ButtonCorner.CornerRadius = UDim.new(0, 6)
ButtonCorner.Parent = ToggleButton
local CloseButton = ToggleButton:Clone()
CloseButton.Name = 'CloseButton'
CloseButton.Size = UDim2.new(0, 25, 0, 25)
CloseButton.Position = UDim2.new(1, -30, 0, 5)
CloseButton.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
CloseButton.Text = 'X'
CloseButton.Parent = MainFrame
local MobileToggle = ToggleButton:Clone()
MobileToggle.Name = 'MobileToggleButton'
MobileToggle.Size = UDim2.new(0, 50, 0, 50)
MobileToggle.Position = UDim2.new(0, 10, 0, 10)
MobileToggle.Text = 'Menu'
MobileToggle.Parent = ScreenGui
MobileToggle.Visible = UserInputService.TouchEnabled
return {
mainFrame = MainFrame,
toggleButton = ToggleButton,
closeButton = CloseButton,
mobileToggle = MobileToggle
}
end
-- GUI Logic
local function setupGUI()
local gui = createGUI()
local function toggleESP()
State.isESPEnabled = not State.isESPEnabled
gui.toggleButton.Text = State.isESPEnabled and 'Disable ESP' or 'Enable ESP'
gui.toggleButton.BackgroundColor3 = State.isESPEnabled and Color3.fromRGB(200, 50, 50) or Color3.fromRGB(60, 60, 60)
if State.isESPEnabled then
table.insert(State.connections, RunService.Heartbeat:Connect(updateESP))
else
for _, connection in ipairs(State.connections) do
connection:Disconnect()
end
State.connections = {}
for _, player in ipairs(Players:GetPlayers()) do
local highlight = player.Character and player.Character:FindFirstChild('Highlight')
if highlight then highlight:Destroy() end
end
State.highlightedPlayer, State.monsterPlayer = nil, nil
end
end
gui.toggleButton.MouseButton1Click:Connect(debounce(toggleESP))
gui.closeButton.MouseButton1Click:Connect(function() gui.mainFrame.Visible = false end)
gui.mobileToggle.MouseButton1Click:Connect(function() gui.mainFrame.Visible = not gui.mainFrame.Visible end)
-- Draggable GUI
local dragging, dragInput, dragStart, startPos
gui.mainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = gui.mainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then dragging = false end
end)
end
end)
gui.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
local delta = input.Position - dragStart
gui.mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
-- Keyboard shortcut
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if not gameProcessed and input.KeyCode == Enum.KeyCode.G then
gui.mainFrame.Visible = not gui.mainFrame.Visible
end
end)
gui.mainFrame.Visible = false
end
-- Initialize
setupGUI()No comments yet for this script.



