
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local localPlayer = Players.LocalPlayer
local camera = workspace.CurrentCamera
local BOXES_ENABLED = true
local CHAMS_ENABLED = false
local TRACERS_ENABLED = false
local ESP_COLOR = Color3.fromRGB(0, 255, 100)
local BOX_THICKNESS = 2
local BOX_THICKNESS_MIN = 1
local BOX_THICKNESS_MAX = 12
local BOX_FILL_TRANSPARENCY = 1 -- 1 = hollow outline only
local CHAMS_FILL_TRANSPARENCY = 0.6
local CHAMS_OUTLINE_TRANSPARENCY = 0.2
local TRACER_THICKNESS = 1
local MENU_KEY = Enum.KeyCode.RightShift
local UI_VISIBLE = true
local currentHue = 0.4
local currentSat = 1
local currentVal = 1
local function getESPColor()
return Color3.fromHSV(currentHue, currentSat, currentVal)
end
ESP_COLOR = getESPColor()
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "PlayerESP"
screenGui.IgnoreGuiInset = true
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = localPlayer:WaitForChild("PlayerGui")
local BUTTON_HEIGHT = 34
local BUTTON_GAP = 8
local PANEL_PADDING = 12
local TITLE_BLOCK = 46
local BUTTON_COUNT = 4
local WHEEL_SIZE = 140
local VALUE_SLIDER_HEIGHT = 16
local COLOR_SECTION_GAP = 10
local THICKNESS_LABEL_HEIGHT = 18
local THICKNESS_SECTION_HEIGHT = THICKNESS_LABEL_HEIGHT + 6 + VALUE_SLIDER_HEIGHT + COLOR_SECTION_GAP
local THICKNESS_COLLAPSED_HEIGHT = THICKNESS_LABEL_HEIGHT + COLOR_SECTION_GAP
local COLOR_SECTION_HEIGHT = 22 + COLOR_SECTION_GAP + WHEEL_SIZE + 8 + VALUE_SLIDER_HEIGHT + 8 + 28
local PANEL_HEIGHT = TITLE_BLOCK
+ PANEL_PADDING
+ BUTTON_COUNT * BUTTON_HEIGHT
+ (BUTTON_COUNT - 1) * BUTTON_GAP
+ COLOR_SECTION_GAP
+ THICKNESS_SECTION_HEIGHT
+ COLOR_SECTION_HEIGHT
+ PANEL_PADDING
local COLLAPSED_PANEL_HEIGHT = PANEL_HEIGHT - (COLOR_SECTION_HEIGHT - 22)
local panel = Instance.new("Frame")
panel.Name = "TogglePanel"
panel.AnchorPoint = Vector2.new(1, 0)
panel.Position = UDim2.new(1, -16, 0, 16)
panel.Size = UDim2.fromOffset(190, PANEL_HEIGHT)
panel.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
panel.BackgroundTransparency = 0.15
panel.BorderSizePixel = 0
panel.Active = true
panel.ClipsDescendants = true
panel.ZIndex = 10
panel.Visible = UI_VISIBLE
panel.Parent = screenGui
local panelScale = Instance.new("UIScale")
panelScale.Scale = 1
panelScale.Parent = panel
local panelCorner = Instance.new("UICorner")
panelCorner.CornerRadius = UDim.new(0, 10)
panelCorner.Parent = panel
local panelStroke = Instance.new("UIStroke")
panelStroke.Color = Color3.fromRGB(70, 70, 80)
panelStroke.Thickness = 1
panelStroke.Parent = panel
local titleBar = Instance.new("Frame")
titleBar.Name = "TitleBar"
titleBar.Size = UDim2.new(1, 0, 0, TITLE_BLOCK)
titleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 42)
titleBar.BackgroundTransparency = 0.05
titleBar.BorderSizePixel = 0
titleBar.Active = true
titleBar.ZIndex = 11
titleBar.Parent = panel
local titleBarCorner = Instance.new("UICorner")
titleBarCorner.CornerRadius = UDim.new(0, 10)
titleBarCorner.Parent = titleBar
local titleBarBottom = Instance.new("Frame")
titleBarBottom.Name = "TitleBarBottomFill"
titleBarBottom.AnchorPoint = Vector2.new(0, 1)
titleBarBottom.Position = UDim2.fromScale(0, 1)
titleBarBottom.Size = UDim2.new(1, 0, 0, 12)
titleBarBottom.BackgroundColor3 = titleBar.BackgroundColor3
titleBarBottom.BackgroundTransparency = titleBar.BackgroundTransparency
titleBarBottom.BorderSizePixel = 0
titleBarBottom.ZIndex = 11
titleBarBottom.Parent = titleBar
local title = Instance.new("TextLabel")
title.Name = "Title"
title.BackgroundTransparency = 1
title.Position = UDim2.fromOffset(12, 8)
title.Size = UDim2.new(1, -24, 0, 22)
title.Font = Enum.Font.GothamBold
title.Text = "Player ESP"
title.TextColor3 = Color3.fromRGB(240, 240, 245)
title.TextSize = 15
title.TextXAlignment = Enum.TextXAlignment.Left
title.Active = false
title.ZIndex = 12
title.Parent = titleBar
local dragHint = Instance.new("TextLabel")
dragHint.Name = "DragHint"
dragHint.BackgroundTransparency = 1
dragHint.Position = UDim2.fromOffset(12, 28)
dragHint.Size = UDim2.new(1, -24, 0, 14)
dragHint.Font = Enum.Font.Gotham
dragHint.Text = "Drag here to move"
dragHint.TextColor3 = Color3.fromRGB(150, 150, 160)
dragHint.TextSize = 11
dragHint.TextXAlignment = Enum.TextXAlignment.Left
dragHint.Active = false
dragHint.ZIndex = 12
dragHint.Parent = titleBar
local function addClickAnimation(button)
local scale = Instance.new("UIScale")
scale.Parent = button
local function tweenScale(value, duration)
TweenService:Create(scale, TweenInfo.new(duration, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Scale = value,
}):Play()
end
button.MouseButton1Down:Connect(function()
tweenScale(0.94, 0.08)
end)
button.MouseButton1Up:Connect(function()
tweenScale(1.03, 0.14)
end)
button.MouseEnter:Connect(function()
tweenScale(1.03, 0.14)
end)
button.MouseLeave:Connect(function()
tweenScale(1, 0.14)
end)
end
local function createToggleButton(name, layoutIndex)
local y = TITLE_BLOCK + PANEL_PADDING + (layoutIndex - 1) * (BUTTON_HEIGHT + BUTTON_GAP)
local button = Instance.new("TextButton")
button.Name = name
button.Position = UDim2.fromOffset(PANEL_PADDING, y)
button.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, BUTTON_HEIGHT)
button.BackgroundColor3 = Color3.fromRGB(160, 50, 50)
button.BorderSizePixel = 0
button.Font = Enum.Font.GothamMedium
button.Text = ""
button.TextColor3 = Color3.fromRGB(255, 255, 255)
button.TextSize = 14
button.AutoButtonColor = true
button.ZIndex = 11
button.Parent = panel
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = button
addClickAnimation(button)
return button
end
local boxesButton = createToggleButton("BoxesButton", 1)
local chamsButton = createToggleButton("ChamsButton", 2)
local tracersButton = createToggleButton("TracersButton", 3)
local keybindButton = createToggleButton("KeybindButton", 4)
local thicknessSectionTop = TITLE_BLOCK
+ PANEL_PADDING
+ BUTTON_HEIGHT
+ BUTTON_GAP
chamsButton.Position = UDim2.fromOffset(PANEL_PADDING, thicknessSectionTop + THICKNESS_SECTION_HEIGHT)
tracersButton.Position = UDim2.fromOffset(PANEL_PADDING, thicknessSectionTop + THICKNESS_SECTION_HEIGHT + BUTTON_HEIGHT + BUTTON_GAP)
keybindButton.Position = UDim2.fromOffset(PANEL_PADDING, thicknessSectionTop + THICKNESS_SECTION_HEIGHT + (BUTTON_HEIGHT + BUTTON_GAP) * 2)
local thicknessLabel = Instance.new("TextLabel")
thicknessLabel.Name = "ThicknessLabel"
thicknessLabel.BackgroundTransparency = 1
thicknessLabel.Position = UDim2.fromOffset(PANEL_PADDING, thicknessSectionTop)
thicknessLabel.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, THICKNESS_LABEL_HEIGHT)
thicknessLabel.Font = Enum.Font.GothamBold
thicknessLabel.Text = "Box Thickness: " .. BOX_THICKNESS
thicknessLabel.TextColor3 = Color3.fromRGB(240, 240, 245)
thicknessLabel.TextSize = 14
thicknessLabel.TextXAlignment = Enum.TextXAlignment.Left
thicknessLabel.ZIndex = 11
thicknessLabel.Parent = panel
local thicknessDropdownButton = Instance.new("TextButton")
thicknessDropdownButton.Name = "ThicknessDropdownButton"
thicknessDropdownButton.BackgroundTransparency = 1
thicknessDropdownButton.Position = UDim2.fromOffset(PANEL_PADDING, thicknessSectionTop)
thicknessDropdownButton.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, THICKNESS_LABEL_HEIGHT)
thicknessDropdownButton.Text = ""
thicknessDropdownButton.ZIndex = 10
thicknessDropdownButton.Parent = panel
addClickAnimation(thicknessDropdownButton)
local thicknessDropdownArrow = Instance.new("TextLabel")
thicknessDropdownArrow.Name = "ThicknessDropdownArrow"
thicknessDropdownArrow.BackgroundTransparency = 1
thicknessDropdownArrow.AnchorPoint = Vector2.new(1, 0.5)
thicknessDropdownArrow.Position = UDim2.new(1, -PANEL_PADDING, 0, thicknessSectionTop + THICKNESS_LABEL_HEIGHT * 0.5)
thicknessDropdownArrow.Size = UDim2.fromOffset(16, 18)
thicknessDropdownArrow.Font = Enum.Font.GothamBold
thicknessDropdownArrow.Text = "^"
thicknessDropdownArrow.TextColor3 = Color3.fromRGB(190, 190, 200)
thicknessDropdownArrow.TextSize = 12
thicknessDropdownArrow.ZIndex = 12
thicknessDropdownArrow.Parent = panel
local thicknessSlider = Instance.new("Frame")
thicknessSlider.Name = "ThicknessSlider"
thicknessSlider.Position = UDim2.fromOffset(PANEL_PADDING, thicknessSectionTop + THICKNESS_LABEL_HEIGHT + 6)
thicknessSlider.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, VALUE_SLIDER_HEIGHT)
thicknessSlider.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
thicknessSlider.BorderSizePixel = 0
thicknessSlider.Active = true
thicknessSlider.ZIndex = 11
thicknessSlider.Parent = panel
local thicknessSliderCorner = Instance.new("UICorner")
thicknessSliderCorner.CornerRadius = UDim.new(0, 6)
thicknessSliderCorner.Parent = thicknessSlider
local thicknessFill = Instance.new("Frame")
thicknessFill.Name = "Fill"
thicknessFill.Size = UDim2.fromScale(
(BOX_THICKNESS - BOX_THICKNESS_MIN) / (BOX_THICKNESS_MAX - BOX_THICKNESS_MIN),
1
)
thicknessFill.BackgroundColor3 = Color3.fromRGB(0, 170, 80)
thicknessFill.BorderSizePixel = 0
thicknessFill.ZIndex = 12
thicknessFill.Parent = thicknessSlider
local thicknessFillCorner = Instance.new("UICorner")
thicknessFillCorner.CornerRadius = UDim.new(0, 6)
thicknessFillCorner.Parent = thicknessFill
local thicknessKnob = Instance.new("Frame")
thicknessKnob.Name = "ThicknessKnob"
thicknessKnob.AnchorPoint = Vector2.new(0.5, 0.5)
thicknessKnob.Position = UDim2.fromScale(
(BOX_THICKNESS - BOX_THICKNESS_MIN) / (BOX_THICKNESS_MAX - BOX_THICKNESS_MIN),
0.5
)
thicknessKnob.Size = UDim2.fromOffset(10, VALUE_SLIDER_HEIGHT + 4)
thicknessKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
thicknessKnob.BorderSizePixel = 0
thicknessKnob.ZIndex = 13
thicknessKnob.Parent = thicknessSlider
local thicknessKnobCorner = Instance.new("UICorner")
thicknessKnobCorner.CornerRadius = UDim.new(0, 4)
thicknessKnobCorner.Parent = thicknessKnob
local thicknessKnobStroke = Instance.new("UIStroke")
thicknessKnobStroke.Color = Color3.fromRGB(40, 40, 45)
thicknessKnobStroke.Thickness = 1
thicknessKnobStroke.Parent = thicknessKnob
local colorSectionTop = keybindButton.Position.Y.Offset + BUTTON_HEIGHT + COLOR_SECTION_GAP
local colorLabel = Instance.new("TextLabel")
colorLabel.Name = "ColorLabel"
colorLabel.BackgroundTransparency = 1
colorLabel.Position = UDim2.fromOffset(PANEL_PADDING, colorSectionTop)
colorLabel.Size = UDim2.new(1, -PANEL_PADDING * 2 - 36, 0, 22)
colorLabel.Font = Enum.Font.GothamBold
colorLabel.Text = "Color"
colorLabel.TextColor3 = Color3.fromRGB(240, 240, 245)
colorLabel.TextSize = 14
colorLabel.TextXAlignment = Enum.TextXAlignment.Left
colorLabel.ZIndex = 12
colorLabel.Parent = panel
local colorPreview = Instance.new("Frame")
colorPreview.Name = "ColorPreview"
colorPreview.AnchorPoint = Vector2.new(1, 0)
colorPreview.Position = UDim2.new(1, -PANEL_PADDING, 0, colorSectionTop)
colorPreview.Size = UDim2.fromOffset(28, 22)
colorPreview.BackgroundColor3 = ESP_COLOR
colorPreview.BorderSizePixel = 0
colorPreview.ZIndex = 12
colorPreview.Parent = panel
local previewCorner = Instance.new("UICorner")
previewCorner.CornerRadius = UDim.new(0, 6)
previewCorner.Parent = colorPreview
local previewStroke = Instance.new("UIStroke")
previewStroke.Color = Color3.fromRGB(200, 200, 210)
previewStroke.Thickness = 1
previewStroke.Parent = colorPreview
local colorDropdownButton = Instance.new("TextButton")
colorDropdownButton.Name = "ColorDropdownButton"
colorDropdownButton.BackgroundTransparency = 1
colorDropdownButton.Position = UDim2.fromOffset(PANEL_PADDING, colorSectionTop)
colorDropdownButton.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, 22)
colorDropdownButton.Text = ""
colorDropdownButton.ZIndex = 11
colorDropdownButton.Parent = panel
addClickAnimation(colorDropdownButton)
local colorDropdownArrow = Instance.new("TextLabel")
colorDropdownArrow.Name = "DropdownArrow"
colorDropdownArrow.BackgroundTransparency = 1
colorDropdownArrow.AnchorPoint = Vector2.new(1, 0.5)
colorDropdownArrow.Position = UDim2.new(1, -PANEL_PADDING - 34, 0, colorSectionTop + 11)
colorDropdownArrow.Size = UDim2.fromOffset(16, 18)
colorDropdownArrow.Font = Enum.Font.GothamBold
colorDropdownArrow.Text = "^"
colorDropdownArrow.TextColor3 = Color3.fromRGB(190, 190, 200)
colorDropdownArrow.TextSize = 12
colorDropdownArrow.ZIndex = 13
colorDropdownArrow.Parent = panel
local wheelTop = colorSectionTop + 22 + COLOR_SECTION_GAP
local wheelLeft = math.floor((190 - WHEEL_SIZE) / 2)
local wheelHolder = Instance.new("Frame")
wheelHolder.Name = "ColorWheel"
wheelHolder.Position = UDim2.fromOffset(wheelLeft, wheelTop)
wheelHolder.Size = UDim2.fromOffset(WHEEL_SIZE, WHEEL_SIZE)
wheelHolder.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
wheelHolder.BorderSizePixel = 0
wheelHolder.Active = true
wheelHolder.ZIndex = 11
wheelHolder.ClipsDescendants = true
wheelHolder.Parent = panel
local wheelHolderCorner = Instance.new("UICorner")
wheelHolderCorner.CornerRadius = UDim.new(0, 6)
wheelHolderCorner.Parent = wheelHolder
local wheelOutline = Instance.new("UIStroke")
wheelOutline.Color = Color3.fromRGB(90, 90, 100)
wheelOutline.Thickness = 1
wheelOutline.Parent = wheelHolder
local saturationGradient = Instance.new("UIGradient")
saturationGradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromHSV(currentHue, 1, 1)),
})
saturationGradient.Parent = wheelHolder
local brightnessOverlay = Instance.new("Frame")
brightnessOverlay.Name = "BrightnessOverlay"
brightnessOverlay.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
brightnessOverlay.BorderSizePixel = 0
brightnessOverlay.Size = UDim2.fromScale(1, 1)
brightnessOverlay.ZIndex = 13
brightnessOverlay.Parent = wheelHolder
local brightnessGradient = Instance.new("UIGradient")
brightnessGradient.Rotation = 90
brightnessGradient.Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 1),
NumberSequenceKeypoint.new(1, 0),
})
brightnessGradient.Parent = brightnessOverlay
local wheelSelector = Instance.new("Frame")
wheelSelector.Name = "WheelSelector"
wheelSelector.AnchorPoint = Vector2.new(0.5, 0.5)
wheelSelector.Size = UDim2.fromOffset(12, 12)
wheelSelector.BackgroundTransparency = 1
wheelSelector.BorderSizePixel = 0
wheelSelector.ZIndex = 20
wheelSelector.Parent = wheelHolder
local selectorStroke = Instance.new("UIStroke")
selectorStroke.Color = Color3.fromRGB(255, 255, 255)
selectorStroke.Thickness = 2
selectorStroke.Parent = wheelSelector
local selectorCorner = Instance.new("UICorner")
selectorCorner.CornerRadius = UDim.new(1, 0)
selectorCorner.Parent = wheelSelector
local selectorFill = Instance.new("Frame")
selectorFill.Name = "SelectorCore"
selectorFill.AnchorPoint = Vector2.new(0.5, 0.5)
selectorFill.Position = UDim2.fromScale(0.5, 0.5)
selectorFill.Size = UDim2.fromOffset(4, 4)
selectorFill.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
selectorFill.BorderSizePixel = 0
selectorFill.ZIndex = 21
selectorFill.Parent = wheelSelector
local selectorFillCorner = Instance.new("UICorner")
selectorFillCorner.CornerRadius = UDim.new(1, 0)
selectorFillCorner.Parent = selectorFill
local valueTop = wheelTop + WHEEL_SIZE + 8
local valueSlider = Instance.new("Frame")
valueSlider.Name = "ValueSlider"
valueSlider.Position = UDim2.fromOffset(PANEL_PADDING, valueTop)
valueSlider.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, VALUE_SLIDER_HEIGHT)
valueSlider.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
valueSlider.BorderSizePixel = 0
valueSlider.Active = true
valueSlider.ZIndex = 11
valueSlider.Parent = panel
local valueCorner = Instance.new("UICorner")
valueCorner.CornerRadius = UDim.new(0, 6)
valueCorner.Parent = valueSlider
local valueGradient = Instance.new("UIGradient")
valueGradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.17, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(0.33, Color3.fromRGB(0, 255, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(0, 255, 255)),
ColorSequenceKeypoint.new(0.67, Color3.fromRGB(0, 0, 255)),
ColorSequenceKeypoint.new(0.83, Color3.fromRGB(255, 0, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 0)),
})
valueGradient.Parent = valueSlider
local valueKnob = Instance.new("Frame")
valueKnob.Name = "ValueKnob"
valueKnob.AnchorPoint = Vector2.new(0.5, 0.5)
valueKnob.Position = UDim2.fromScale(currentHue, 0.5)
valueKnob.Size = UDim2.fromOffset(10, VALUE_SLIDER_HEIGHT + 4)
valueKnob.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
valueKnob.BorderSizePixel = 0
valueKnob.ZIndex = 12
valueKnob.Parent = valueSlider
local valueKnobCorner = Instance.new("UICorner")
valueKnobCorner.CornerRadius = UDim.new(0, 4)
valueKnobCorner.Parent = valueKnob
local valueKnobStroke = Instance.new("UIStroke")
valueKnobStroke.Color = Color3.fromRGB(40, 40, 45)
valueKnobStroke.Thickness = 1
valueKnobStroke.Parent = valueKnob
local hexLabel = Instance.new("TextLabel")
hexLabel.Name = "HexLabel"
hexLabel.BackgroundTransparency = 1
hexLabel.Position = UDim2.fromOffset(PANEL_PADDING, valueTop + VALUE_SLIDER_HEIGHT + 6)
hexLabel.Size = UDim2.new(1, -PANEL_PADDING * 2, 0, 18)
hexLabel.Font = Enum.Font.GothamMedium
hexLabel.Text = ""
hexLabel.TextColor3 = Color3.fromRGB(180, 180, 190)
hexLabel.TextSize = 12
hexLabel.TextXAlignment = Enum.TextXAlignment.Center
hexLabel.ZIndex = 11
hexLabel.Parent = panel
local thicknessDropdownOpen = true
local colorDropdownOpen = true
local panelResizeTween = nil
local colorDropdownRequest = 0
local thicknessShiftedItems = {
chamsButton,
tracersButton,
keybindButton,
colorLabel,
colorPreview,
colorDropdownButton,
colorDropdownArrow,
wheelHolder,
valueSlider,
hexLabel,
}
local thicknessItemPositions = {}
for _, gui in ipairs(thicknessShiftedItems) do
thicknessItemPositions[gui] = gui.Position
end
local function getPanelTargetHeight()
local height = PANEL_HEIGHT
if not thicknessDropdownOpen then
height = height - (THICKNESS_SECTION_HEIGHT - THICKNESS_COLLAPSED_HEIGHT)
end
if not colorDropdownOpen then
height = height - (COLOR_SECTION_HEIGHT - 22)
end
return height
end
local function resizePanel()
if panelResizeTween then
panelResizeTween:Cancel()
end
panelResizeTween = TweenService:Create(
panel,
TweenInfo.new(0.22, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{ Size = UDim2.fromOffset(190, getPanelTargetHeight()) }
)
panelResizeTween:Play()
return panelResizeTween
end
local function setThicknessDropdown(open)
if thicknessDropdownOpen == open then
return
end
thicknessDropdownOpen = open
thicknessDropdownArrow.Text = open and "^" or "v"
thicknessSlider.Visible = open
local shift = open and 0 or -(THICKNESS_SECTION_HEIGHT - THICKNESS_COLLAPSED_HEIGHT)
for _, gui in ipairs(thicknessShiftedItems) do
local originalPosition = thicknessItemPositions[gui]
TweenService:Create(
gui,
TweenInfo.new(0.22, Enum.EasingStyle.Quart, Enum.EasingDirection.Out),
{
Position = UDim2.new(
originalPosition.X.Scale,
originalPosition.X.Offset,
originalPosition.Y.Scale,
originalPosition.Y.Offset + shift
),
}
):Play()
end
resizePanel()
end
thicknessDropdownButton.MouseButton1Click:Connect(function()
setThicknessDropdown(not thicknessDropdownOpen)
end)
local function setColorDropdown(open)
if colorDropdownOpen == open then
return
end
colorDropdownOpen = open
colorDropdownRequest = colorDropdownRequest + 1
local request = colorDropdownRequest
colorDropdownArrow.Text = open and "^" or "v"
if open then
wheelHolder.Visible = true
valueSlider.Visible = true
hexLabel.Visible = true
end
local resizeTween = resizePanel()
if not open then
resizeTween.Completed:Connect(function(playbackState)
if request == colorDropdownRequest and playbackState == Enum.PlaybackState.Completed then
wheelHolder.Visible = false
valueSlider.Visible = false
hexLabel.Visible = false
end
end)
end
end
colorDropdownButton.MouseButton1Click:Connect(function()
setColorDropdown(not colorDropdownOpen)
end)
local function colorToHex(color)
local r = math.floor(color.R * 255 + 0.5)
local g = math.floor(color.G * 255 + 0.5)
local b = math.floor(color.B * 255 + 0.5)
return string.format("#%02X%02X%02X", r, g, b)
end
local dragging = false
local dragStart = nil
local startPos = nil
titleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch
then
dragging = true
dragStart = input.Position
startPos = panel.Position
local endedConn
endedConn = input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
dragStart = nil
startPos = nil
endedConn:Disconnect()
end
end)
end
end)
UserInputService.InputChanged:Connect(function(input)
if not dragging or not dragStart or not startPos then
return
end
if input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch
then
local delta = input.Position - dragStart
panel.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end)
local listeningForKeybind = false
local function refreshKeybindButton()
if listeningForKeybind then
keybindButton.Text = "Press any key..."
keybindButton.BackgroundColor3 = Color3.fromRGB(70, 90, 180)
else
keybindButton.Text = "Menu Key: " .. MENU_KEY.Name
keybindButton.BackgroundColor3 = Color3.fromRGB(55, 55, 70)
end
end
local function setUiVisible(visible)
UI_VISIBLE = visible
if visible then
panel.Visible = true
panelScale.Scale = 0.88
TweenService:Create(
panelScale,
TweenInfo.new(0.2, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
{ Scale = 1 }
):Play()
else
local closeTween = TweenService:Create(
panelScale,
TweenInfo.new(0.14, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
{ Scale = 0.88 }
)
closeTween:Play()
closeTween.Completed:Once(function(playbackState)
if playbackState == Enum.PlaybackState.Completed and not UI_VISIBLE then
panel.Visible = false
end
end)
end
end
keybindButton.MouseButton1Click:Connect(function()
listeningForKeybind = true
refreshKeybindButton()
end)
UserInputService.InputBegan:Connect(function(input, _gameProcessed)
if listeningForKeybind then
if input.UserInputType == Enum.UserInputType.Keyboard then
if input.KeyCode == Enum.KeyCode.Escape then
listeningForKeybind = false
refreshKeybindButton()
return
end
MENU_KEY = input.KeyCode
listeningForKeybind = false
refreshKeybindButton()
end
return
end
if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == MENU_KEY then
setUiVisible(not UI_VISIBLE)
end
end)
refreshKeybindButton()
local boxes = {}
local chams = {}
local tracers = {}
local function setToggleLook(button, label, enabled)
if enabled then
button.Text = label .. ": ON"
button.BackgroundColor3 = Color3.fromRGB(0, 170, 80)
else
button.Text = label .. ": OFF"
button.BackgroundColor3 = Color3.fromRGB(160, 50, 50)
end
end
local function applyColorToVisuals(color)
ESP_COLOR = color
colorPreview.BackgroundColor3 = color
hexLabel.Text = colorToHex(color)
saturationGradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 255, 255)),
ColorSequenceKeypoint.new(1, Color3.fromHSV(currentHue, 1, 1)),
})
for _, container in pairs(boxes) do
local fill = container:FindFirstChild("Fill")
if fill and fill:IsA("Frame") then
fill.BackgroundColor3 = color
end
for _, child in container:GetChildren() do
if child:IsA("Frame") and child.Name ~= "Fill" then
child.BackgroundColor3 = color
end
end
end
for _, highlight in pairs(chams) do
highlight.FillColor = color
highlight.OutlineColor = color
end
for _, line in pairs(tracers) do
line.BackgroundColor3 = color
end
end
local function updateWheelSelector()
wheelSelector.Position = UDim2.fromScale(currentSat, 1 - currentVal)
valueKnob.Position = UDim2.fromScale(currentHue, 0.5)
end
local function setColorFromHSV(h, s, v)
currentHue = math.clamp(h, 0, 1)
currentSat = math.clamp(s, 0, 1)
currentVal = math.clamp(v, 0, 1)
updateWheelSelector()
applyColorToVisuals(getESPColor())
end
local function pickFromWheel(mouseX, mouseY)
local abs = wheelHolder.AbsolutePosition
local size = wheelHolder.AbsoluteSize
local saturation = math.clamp((mouseX - abs.X) / math.max(size.X, 1), 0, 1)
local value = 1 - math.clamp((mouseY - abs.Y) / math.max(size.Y, 1), 0, 1)
setColorFromHSV(currentHue, saturation, value)
end
local function pickFromValueSlider(mouseX)
local abs = valueSlider.AbsolutePosition
local size = valueSlider.AbsoluteSize
local t = math.clamp((mouseX - abs.X) / math.max(size.X, 1), 0, 1)
setColorFromHSV(t, currentSat, currentVal)
end
local pickingWheel = false
local pickingValue = false
local function bindPicker(gui, onBegin, onMove)
gui.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch
then
onBegin(input)
local conn
conn = input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
pickingWheel = false
pickingValue = false
conn:Disconnect()
end
end)
end
end)
end
bindPicker(wheelHolder, function()
pickingWheel = true
local mouse = UserInputService:GetMouseLocation()
pickFromWheel(mouse.X, mouse.Y)
end, function() end)
bindPicker(valueSlider, function()
pickingValue = true
local mouse = UserInputService:GetMouseLocation()
pickFromValueSlider(mouse.X)
end, function() end)
UserInputService.InputChanged:Connect(function(input)
if input.UserInputType ~= Enum.UserInputType.MouseMovement
and input.UserInputType ~= Enum.UserInputType.Touch
then
return
end
if pickingWheel then
pickFromWheel(input.Position.X, input.Position.Y)
elseif pickingValue then
pickFromValueSlider(input.Position.X)
end
end)
local function createBoxFrame()
local container = Instance.new("Frame")
container.Name = "PlayerBox2D"
container.BackgroundTransparency = 1
container.BorderSizePixel = 0
container.Visible = false
container.ZIndex = 1
container.Parent = screenGui
if BOX_FILL_TRANSPARENCY < 1 then
local fill = Instance.new("Frame")
fill.Name = "Fill"
fill.BackgroundColor3 = ESP_COLOR
fill.BackgroundTransparency = BOX_FILL_TRANSPARENCY
fill.BorderSizePixel = 0
fill.Size = UDim2.fromScale(1, 1)
fill.ZIndex = 1
fill.Parent = container
end
local function makeEdge(name, position, size)
local edge = Instance.new("Frame")
edge.Name = name
edge.BackgroundColor3 = ESP_COLOR
edge.BackgroundTransparency = 0
edge.BorderSizePixel = 0
edge.Position = position
edge.Size = size
edge.ZIndex = 2
edge.Parent = container
end
local t = BOX_THICKNESS
makeEdge("Top", UDim2.fromOffset(0, 0), UDim2.new(1, 0, 0, t))
makeEdge("Bottom", UDim2.new(0, 0, 1, -t), UDim2.new(1, 0, 0, t))
makeEdge("Left", UDim2.fromOffset(0, 0), UDim2.new(0, t, 1, 0))
makeEdge("Right", UDim2.new(1, -t, 0, 0), UDim2.new(0, t, 1, 0))
return container
end
local function setBoxThickness(thickness)
BOX_THICKNESS = math.clamp(thickness, BOX_THICKNESS_MIN, BOX_THICKNESS_MAX)
local range = BOX_THICKNESS_MAX - BOX_THICKNESS_MIN
local percentage = range > 0 and (BOX_THICKNESS - BOX_THICKNESS_MIN) / range or 0
thicknessLabel.Text = string.format("Box Thickness: %.1f", BOX_THICKNESS)
thicknessFill.Size = UDim2.fromScale(percentage, 1)
thicknessKnob.Position = UDim2.fromScale(percentage, 0.5)
for _, container in pairs(boxes) do
local top = container:FindFirstChild("Top")
local bottom = container:FindFirstChild("Bottom")
local left = container:FindFirstChild("Left")
local right = container:FindFirstChild("Right")
if top and top:IsA("Frame") then
top.Size = UDim2.new(1, 0, 0, BOX_THICKNESS)
end
if bottom and bottom:IsA("Frame") then
bottom.Position = UDim2.new(0, 0, 1, -BOX_THICKNESS)
bottom.Size = UDim2.new(1, 0, 0, BOX_THICKNESS)
end
if left and left:IsA("Frame") then
left.Size = UDim2.new(0, BOX_THICKNESS, 1, 0)
end
if right and right:IsA("Frame") then
right.Position = UDim2.new(1, -BOX_THICKNESS, 0, 0)
right.Size = UDim2.new(0, BOX_THICKNESS, 1, 0)
end
end
end
local function pickFromThicknessSlider(mouseX)
local absolutePosition = thicknessSlider.AbsolutePosition
local absoluteSize = thicknessSlider.AbsoluteSize
local percentage = math.clamp((mouseX - absolutePosition.X) / math.max(absoluteSize.X, 1), 0, 1)
setBoxThickness(BOX_THICKNESS_MIN + percentage * (BOX_THICKNESS_MAX - BOX_THICKNESS_MIN))
end
local pickingThickness = false
thicknessSlider.InputBegan:Connect(function(input)
if input.UserInputType ~= Enum.UserInputType.MouseButton1
and input.UserInputType ~= Enum.UserInputType.Touch
then
return
end
pickingThickness = true
pickFromThicknessSlider(input.Position.X)
local connection
connection = input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
pickingThickness = false
connection:Disconnect()
end
end)
end)
UserInputService.InputChanged:Connect(function(input)
if pickingThickness and (input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch) then
pickFromThicknessSlider(input.Position.X)
end
end)
local function clearBox(character)
local frame = boxes[character]
if frame then
frame:Destroy()
boxes[character] = nil
end
end
local function hideAllBoxes()
for _, frame in pairs(boxes) do
frame.Visible = false
end
end
local function ensureBox(character)
local frame = boxes[character]
if not frame then
frame = createBoxFrame()
boxes[character] = frame
end
return frame
end
local function clearCham(character)
local highlight = chams[character]
if highlight then
highlight:Destroy()
chams[character] = nil
end
end
local function clearAllChams()
for character in pairs(chams) do
clearCham(character)
end
end
local function ensureCham(character)
local highlight = chams[character]
if not highlight then
highlight = Instance.new("Highlight")
highlight.Name = "PlayerChams"
highlight.Adornee = character
highlight.FillColor = ESP_COLOR
highlight.FillTransparency = CHAMS_FILL_TRANSPARENCY
highlight.OutlineColor = ESP_COLOR
highlight.OutlineTransparency = CHAMS_OUTLINE_TRANSPARENCY
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Parent = character
chams[character] = highlight
else
highlight.FillColor = ESP_COLOR
highlight.OutlineColor = ESP_COLOR
end
return highlight
end
local function createTracerFrame()
local line = Instance.new("Frame")
line.Name = "PlayerTracer"
line.AnchorPoint = Vector2.new(0.5, 0.5)
line.BackgroundColor3 = ESP_COLOR
line.BackgroundTransparency = 0
line.BorderSizePixel = 0
line.Visible = false
line.ZIndex = 1
line.Parent = screenGui
return line
end
local function clearTracer(character)
local line = tracers[character]
if line then
line:Destroy()
tracers[character] = nil
end
end
local function hideAllTracers()
for _, line in pairs(tracers) do
line.Visible = false
end
end
local function ensureTracer(character)
local line = tracers[character]
if not line then
line = createTracerFrame()
tracers[character] = line
else
line.BackgroundColor3 = ESP_COLOR
end
return line
end
local function updateTracerLine(line, fromX, fromY, toX, toY)
local dx = toX - fromX
local dy = toY - fromY
local length = math.sqrt(dx * dx + dy * dy)
if length < 1 then
line.Visible = false
return
end
line.Visible = true
line.BackgroundColor3 = ESP_COLOR
line.Size = UDim2.fromOffset(length, TRACER_THICKNESS)
line.Position = UDim2.fromOffset((fromX + toX) * 0.5, (fromY + toY) * 0.5)
line.Rotation = math.deg(math.atan2(dy, dx))
end
local function clearAllVisuals(character)
clearBox(character)
clearCham(character)
clearTracer(character)
end
local function refreshToggleUI()
setToggleLook(boxesButton, "Boxes", BOXES_ENABLED)
setToggleLook(chamsButton, "Chams", CHAMS_ENABLED)
setToggleLook(tracersButton, "Tracers", TRACERS_ENABLED)
if not BOXES_ENABLED then
hideAllBoxes()
end
if not CHAMS_ENABLED then
clearAllChams()
end
if not TRACERS_ENABLED then
hideAllTracers()
end
end
boxesButton.MouseButton1Click:Connect(function()
BOXES_ENABLED = not BOXES_ENABLED
refreshToggleUI()
end)
chamsButton.MouseButton1Click:Connect(function()
CHAMS_ENABLED = not CHAMS_ENABLED
refreshToggleUI()
end)
tracersButton.MouseButton1Click:Connect(function()
TRACERS_ENABLED = not TRACERS_ENABLED
refreshToggleUI()
end)
refreshToggleUI()
setColorFromHSV(currentHue, currentSat, currentVal)
local function getCorners(cf, size)
local half = size * 0.5
local x, y, z = half.X, half.Y, half.Z
return {
cf:PointToWorldSpace(Vector3.new(-x, -y, -z)),
cf:PointToWorldSpace(Vector3.new(x, -y, -z)),
cf:PointToWorldSpace(Vector3.new(-x, y, -z)),
cf:PointToWorldSpace(Vector3.new(x, y, -z)),
cf:PointToWorldSpace(Vector3.new(-x, -y, z)),
cf:PointToWorldSpace(Vector3.new(x, -y, z)),
cf:PointToWorldSpace(Vector3.new(-x, y, z)),
cf:PointToWorldSpace(Vector3.new(x, y, z)),
}
end
local function worldBoxToScreen(cf, size)
local minX, minY = math.huge, math.huge
local maxX, maxY = -math.huge, -math.huge
local anyInFront = false
for _, corner in getCorners(cf, size) do
local screenPos = camera:WorldToViewportPoint(corner)
if screenPos.Z > 0 then
anyInFront = true
minX = math.min(minX, screenPos.X)
minY = math.min(minY, screenPos.Y)
maxX = math.max(maxX, screenPos.X)
maxY = math.max(maxY, screenPos.Y)
end
end
if not anyInFront then
return nil
end
local width = maxX - minX
local height = maxY - minY
if width < 1 or height < 1 then
return nil
end
return minX, minY, width, height
end
local function getRootPart(character)
local root = character:FindFirstChild("HumanoidRootPart")
or character:FindFirstChild("UpperTorso")
or character:FindFirstChild("Torso")
or character.PrimaryPart
if root and root:IsA("BasePart") then
return root
end
return nil
end
local function onCharacterAdded(player, character)
if player == localPlayer then
return
end
local humanoid = character:WaitForChild("Humanoid", 10)
if not humanoid then
return
end
humanoid.Died:Connect(function()
clearAllVisuals(character)
end)
end
local function hookPlayer(player)
if player.Character then
task.spawn(onCharacterAdded, player, player.Character)
end
player.CharacterAdded:Connect(function(character)
onCharacterAdded(player, character)
end)
player.CharacterRemoving:Connect(function(character)
clearAllVisuals(character)
end)
end
for _, player in Players:GetPlayers() do
hookPlayer(player)
end
Players.PlayerAdded:Connect(hookPlayer)
Players.PlayerRemoving:Connect(function(player)
if player.Character then
clearAllVisuals(player.Character)
end
end)
RunService.RenderStepped:Connect(function()
camera = workspace.CurrentCamera
if not camera then
return
end
local anyFeature = BOXES_ENABLED or CHAMS_ENABLED or TRACERS_ENABLED
if not anyFeature then
hideAllBoxes()
clearAllChams()
hideAllTracers()
return
end
local viewport = camera.ViewportSize
local tracerOriginX = viewport.X * 0.5
local tracerOriginY = viewport.Y
for _, player in Players:GetPlayers() do
if player == localPlayer then
continue
end
local character = player.Character
if not character or not character.Parent then
if character then
clearAllVisuals(character)
end
continue
end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid or humanoid.Health <= 0 then
clearAllVisuals(character)
continue
end
if CHAMS_ENABLED then
ensureCham(character)
else
clearCham(character)
end
local ok, cf, size = pcall(function()
return character:GetBoundingBox()
end)
local hasBounds = ok and typeof(cf) == "CFrame"
if BOXES_ENABLED and hasBounds then
local x, y, w, h = worldBoxToScreen(cf, size)
local frame = ensureBox(character)
if not x then
frame.Visible = false
else
frame.Visible = true
frame.Position = UDim2.fromOffset(x, y)
frame.Size = UDim2.fromOffset(w, h)
end
else
local frame = boxes[character]
if frame then
frame.Visible = false
end
end
if TRACERS_ENABLED then
local root = getRootPart(character)
local line = ensureTracer(character)
if root then
local target = root.Position - Vector3.new(0, root.Size.Y * 0.5, 0)
local screenPos = camera:WorldToViewportPoint(target)
if screenPos.Z > 0 then
updateTracerLine(line, tracerOriginX, tracerOriginY, screenPos.X, screenPos.Y)
else
line.Visible = false
end
else
line.Visible = false
end
else
local line = tracers[character]
if line then
line.Visible = false
end
end
end
for character in pairs(boxes) do
if not character.Parent then
clearAllVisuals(character)
end
end
for character in pairs(chams) do
if not character.Parent then
clearAllVisuals(character)
end
end
for character in pairs(tracers) do
if not character.Parent then
clearAllVisuals(character)
end
end
end)No comments yet for this script.



