
KeylessUniversal

--[[
╔════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██╗ ██████╗██╗ ██╗███████╗ █████╗ ████████╗███████╗ ║
║ ██║██╔════╝██║ ██║██╔════╝██╔══██╗╚══██╔══╝██╔════╝ ║
║ ██║██║ ███████║█████╗ ███████║ ██║ ███████╗ ║
║ ██ ██║██║ ██╔══██║██╔══╝ ██╔══██║ ██║ ╚════██║ ║
║ ╚█████╔╝╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████║ ║
║ ╚════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ║
║ ║
║ M A S T E R P I E C E E S P ║
║ Full Package: ESP + Menu ║
║ ║
║ by Bin for Jack ♡ ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════╝
]]
-- ════════════════════════════════════════════════════════════════════════════════
-- SERVICES
-- ════════════════════════════════════════════════════════════════════════════════
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local HttpService = game:GetService("HttpService")
local MarketplaceService = game:GetService("MarketplaceService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera
local Mouse = LocalPlayer:GetMouse()
-- ════════════════════════════════════════════════════════════════════════════════
-- CONFIGURATION
-- ════════════════════════════════════════════════════════════════════════════════
local Config = {
-- Main
Enabled = true,
TeamCheck = false,
MaxDistance = 2500,
-- Box
Box = true,
DynamicBox = true,
BoxPadding = 4,
BoxGlow = true,
BoxGlowIntensity = 55,
BoxFill = true,
BoxFillOpacity = 92,
BoxGradient = true,
BoxCornerLength = 28,
BoxAnimated = true,
BoxAccentLines = true,
BoxCornerDots = true,
-- Name
Name = true,
NameGlow = true,
NameBackground = true,
NameSize = 13,
-- Health
Health = true,
HealthSegments = 10,
HealthGlow = true,
HealthText = true,
-- Distance
Distance = true,
-- Weapon
Weapon = true,
WeaponBackground = true,
-- Tracer
Tracer = true,
TracerOrigin = "Bottom",
TracerGlow = true,
TracerSegments = 16,
-- Skeleton
Skeleton = true,
SkeletonGlow = true,
SkeletonThickness = 16,
-- Head
HeadDot = true,
HeadDotSize = 4,
-- Look Direction
LookDirection = true,
LookLength = 40,
-- Off-Screen
OffScreenArrows = true,
ArrowSize = 20,
ArrowDistance = 140,
-- Chams
Chams = true,
ChamsOpacity = 35,
-- UI
Crosshair = true,
Watermark = true,
TargetInfo = true,
FPSCounter = true,
GlowPulse = true,
SmoothMovement = true,
AnimationSpeed = 50,
-- Colors
EnemyColor = Color3.fromRGB(255, 85, 100),
EnemyColorLight = Color3.fromRGB(255, 140, 150),
TeamColor = Color3.fromRGB(85, 255, 170),
TeamColorLight = Color3.fromRGB(140, 255, 200)
}
-- ════════════════════════════════════════════════════════════════════════════════
-- UTILITY FUNCTIONS
-- ════════════════════════════════════════════════════════════════════════════════
local floor, ceil, clamp, sin, cos, tan, atan2, rad, deg, abs, min, max, sqrt, pi, huge =
math.floor, math.ceil, math.clamp, math.sin, math.cos, math.tan, math.atan2,
math.rad, math.deg, math.abs, math.min, math.max, math.sqrt, math.pi, math.huge
local function Lerp(a, b, t)
return a + (b - a) * t
end
local function LerpColor(c1, c2, t)
return Color3.new(Lerp(c1.R, c2.R, t), Lerp(c1.G, c2.G, t), Lerp(c1.B, c2.B, t))
end
local function LerpVector2(v1, v2, t)
return Vector2.new(Lerp(v1.X, v2.X, t), Lerp(v1.Y, v2.Y, t))
end
local function SmoothStep(t)
return t * t * (3 - 2 * t)
end
local function GetPulse(speed, minVal, maxVal)
local t = (sin(tick() * speed * pi) + 1) / 2
return Lerp(minVal or 0, maxVal or 1, t)
end
local function GetBreathing(speed, minVal, maxVal)
local t = (sin(tick() * speed) + 1) / 2
t = SmoothStep(t)
return Lerp(minVal or 0, maxVal or 1, t)
end
local function GetHealthColor(percent)
percent = clamp(percent, 0, 1)
if percent > 0.6 then
return LerpColor(Color3.fromRGB(255, 200, 0), Color3.fromRGB(80, 255, 120), (percent - 0.6) / 0.4)
elseif percent > 0.3 then
return LerpColor(Color3.fromRGB(255, 100, 50), Color3.fromRGB(255, 200, 0), (percent - 0.3) / 0.3)
else
return LerpColor(Color3.fromRGB(255, 50, 50), Color3.fromRGB(255, 100, 50), percent / 0.3)
end
end
local function WorldToScreen(pos)
local screenPos, onScreen = Camera:WorldToViewportPoint(pos)
return Vector2.new(screenPos.X, screenPos.Y), onScreen, screenPos.Z
end
local function IsAlive(player)
local char = player.Character
if not char then return false end
local hum = char:FindFirstChildOfClass("Humanoid")
local root = char:FindFirstChild("HumanoidRootPart")
return hum and root and hum.Health > 0
end
local function IsTeammate(player)
if not Config.TeamCheck then return false end
return player.Team and LocalPlayer.Team and player.Team == LocalPlayer.Team
end
local function GetDistance(p1, p2)
return (p1 - p2).Magnitude
end
-- ════════════════════════════════════════════════════════════════════════════════
-- DYNAMIC BOUNDING BOX
-- ════════════════════════════════════════════════════════════════════════════════
local function GetDynamicBoundingBox(character)
local minX, minY = huge, huge
local maxX, maxY = -huge, -huge
local onScreenCount = 0
local totalDepth = 0
local parts = {
"Head", "UpperTorso", "LowerTorso", "Torso", "HumanoidRootPart",
"LeftUpperArm", "LeftLowerArm", "LeftHand",
"RightUpperArm", "RightLowerArm", "RightHand",
"LeftUpperLeg", "LeftLowerLeg", "LeftFoot",
"RightUpperLeg", "RightLowerLeg", "RightFoot",
"Left Arm", "Right Arm", "Left Leg", "Right Leg"
}
for _, partName in ipairs(parts) do
local part = character:FindFirstChild(partName)
if part and part:IsA("BasePart") then
local cf = part.CFrame
local size = part.Size
local corners = {
cf * CFrame.new( size.X/2, size.Y/2, size.Z/2),
cf * CFrame.new( size.X/2, size.Y/2, -size.Z/2),
cf * CFrame.new( size.X/2, -size.Y/2, size.Z/2),
cf * CFrame.new( size.X/2, -size.Y/2, -size.Z/2),
cf * CFrame.new(-size.X/2, size.Y/2, size.Z/2),
cf * CFrame.new(-size.X/2, size.Y/2, -size.Z/2),
cf * CFrame.new(-size.X/2, -size.Y/2, size.Z/2),
cf * CFrame.new(-size.X/2, -size.Y/2, -size.Z/2)
}
for _, corner in ipairs(corners) do
local screenPos, onScreen, depth = WorldToScreen(corner.Position)
if onScreen and depth > 0 then
minX = min(minX, screenPos.X)
minY = min(minY, screenPos.Y)
maxX = max(maxX, screenPos.X)
maxY = max(maxY, screenPos.Y)
onScreenCount = onScreenCount + 1
totalDepth = totalDepth + depth
end
end
end
end
if onScreenCount < 4 then return nil end
local padding = Config.BoxPadding
minX, minY = minX - padding, minY - padding
maxX, maxY = maxX + padding, maxY + padding
return {
Position = Vector2.new((minX + maxX) / 2, (minY + maxY) / 2),
Size = Vector2.new(maxX - minX, maxY - minY),
Min = Vector2.new(minX, minY),
Max = Vector2.new(maxX, maxY),
Depth = totalDepth / onScreenCount
}
end
local function GetSimpleBoundingBox(character)
local root = character:FindFirstChild("HumanoidRootPart")
if not root then return nil end
local pos, onScreen, depth = WorldToScreen(root.Position)
if not onScreen or depth < 0 then return nil end
local scale = 1 / (depth * tan(rad(Camera.FieldOfView / 2)) * 2) * 1000
local height = scale * 5.2
local width = height * 0.5
return {
Position = pos,
Size = Vector2.new(width, height),
Min = Vector2.new(pos.X - width/2, pos.Y - height/2),
Max = Vector2.new(pos.X + width/2, pos.Y + height/2),
Depth = depth
}
end
local function GetBoundingBox(character)
if Config.DynamicBox then
local dynamic = GetDynamicBoundingBox(character)
if dynamic then return dynamic end
end
return GetSimpleBoundingBox(character)
end
-- ════════════════════════════════════════════════════════════════════════════════
-- DRAWING UTILITIES
-- ════════════════════════════════════════════════════════════════════════════════
local function NewDrawing(drawingType, props)
local d = Drawing.new(drawingType)
for k, v in pairs(props or {}) do
pcall(function() d[k] = v end)
end
return d
end
-- ════════════════════════════════════════════════════════════════════════════════
-- ESP CACHE & OBJECTS
-- ════════════════════════════════════════════════════════════════════════════════
local ESPObjects = {}
local SmoothData = {}
local function CreateESP(player)
local esp = {
-- Box
BoxFill = NewDrawing("Square", { Filled = true }),
BoxFillGradient = NewDrawing("Square", { Filled = true }),
BoxGlowOuter = {},
BoxGlowInner = {},
BoxOutlines = {},
BoxCorners = {},
BoxAccentLines = {},
BoxCornerDots = {},
BoxCornerDotsGlow = {},
-- Name
NameBackground = NewDrawing("Square", { Filled = true }),
NameGlow = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex }),
NameShadow = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex, Color = Color3.new(0,0,0) }),
Name = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex }),
-- Distance
DistanceShadow = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex, Color = Color3.new(0,0,0) }),
Distance = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex }),
-- Weapon
WeaponBackground = NewDrawing("Square", { Filled = true }),
WeaponShadow = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex, Color = Color3.new(0,0,0) }),
Weapon = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex }),
-- Health
HealthOutline = NewDrawing("Square", { Filled = true, Color = Color3.new(0,0,0) }),
HealthBackground = NewDrawing("Square", { Filled = true }),
HealthGlow = NewDrawing("Square", { Filled = true }),
HealthSegments = {},
HealthText = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex, Outline = true }),
-- Tracer
TracerGlows = {},
TracerLines = {},
-- Skeleton
SkeletonGlows = {},
SkeletonBones = {},
SkeletonJoints = {},
-- Head
HeadGlowOuter = NewDrawing("Circle", { Filled = true, NumSides = 24 }),
HeadGlowInner = NewDrawing("Circle", { Filled = true, NumSides = 24 }),
HeadOutline = NewDrawing("Circle", { Filled = true, NumSides = 24, Color = Color3.new(0,0,0) }),
HeadDot = NewDrawing("Circle", { Filled = true, NumSides = 24 }),
-- Look Direction
LookGlow = NewDrawing("Line", {}),
LookLine = NewDrawing("Line", {}),
LookArrow = NewDrawing("Triangle", { Filled = true }),
-- Off-Screen Arrow
ArrowGlowOuter = NewDrawing("Triangle", { Filled = true }),
ArrowGlowInner = NewDrawing("Triangle", { Filled = true }),
ArrowOutline = NewDrawing("Triangle", { Filled = true, Color = Color3.new(0,0,0) }),
Arrow = NewDrawing("Triangle", { Filled = true }),
ArrowDistance = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex, Outline = true }),
ArrowName = NewDrawing("Text", { Center = true, Font = Drawing.Fonts.Plex, Outline = true }),
-- Chams
Highlight = Instance.new("Highlight")
}
-- Initialize arrays
for i = 1, 8 do
esp.BoxGlowOuter[i] = NewDrawing("Line", { Thickness = 6 })
esp.BoxGlowInner[i] = NewDrawing("Line", { Thickness = 3 })
esp.BoxOutlines[i] = NewDrawing("Line", { Thickness = 3, Color = Color3.new(0,0,0) })
esp.BoxCorners[i] = NewDrawing("Line", { Thickness = 1.5 })
end
for i = 1, 4 do
esp.BoxAccentLines[i] = NewDrawing("Line", { Thickness = 1 })
esp.BoxCornerDots[i] = NewDrawing("Circle", { Filled = true, NumSides = 12, Radius = 2.5 })
esp.BoxCornerDotsGlow[i] = NewDrawing("Circle", { Filled = true, NumSides = 12 })
end
for i = 1, Config.HealthSegments do
esp.HealthSegments[i] = NewDrawing("Square", { Filled = true })
end
for i = 1, Config.TracerSegments do
esp.TracerGlows[i] = NewDrawing("Line", { Thickness = 4 })
esp.TracerLines[i] = NewDrawing("Line", { Thickness = 1.2 })
end
for i = 1, 14 do
esp.SkeletonGlows[i] = NewDrawing("Line", { Thickness = 4 })
esp.SkeletonBones[i] = NewDrawing("Line", { Thickness = 1.5 })
end
for i = 1, 16 do
esp.SkeletonJoints[i] = NewDrawing("Circle", { Filled = true, NumSides = 10, Radius = 2 })
end
esp.Highlight.FillTransparency = Config.ChamsOpacity / 100
esp.Highlight.OutlineTransparency = 0
esp.Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
return esp
end
local function DestroyESP(player)
local esp = ESPObjects[player]
if not esp then return end
local function remove(d)
if d and type(d) == "table" and d.Remove then
pcall(function() d:Remove() end)
end
end
for k, v in pairs(esp) do
if type(v) == "table" and v[1] then
for _, d in pairs(v) do remove(d) end
elseif typeof(v) == "Instance" then
pcall(function() v:Destroy() end)
else
remove(v)
end
end
ESPObjects[player] = nil
SmoothData[player] = nil
end
-- ════════════════════════════════════════════════════════════════════════════════
-- ESP UPDATE FUNCTION
-- ════════════════════════════════════════════════════════════════════════════════
local function UpdateESP(player, esp)
local character = player.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
local root = character and character:FindFirstChild("HumanoidRootPart")
local head = character and character:FindFirstChild("Head")
if not SmoothData[player] then
SmoothData[player] = { boxMin = nil, boxMax = nil, health = 1, lastUpdate = tick() }
end
local smooth = SmoothData[player]
local deltaTime = tick() - smooth.lastUpdate
smooth.lastUpdate = tick()
-- Hide all function
local function HideAll()
esp.BoxFill.Visible = false
esp.BoxFillGradient.Visible = false
for i = 1, 8 do
esp.BoxGlowOuter[i].Visible = false
esp.BoxGlowInner[i].Visible = false
esp.BoxOutlines[i].Visible = false
esp.BoxCorners[i].Visible = false
end
for i = 1, 4 do
esp.BoxAccentLines[i].Visible = false
esp.BoxCornerDots[i].Visible = false
esp.BoxCornerDotsGlow[i].Visible = false
end
esp.NameBackground.Visible = false
esp.NameGlow.Visible = false
esp.NameShadow.Visible = false
esp.Name.Visible = false
esp.DistanceShadow.Visible = false
esp.Distance.Visible = false
esp.WeaponBackground.Visible = false
esp.WeaponShadow.Visible = false
esp.Weapon.Visible = false
esp.HealthOutline.Visible = false
esp.HealthBackground.Visible = false
esp.HealthGlow.Visible = false
esp.HealthText.Visible = false
for i = 1, #esp.HealthSegments do esp.HealthSegments[i].Visible = false end
for i = 1, #esp.TracerGlows do
esp.TracerGlows[i].Visible = false
esp.TracerLines[i].Visible = false
end
for i = 1, #esp.SkeletonGlows do
esp.SkeletonGlows[i].Visible = false
esp.SkeletonBones[i].Visible = false
end
for i = 1, #esp.SkeletonJoints do esp.SkeletonJoints[i].Visible = false end
esp.HeadGlowOuter.Visible = false
esp.HeadGlowInner.Visible = false
esp.HeadOutline.Visible = false
esp.HeadDot.Visible = false
esp.LookGlow.Visible = false
esp.LookLine.Visible = false
esp.LookArrow.Visible = false
esp.ArrowGlowOuter.Visible = false
esp.ArrowGlowInner.Visible = false
esp.ArrowOutline.Visible = false
esp.Arrow.Visible = false
esp.ArrowDistance.Visible = false
esp.ArrowName.Visible = false
if esp.Highlight.Parent then esp.Highlight.Parent = nil end
end
if not Config.Enabled or not IsAlive(player) then
HideAll()
return
end
local localRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not localRoot then HideAll() return end
local distance = GetDistance(root.Position, localRoot.Position)
if distance > Config.MaxDistance then HideAll() return end
local isTeammate = IsTeammate(player)
local mainColor = isTeammate and Config.TeamColor or Config.EnemyColor
local lightColor = isTeammate and Config.TeamColorLight or Config.EnemyColorLight
local time = tick()
local pulse = Config.GlowPulse and GetPulse(3 * (Config.AnimationSpeed / 50), 0.5, 0.8) or (Config.BoxGlowIntensity / 100)
local breathe = GetBreathing(2 * (Config.AnimationSpeed / 50), 0.9, 1.1)
local bbox = GetBoundingBox(character)
-- ═══ OFF-SCREEN ARROWS ═══
if not bbox and Config.OffScreenArrows then
local pos, onScreen = WorldToScreen(root.Position)
if not onScreen then
local center = Camera.ViewportSize / 2
local dir = (pos - center).Unit
local arrowPos = center + dir * Config.ArrowDistance
local angle = atan2(dir.Y, dir.X)
local size = Config.ArrowSize * breathe
local p1 = arrowPos + Vector2.new(cos(angle) * size, sin(angle) * size)
local p2 = arrowPos + Vector2.new(cos(angle + 2.3) * size * 0.55, sin(angle + 2.3) * size * 0.55)
local p3 = arrowPos + Vector2.new(cos(angle - 2.3) * size * 0.55, sin(angle - 2.3) * size * 0.55)
if Config.BoxGlow then
esp.ArrowGlowOuter.PointA, esp.ArrowGlowOuter.PointB, esp.ArrowGlowOuter.PointC = p1, p2, p3
esp.ArrowGlowOuter.Color = mainColor
esp.ArrowGlowOuter.Transparency = pulse + 0.3
esp.ArrowGlowOuter.Visible = true
esp.ArrowGlowInner.PointA, esp.ArrowGlowInner.PointB, esp.ArrowGlowInner.PointC = p1, p2, p3
esp.ArrowGlowInner.Color = lightColor
esp.ArrowGlowInner.Transparency = pulse
esp.ArrowGlowInner.Visible = true
else
esp.ArrowGlowOuter.Visible = false
esp.ArrowGlowInner.Visible = false
end
local outDir = dir * 2
esp.ArrowOutline.PointA = p1 + outDir
esp.ArrowOutline.PointB = p2 + outDir
esp.ArrowOutline.PointC = p3 + outDir
esp.ArrowOutline.Visible = true
esp.Arrow.PointA, esp.Arrow.PointB, esp.Arrow.PointC = p1, p2, p3
esp.Arrow.Color = mainColor
esp.Arrow.Visible = true
esp.ArrowDistance.Text = floor(distance) .. "m"
esp.ArrowDistance.Position = arrowPos - dir * 25
esp.ArrowDistance.Color = Color3.fromRGB(200, 200, 210)
esp.ArrowDistance.Visible = true
esp.ArrowName.Text = player.DisplayName
esp.ArrowName.Position = arrowPos - dir * 38
esp.ArrowName.Color = mainColor
esp.ArrowName.Visible = true
else
esp.ArrowGlowOuter.Visible = false
esp.ArrowGlowInner.Visible = false
esp.ArrowOutline.Visible = false
esp.Arrow.Visible = false
esp.ArrowDistance.Visible = false
esp.ArrowName.Visible = false
end
else
esp.ArrowGlowOuter.Visible = false
esp.ArrowGlowInner.Visible = false
esp.ArrowOutline.Visible = false
esp.Arrow.Visible = false
esp.ArrowDistance.Visible = false
esp.ArrowName.Visible = false
end
if not bbox then HideAll() return end
-- Smooth movement
local left, top, right, bottom
if Config.SmoothMovement and smooth.boxMin then
local smoothFactor = clamp(deltaTime * 15, 0, 1)
smooth.boxMin = LerpVector2(smooth.boxMin, bbox.Min, smoothFactor)
smooth.boxMax = LerpVector2(smooth.boxMax, bbox.Max, smoothFactor)
left, top = smooth.boxMin.X, smooth.boxMin.Y
right, bottom = smooth.boxMax.X, smooth.boxMax.Y
else
smooth.boxMin = bbox.Min
smooth.boxMax = bbox.Max
left, top = bbox.Min.X, bbox.Min.Y
right, bottom = bbox.Max.X, bbox.Max.Y
end
local width = right - left
local height = bottom - top
local centerX = (left + right) / 2
local centerY = (top + bottom) / 2
local cornerLen = min(width, height) * (Config.BoxCornerLength / 100)
-- ═══ BOX ═══
if Config.Box then
if Config.BoxFill then
esp.BoxFill.Position = Vector2.new(left, top)
esp.BoxFill.Size = Vector2.new(width, height)
esp.BoxFill.Color = mainColor
esp.BoxFill.Transparency = Config.BoxFillOpacity / 100
esp.BoxFill.Visible = true
if Config.BoxGradient then
esp.BoxFillGradient.Position = Vector2.new(left, top)
esp.BoxFillGradient.Size = Vector2.new(width, height * 0.35)
esp.BoxFillGradient.Color = lightColor
esp.BoxFillGradient.Transparency = (Config.BoxFillOpacity / 100) + 0.03
esp.BoxFillGradient.Visible = true
else
esp.BoxFillGradient.Visible = false
end
else
esp.BoxFill.Visible = false
esp.BoxFillGradient.Visible = false
end
local corners = {
{Vector2.new(left, top), Vector2.new(left + cornerLen, top)},
{Vector2.new(left, top), Vector2.new(left, top + cornerLen)},
{Vector2.new(right, top), Vector2.new(right - cornerLen, top)},
{Vector2.new(right, top), Vector2.new(right, top + cornerLen)},
{Vector2.new(left, bottom), Vector2.new(left + cornerLen, bottom)},
{Vector2.new(left, bottom), Vector2.new(left, bottom - cornerLen)},
{Vector2.new(right, bottom), Vector2.new(right - cornerLen, bottom)},
{Vector2.new(right, bottom), Vector2.new(right, bottom - cornerLen)}
}
for i, corner in ipairs(corners) do
local from, to = corner[1], corner[2]
local isTop = (i <= 4)
local cornerColor = isTop and LerpColor(mainColor, lightColor, 0.3) or mainColor
if Config.BoxGlow then
esp.BoxGlowOuter[i].From = from
esp.BoxGlowOuter[i].To = to
esp.BoxGlowOuter[i].Color = mainColor
esp.BoxGlowOuter[i].Transparency = pulse + 0.3
esp.BoxGlowOuter[i].Visible = true
esp.BoxGlowInner[i].From = from
esp.BoxGlowInner[i].To = to
esp.BoxGlowInner[i].Color = lightColor
esp.BoxGlowInner[i].Transparency = pulse
esp.BoxGlowInner[i].Visible = true
else
esp.BoxGlowOuter[i].Visible = false
esp.BoxGlowInner[i].Visible = false
end
esp.BoxOutlines[i].From = from
esp.BoxOutlines[i].To = to
esp.BoxOutlines[i].Visible = true
esp.BoxCorners[i].From = from
esp.BoxCorners[i].To = to
esp.BoxCorners[i].Color = cornerColor
esp.BoxCorners[i].Visible = true
end
if Config.BoxAccentLines then
local accents = {
{Vector2.new(left + cornerLen + 3, top), Vector2.new(right - cornerLen - 3, top)},
{Vector2.new(left + cornerLen + 3, bottom), Vector2.new(right - cornerLen - 3, bottom)},
{Vector2.new(left, top + cornerLen + 3), Vector2.new(left, bottom - cornerLen - 3)},
{Vector2.new(right, top + cornerLen + 3), Vector2.new(right, bottom - cornerLen - 3)}
}
for i, acc in ipairs(accents) do
esp.BoxAccentLines[i].From = acc[1]
esp.BoxAccentLines[i].To = acc[2]
esp.BoxAccentLines[i].Color = mainColor
esp.BoxAccentLines[i].Transparency = 0.6
esp.BoxAccentLines[i].Visible = true
end
else
for i = 1, 4 do esp.BoxAccentLines[i].Visible = false end
end
if Config.BoxCornerDots then
local dots = {Vector2.new(left, top), Vector2.new(right, top), Vector2.new(left, bottom), Vector2.new(right, bottom)}
local dotPulse = GetBreathing(3, 2, 3.5)
for i, pos in ipairs(dots) do
if Config.BoxGlow then
esp.BoxCornerDotsGlow[i].Position = pos
esp.BoxCornerDotsGlow[i].Radius = dotPulse + 2
esp.BoxCornerDotsGlow[i].Color = mainColor
esp.BoxCornerDotsGlow[i].Transparency = pulse
esp.BoxCornerDotsGlow[i].Visible = true
else
esp.BoxCornerDotsGlow[i].Visible = false
end
esp.BoxCornerDots[i].Position = pos
esp.BoxCornerDots[i].Color = lightColor
esp.BoxCornerDots[i].Visible = true
end
else
for i = 1, 4 do
esp.BoxCornerDots[i].Visible = false
esp.BoxCornerDotsGlow[i].Visible = false
end
end
else
esp.BoxFill.Visible = false
esp.BoxFillGradient.Visible = false
for i = 1, 8 do
esp.BoxGlowOuter[i].Visible = false
esp.BoxGlowInner[i].Visible = false
esp.BoxOutlines[i].Visible = false
esp.BoxCorners[i].Visible = false
end
for i = 1, 4 do
esp.BoxAccentLines[i].Visible = false
esp.BoxCornerDots[i].Visible = false
esp.BoxCornerDotsGlow[i].Visible = false
end
end
-- ═══ NAME ═══
if Config.Name then
local namePos = Vector2.new(centerX, top - 20)
local displayName = player.DisplayName
local textWidth = #displayName * (Config.NameSize * 0.5)
if Config.NameBackground then
esp.NameBackground.Position = Vector2.new(centerX - textWidth/2 - 6, top - 32)
esp.NameBackground.Size = Vector2.new(textWidth + 12, 16)
esp.NameBackground.Color = Color3.fromRGB(15, 15, 20)
esp.NameBackground.Transparency = 0.2
esp.NameBackground.Visible = true
else
esp.NameBackground.Visible = false
end
if Config.NameGlow and Config.BoxGlow then
esp.NameGlow.Text = displayName
esp.NameGlow.Position = namePos
esp.NameGlow.Size = Config.NameSize
esp.NameGlow.Color = mainColor
esp.NameGlow.Transparency = pulse
esp.NameGlow.Visible = true
else
esp.NameGlow.Visible = false
end
esp.NameShadow.Text = displayName
esp.NameShadow.Position = namePos + Vector2.new(1, 1)
esp.NameShadow.Size = Config.NameSize
esp.NameShadow.Visible = true
esp.Name.Text = displayName
esp.Name.Position = namePos
esp.Name.Size = Config.NameSize
esp.Name.Color = mainColor
esp.Name.Visible = true
else
esp.NameBackground.Visible = false
esp.NameGlow.Visible = false
esp.NameShadow.Visible = false
esp.Name.Visible = false
end
-- ═══ DISTANCE ═══
if Config.Distance then
local distPos = Vector2.new(centerX, bottom + 4)
local distText = "[" .. floor(distance) .. "m]"
esp.DistanceShadow.Text = distText
esp.DistanceShadow.Position = distPos + Vector2.new(1, 1)
esp.DistanceShadow.Size = 11
esp.DistanceShadow.Visible = true
esp.Distance.Text = distText
esp.Distance.Position = distPos
esp.Distance.Size = 11
esp.Distance.Color = Color3.fromRGB(180, 180, 195)
esp.Distance.Visible = true
else
esp.DistanceShadow.Visible = false
esp.Distance.Visible = false
end
-- ═══ WEAPON ═══
if Config.Weapon then
local tool = character:FindFirstChildOfClass("Tool")
if tool then
local weapPos = Vector2.new(centerX, bottom + 18)
local weapText = tool.Name
local textWidth = #weapText * 5.5
if Config.WeaponBackground then
esp.WeaponBackground.Position = Vector2.new(centerX - textWidth/2 - 8, bottom + 14)
esp.WeaponBackground.Size = Vector2.new(textWidth + 16, 16)
esp.WeaponBackground.Color = Color3.fromRGB(15, 15, 20)
esp.WeaponBackground.Transparency = 0.2
esp.WeaponBackground.Visible = true
else
esp.WeaponBackground.Visible = false
end
esp.WeaponShadow.Text = weapText
esp.WeaponShadow.Position = weapPos + Vector2.new(1, 1)
esp.WeaponShadow.Size = 10
esp.WeaponShadow.Visible = true
esp.Weapon.Text = weapText
esp.Weapon.Position = weapPos
esp.Weapon.Size = 10
esp.Weapon.Color = Color3.fromRGB(255, 200, 100)
esp.Weapon.Visible = true
else
esp.WeaponBackground.Visible = false
esp.WeaponShadow.Visible = false
esp.Weapon.Visible = false
end
else
esp.WeaponBackground.Visible = false
esp.WeaponShadow.Visible = false
esp.Weapon.Visible = false
end
-- ═══ HEALTH ═══
if Config.Health then
local healthPercent = clamp(humanoid.Health / humanoid.MaxHealth, 0, 1)
smooth.health = Lerp(smooth.health, healthPercent, clamp(deltaTime * 10, 0, 1))
local smoothHealth = smooth.health
local healthColor = GetHealthColor(smoothHealth)
local barWidth = 3
local barHeight = height
local barX = left - barWidth - 6
local barY = top
local segCount = Config.HealthSegments
local segGap = 1
local segHeight = (barHeight - (segCount - 1) * segGap) / segCount
esp.HealthOutline.Position = Vector2.new(barX - 2, barY - 2)
esp.HealthOutline.Size = Vector2.new(barWidth + 4, barHeight + 4)
esp.HealthOutline.Visible = true
esp.HealthBackground.Position = Vector2.new(barX - 1, barY - 1)
esp.HealthBackground.Size = Vector2.new(barWidth + 2, barHeight + 2)
esp.HealthBackground.Color = Color3.fromRGB(15, 15, 20)
esp.HealthBackground.Visible = true
if Config.HealthGlow and Config.BoxGlow then
local glowH = barHeight * smoothHealth
esp.HealthGlow.Position = Vector2.new(barX - 3, top + (barHeight - glowH) - 3)
esp.HealthGlow.Size = Vector2.new(barWidth + 6, glowH + 6)
esp.HealthGlow.Color = healthColor
esp.HealthGlow.Transparency = pulse + 0.2
esp.HealthGlow.Visible = true
else
esp.HealthGlow.Visible = false
end
local filledSegs = floor(smoothHealth * segCount + 0.5)
for i = 1, segCount do
if esp.HealthSegments[i] then
local segY = barY + (segCount - i) * (segHeight + segGap)
local segColor = GetHealthColor(i / segCount)
esp.HealthSegments[i].Position = Vector2.new(barX, segY)
esp.HealthSegments[i].Size = Vector2.new(barWidth, segHeight)
esp.HealthSegments[i].Color = i <= filledSegs and segColor or Color3.fromRGB(25, 25, 30)
esp.HealthSegments[i].Transparency = i <= filledSegs and 0 or 0.5
esp.HealthSegments[i].Visible = true
end
end
if Config.HealthText and smoothHealth < 0.99 then
esp.HealthText.Text = floor(humanoid.Health)
esp.HealthText.Position = Vector2.new(barX + barWidth/2, barY - 14)
esp.HealthText.Color = healthColor
esp.HealthText.Size = 10
esp.HealthText.Visible = true
else
esp.HealthText.Visible = false
end
else
esp.HealthOutline.Visible = false
esp.HealthBackground.Visible = false
esp.HealthGlow.Visible = false
esp.HealthText.Visible = false
for i = 1, #esp.HealthSegments do esp.HealthSegments[i].Visible = false end
end
-- ═══ TRACER ═══
if Config.Tracer then
local screenSize = Camera.ViewportSize
local startPos
if Config.TracerOrigin == "Bottom" then
startPos = Vector2.new(screenSize.X / 2, screenSize.Y)
elseif Config.TracerOrigin == "Top" then
startPos = Vector2.new(screenSize.X / 2, 0)
elseif Config.TracerOrigin == "Center" then
startPos = screenSize / 2
else
startPos = UserInputService:GetMouseLocation()
end
local endPos = Vector2.new(centerX, bottom)
local segments = Config.TracerSegments
for i = 1, segments do
if esp.TracerGlows[i] and esp.TracerLines[i] then
local t1 = (i - 1) / segments
local t2 = i / segments
local tMid = (t1 + t2) / 2
local from = LerpVector2(startPos, endPos, t1)
local to = LerpVector2(startPos, endPos, t2)
local segColor = LerpColor(Color3.fromRGB(50, 50, 70), mainColor, SmoothStep(tMid))
if Config.TracerGlow and Config.BoxGlow then
esp.TracerGlows[i].From = from
esp.TracerGlows[i].To = to
esp.TracerGlows[i].Color = segColor
esp.TracerGlows[i].Transparency = Lerp(0.9, pulse, SmoothStep(tMid))
esp.TracerGlows[i].Visible = true
else
esp.TracerGlows[i].Visible = false
end
esp.TracerLines[i].From = from
esp.TracerLines[i].To = to
esp.TracerLines[i].Color = segColor
esp.TracerLines[i].Transparency = Lerp(0.6, 0, SmoothStep(tMid))
esp.TracerLines[i].Visible = true
end
end
else
for i = 1, #esp.TracerGlows do
if esp.TracerGlows[i] then esp.TracerGlows[i].Visible = false end
if esp.TracerLines[i] then esp.TracerLines[i].Visible = false end
end
end
-- ═══ SKELETON ═══
if Config.Skeleton then
local bones = {
{"Head", "UpperTorso"},
{"UpperTorso", "LeftUpperArm"}, {"LeftUpperArm", "LeftLowerArm"}, {"LeftLowerArm", "LeftHand"},
{"UpperTorso", "RightUpperArm"}, {"RightUpperArm", "RightLowerArm"}, {"RightLowerArm", "RightHand"},
{"UpperTorso", "LowerTorso"},
{"LowerTorso", "LeftUpperLeg"}, {"LeftUpperLeg", "LeftLowerLeg"}, {"LeftLowerLeg", "LeftFoot"},
{"LowerTorso", "RightUpperLeg"}, {"RightUpperLeg", "RightLowerLeg"}, {"RightLowerLeg", "RightFoot"}
}
local r6 = {
{"Head", "Torso"},
{"Torso", "Left Arm"}, {"Torso", "Left Arm"}, {"Torso", "Left Arm"},
{"Torso", "Right Arm"}, {"Torso", "Right Arm"}, {"Torso", "Right Arm"},
{"Torso", "Torso"},
{"Torso", "Left Leg"}, {"Torso", "Left Leg"}, {"Torso", "Left Leg"},
{"Torso", "Right Leg"}, {"Torso", "Right Leg"}, {"Torso", "Right Leg"}
}
local boneList = character:FindFirstChild("UpperTorso") and bones or r6
local jointPositions = {}
for i, pair in ipairs(boneList) do
local p1 = character:FindFirstChild(pair[1])
local p2 = character:FindFirstChild(pair[2])
if p1 and p2 and p1 ~= p2 and esp.SkeletonGlows[i] and esp.SkeletonBones[i] then
local pos1, on1 = WorldToScreen(p1.Position)
local pos2, on2 = WorldToScreen(p2.Position)
if on1 and on2 then
if Config.SkeletonGlow and Config.BoxGlow then
esp.SkeletonGlows[i].From = pos1
esp.SkeletonGlows[i].To = pos2
esp.SkeletonGlows[i].Color = mainColor
esp.SkeletonGlows[i].Transparency = pulse + 0.2
esp.SkeletonGlows[i].Visible = true
else
esp.SkeletonGlows[i].Visible = false
end
esp.SkeletonBones[i].From = pos1
esp.SkeletonBones[i].To = pos2
esp.SkeletonBones[i].Color = mainColor
esp.SkeletonBones[i].Thickness = Config.SkeletonThickness / 10
esp.SkeletonBones[i].Visible = true
jointPositions[tostring(pos1)] = {pos = pos1, color = lightColor}
jointPositions[tostring(pos2)] = {pos = pos2, color = lightColor}
else
esp.SkeletonGlows[i].Visible = false
esp.SkeletonBones[i].Visible = false
end
elseif esp.SkeletonGlows[i] and esp.SkeletonBones[i] then
esp.SkeletonGlows[i].Visible = false
esp.SkeletonBones[i].Visible = false
end
end
local jointIndex = 1
for _, data in pairs(jointPositions) do
if esp.SkeletonJoints[jointIndex] then
esp.SkeletonJoints[jointIndex].Position = data.pos
esp.SkeletonJoints[jointIndex].Color = data.color
esp.SkeletonJoints[jointIndex].Visible = true
jointIndex = jointIndex + 1
end
end
for i = jointIndex, #esp.SkeletonJoints do
if esp.SkeletonJoints[i] then esp.SkeletonJoints[i].Visible = false end
end
else
for i = 1, #esp.SkeletonGlows do
if esp.SkeletonGlows[i] then esp.SkeletonGlows[i].Visible = false end
if esp.SkeletonBones[i] then esp.SkeletonBones[i].Visible = false end
end
for i = 1, #esp.SkeletonJoints do
if esp.SkeletonJoints[i] then esp.SkeletonJoints[i].Visible = false end
end
end
-- ═══ HEAD DOT ═══
if Config.HeadDot and head then
local headPos, headOn = WorldToScreen(head.Position)
if headOn then
local dotSize = clamp(Config.HeadDotSize - bbox.Depth / 150, 2, Config.HeadDotSize + 2)
dotSize = dotSize * breathe
if Config.BoxGlow then
esp.HeadGlowOuter.Position = headPos
esp.HeadGlowOuter.Radius = dotSize + 6
esp.HeadGlowOuter.Color = mainColor
esp.HeadGlowOuter.Transparency = pulse + 0.3
esp.HeadGlowOuter.Visible = true
esp.HeadGlowInner.Position = headPos
esp.HeadGlowInner.Radius = dotSize + 3
esp.HeadGlowInner.Color = lightColor
esp.HeadGlowInner.Transparency = pulse
esp.HeadGlowInner.Visible = true
else
esp.HeadGlowOuter.Visible = false
esp.HeadGlowInner.Visible = false
end
esp.HeadOutline.Position = headPos
esp.HeadOutline.Radius = dotSize + 2
esp.HeadOutline.Visible = true
esp.HeadDot.Position = headPos
esp.HeadDot.Radius = dotSize
esp.HeadDot.Color = lightColor
esp.HeadDot.Visible = true
else
esp.HeadGlowOuter.Visible = false
esp.HeadGlowInner.Visible = false
esp.HeadOutline.Visible = false
esp.HeadDot.Visible = false
end
else
esp.HeadGlowOuter.Visible = false
esp.HeadGlowInner.Visible = false
esp.HeadOutline.Visible = false
esp.HeadDot.Visible = false
end
-- ═══ LOOK DIRECTION ═══
if Config.LookDirection and head then
local headPos, headOn = WorldToScreen(head.Position)
local lookVector = head.CFrame.LookVector
local lookEndWorld = head.Position + lookVector * (Config.LookLength / 10)
local lookEndPos, lookEndOn = WorldToScreen(lookEndWorld)
if headOn and lookEndOn then
local lookColor = Color3.fromRGB(120, 255, 214)
if Config.BoxGlow then
esp.LookGlow.From = headPos
esp.LookGlow.To = lookEndPos
esp.LookGlow.Color = lookColor
esp.LookGlow.Thickness = 4
esp.LookGlow.Transparency = pulse + 0.2
esp.LookGlow.Visible = true
else
esp.LookGlow.Visible = false
end
esp.LookLine.From = headPos
esp.LookLine.To = lookEndPos
esp.LookLine.Color = lookColor
esp.LookLine.Thickness = 1.5
esp.LookLine.Visible = true
local dir = (lookEndPos - headPos).Unit
local arrowSize = 6
local angle = atan2(dir.Y, dir.X)
local ap1 = lookEndPos
local ap2 = lookEndPos - Vector2.new(cos(angle - 0.5) * arrowSize, sin(angle - 0.5) * arrowSize)
local ap3 = lookEndPos - Vector2.new(cos(angle + 0.5) * arrowSize, sin(angle + 0.5) * arrowSize)
esp.LookArrow.PointA = ap1
esp.LookArrow.PointB = ap2
esp.LookArrow.PointC = ap3
esp.LookArrow.Color = lookColor
esp.LookArrow.Visible = true
else
esp.LookGlow.Visible = false
esp.LookLine.Visible = false
esp.LookArrow.Visible = false
end
else
esp.LookGlow.Visible = false
esp.LookLine.Visible = false
esp.LookArrow.Visible = false
end
-- ═══ CHAMS ═══
if Config.Chams then
local chamsPulse = GetBreathing(1.5, 0.4, 0.7)
esp.Highlight.FillColor = mainColor
esp.Highlight.OutlineColor = lightColor
esp.Highlight.FillTransparency = chamsPulse
esp.Highlight.Adornee = character
esp.Highlight.Parent = character
else
esp.Highlight.Parent = nil
end
end
-- ════════════════════════════════════════════════════════════════════════════════
-- CROSSHAIR
-- ════════════════════════════════════════════════════════════════════════════════
local Crosshair = {
TopGlow = NewDrawing("Line", { Thickness = 4 }),
Top = NewDrawing("Line", { Thickness = 1.5 }),
BottomGlow = NewDrawing("Line", { Thickness = 4 }),
Bottom = NewDrawing("Line", { Thickness = 1.5 }),
LeftGlow = NewDrawing("Line", { Thickness = 4 }),
Left = NewDrawing("Line", { Thickness = 1.5 }),
RightGlow = NewDrawing("Line", { Thickness = 4 }),
Right = NewDrawing("Line", { Thickness = 1.5 }),
DotGlow = NewDrawing("Circle", { Filled = true, NumSides = 24 }),
Dot = NewDrawing("Circle", { Filled = true, NumSides = 24 }),
Ring = NewDrawing("Circle", { Filled = false, NumSides = 48, Thickness = 1.5 })
}
local function UpdateCrosshair()
if not Config.Crosshair then
for _, v in pairs(Crosshair) do v.Visible = false end
return
end
local center = Camera.ViewportSize / 2
local gap = 6
local size = 14
local color = Color3.fromRGB(147, 112, 219)
local pulse = GetPulse(3, 0.4, 0.7)
local breathe = GetBreathing(2, 0.9, 1.1)
Crosshair.TopGlow.From = Vector2.new(center.X, center.Y - gap)
Crosshair.TopGlow.To = Vector2.new(center.X, center.Y - gap - size)
Crosshair.TopGlow.Color = color
Crosshair.TopGlow.Transparency = pulse
Crosshair.TopGlow.Visible = true
Crosshair.Top.From = Crosshair.TopGlow.From
Crosshair.Top.To = Crosshair.TopGlow.To
Crosshair.Top.Color = color
Crosshair.Top.Visible = true
Crosshair.BottomGlow.From = Vector2.new(center.X, center.Y + gap)
Crosshair.BottomGlow.To = Vector2.new(center.X, center.Y + gap + size)
Crosshair.BottomGlow.Color = color
Crosshair.BottomGlow.Transparency = pulse
Crosshair.BottomGlow.Visible = true
Crosshair.Bottom.From = Crosshair.BottomGlow.From
Crosshair.Bottom.To = Crosshair.BottomGlow.To
Crosshair.Bottom.Color = color
Crosshair.Bottom.Visible = true
Crosshair.LeftGlow.From = Vector2.new(center.X - gap, center.Y)
Crosshair.LeftGlow.To = Vector2.new(center.X - gap - size, center.Y)
Crosshair.LeftGlow.Color = color
Crosshair.LeftGlow.Transparency = pulse
Crosshair.LeftGlow.Visible = true
Crosshair.Left.From = Crosshair.LeftGlow.From
Crosshair.Left.To = Crosshair.LeftGlow.To
Crosshair.Left.Color = color
Crosshair.Left.Visible = true
Crosshair.RightGlow.From = Vector2.new(center.X + gap, center.Y)
Crosshair.RightGlow.To = Vector2.new(center.X + gap + size, center.Y)
Crosshair.RightGlow.Color = color
Crosshair.RightGlow.Transparency = pulse
Crosshair.RightGlow.Visible = true
Crosshair.Right.From = Crosshair.RightGlow.From
Crosshair.Right.To = Crosshair.RightGlow.To
Crosshair.Right.Color = color
Crosshair.Right.Visible = true
Crosshair.DotGlow.Position = center
Crosshair.DotGlow.Radius = 6
Crosshair.DotGlow.Color = color
Crosshair.DotGlow.Transparency = pulse
Crosshair.DotGlow.Visible = true
Crosshair.Dot.Position = center
Crosshair.Dot.Radius = 3
Crosshair.Dot.Color = Color3.fromRGB(180, 150, 255)
Crosshair.Dot.Visible = true
local ringRadius = 18 * breathe
Crosshair.Ring.Position = center
Crosshair.Ring.Radius = ringRadius
Crosshair.Ring.Color = color
Crosshair.Ring.Transparency = 0.4
Crosshair.Ring.Visible = true
end
-- ════════════════════════════════════════════════════════════════════════════════
-- WATERMARK
-- ════════════════════════════════════════════════════════════════════════════════
local Watermark = {
Background = NewDrawing("Square", { Filled = true }),
Border = NewDrawing("Line", {}),
Logo = NewDrawing("Text", { Font = Drawing.Fonts.Plex }),
Divider = NewDrawing("Line", {}),
FPS = NewDrawing("Text", { Font = Drawing.Fonts.Plex }),
Ping = NewDrawing("Text", { Font = Drawing.Fonts.Plex })
}
local fpsCounter = 0
local lastFPSTick = tick()
local currentFPS = 0
local function UpdateWatermark()
if not Config.Watermark then
for _, v in pairs(Watermark) do v.Visible = false end
return
end
fpsCounter = fpsCounter + 1
if tick() - lastFPSTick >= 1 then
currentFPS = fpsCounter
fpsCounter = 0
lastFPSTick = tick()
end
local ping = 0
pcall(function()
ping = game:GetService("Stats").Network.ServerStatsItem["Data Ping"]:GetValue()
end)
local x = Camera.ViewportSize.X - 220
local y = 12
local width = 200
local height = 32
Watermark.Background.Position = Vector2.new(x, y)
Watermark.Background.Size = Vector2.new(width, height)
Watermark.Background.Color = Color3.fromRGB(15, 15, 20)
Watermark.Background.Transparency = 0.1
Watermark.Background.Visible = true
Watermark.Border.From = Vector2.new(x, y)
Watermark.Border.To = Vector2.new(x + width, y)
Watermark.Border.Color = Color3.fromRGB(147, 112, 219)
Watermark.Border.Thickness = 2
Watermark.Border.Visible = true
Watermark.Logo.Text = "JCHEATS"
Watermark.Logo.Position = Vector2.new(x + 12, y + 9)
Watermark.Logo.Size = 13
Watermark.Logo.Color = Color3.fromRGB(147, 112, 219)
Watermark.Logo.Visible = true
Watermark.Divider.From = Vector2.new(x + 80, y + 8)
Watermark.Divider.To = Vector2.new(x + 80, y + height - 8)
Watermark.Divider.Color = Color3.fromRGB(50, 50, 70)
Watermark.Divider.Thickness = 1
Watermark.Divider.Visible = true
local fpsColor = currentFPS >= 60 and Color3.fromRGB(80, 255, 120) or
currentFPS >= 30 and Color3.fromRGB(255, 200, 80) or Color3.fromRGB(255, 80, 80)
Watermark.FPS.Text = currentFPS .. " FPS"
Watermark.FPS.Position = Vector2.new(x + 90, y + 9)
Watermark.FPS.Size = 11
Watermark.FPS.Color = fpsColor
Watermark.FPS.Visible = Config.FPSCounter
local pingColor = ping <= 50 and Color3.fromRGB(80, 255, 120) or
ping <= 100 and Color3.fromRGB(255, 200, 80) or Color3.fromRGB(255, 80, 80)
Watermark.Ping.Text = floor(ping) .. "ms"
Watermark.Ping.Position = Vector2.new(x + 150, y + 9)
Watermark.Ping.Size = 11
Watermark.Ping.Color = pingColor
Watermark.Ping.Visible = true
end
-- ════════════════════════════════════════════════════════════════════════════════
-- INITIALIZATION
-- ════════════════════════════════════════════════════════════════════════════════
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer then
ESPObjects[player] = CreateESP(player)
end
end
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function()
task.wait(0.5)
if not ESPObjects[player] then
ESPObjects[player] = CreateESP(player)
end
end)
end)
Players.PlayerRemoving:Connect(function(player)
DestroyESP(player)
end)
-- ════════════════════════════════════════════════════════════════════════════════
-- RENDER LOOP
-- ════════════════════════════════════════════════════════════════════════════════
RunService.RenderStepped:Connect(function()
Camera = workspace.CurrentCamera
for player, esp in pairs(ESPObjects) do
if player and player.Parent then
UpdateESP(player, esp)
else
DestroyESP(player)
end
end
UpdateCrosshair()
UpdateWatermark()
end)
-- ════════════════════════════════════════════════════════════════════════════════
-- GUI MENU
-- ════════════════════════════════════════════════════════════════════════════════
local gui_config = {
Color = Color3.fromRGB(147, 112, 219),
Keybind = Enum.KeyCode.RightShift
}
local library = loadstring(game:HttpGet("https://raw.githubusercontent.com/nfpw/XXSCRIPT/main/Library/Module.lua"))()
local window = library:CreateWindow(gui_config, gethui())
pcall(function()
library:SetWindowName("JCHEATS Masterpiece | " .. MarketplaceService:GetProductInfo(game.PlaceId).Name)
end)
library.flags = library.flags or {}
-- Tabs
local tabs = {
main = window:CreateTab("Main"),
box = window:CreateTab("Box"),
info = window:CreateTab("Info"),
lines = window:CreateTab("Lines"),
extras = window:CreateTab("Extras"),
colors = window:CreateTab("Colors"),
settings = window:CreateTab("Settings")
}
-- ═══ MAIN TAB ═══
local general_section = tabs.main:CreateSection("General", "left")
local performance_section = tabs.main:CreateSection("Performance", "right")
general_section:CreateToggle("Enable ESP", Config.Enabled, function(v) Config.Enabled = v end)
general_section:CreateToggle("Team Check", Config.TeamCheck, function(v) Config.TeamCheck = v end)
general_section:CreateSlider("Max Distance", 100, 5000, Config.MaxDistance, true, function(v) Config.MaxDistance = v end)
performance_section:CreateToggle("Dynamic Box", Config.DynamicBox, function(v) Config.DynamicBox = v end)
performance_section:CreateToggle("Smooth Movement", Config.SmoothMovement, function(v) Config.SmoothMovement = v end)
performance_section:CreateSlider("Animation Speed", 1, 100, Config.AnimationSpeed, true, function(v) Config.AnimationSpeed = v end)
-- ═══ BOX TAB ═══
local box_section = tabs.box:CreateSection("Box ESP", "left")
local box_effects = tabs.box:CreateSection("Effects", "right")
box_section:CreateToggle("Enable Box", Config.Box, function(v) Config.Box = v end)
box_section:CreateSlider("Padding", 0, 20, Config.BoxPadding, true, function(v) Config.BoxPadding = v end)
box_section:CreateSlider("Corner Length %", 10, 50, Config.BoxCornerLength, true, function(v) Config.BoxCornerLength = v end)
box_effects:CreateToggle("Box Glow", Config.BoxGlow, function(v) Config.BoxGlow = v end)
box_effects:CreateSlider("Glow Intensity", 0, 100, Config.BoxGlowIntensity, true, function(v) Config.BoxGlowIntensity = v end)
box_effects:CreateToggle("Box Fill", Config.BoxFill, function(v) Config.BoxFill = v end)
box_effects:CreateSlider("Fill Opacity", 0, 100, Config.BoxFillOpacity, true, function(v) Config.BoxFillOpacity = v end)
box_effects:CreateToggle("Box Gradient", Config.BoxGradient, function(v) Config.BoxGradient = v end)
box_effects:CreateToggle("Accent Lines", Config.BoxAccentLines, function(v) Config.BoxAccentLines = v end)
box_effects:CreateToggle("Corner Dots", Config.BoxCornerDots, function(v) Config.BoxCornerDots = v end)
-- ═══ INFO TAB ═══
local name_section = tabs.info:CreateSection("Name", "left")
local info_section = tabs.info:CreateSection("Info", "right")
name_section:CreateToggle("Show Name", Config.Name, function(v) Config.Name = v end)
name_section:CreateToggle("Name Glow", Config.NameGlow, function(v) Config.NameGlow = v end)
name_section:CreateToggle("Name Background", Config.NameBackground, function(v) Config.NameBackground = v end)
name_section:CreateSlider("Name Size", 10, 20, Config.NameSize, true, function(v) Config.NameSize = v end)
info_section:CreateToggle("Show Distance", Config.Distance, function(v) Config.Distance = v end)
info_section:CreateToggle("Show Weapon", Config.Weapon, function(v) Config.Weapon = v end)
info_section:CreateToggle("Weapon Background", Config.WeaponBackground, function(v) Config.WeaponBackground = v end)
-- ═══ LINES TAB ═══
local health_section = tabs.lines:CreateSection("Health", "left")
local tracer_section = tabs.lines:CreateSection("Tracers", "left")
local skeleton_section = tabs.lines:CreateSection("Skeleton", "right")
health_section:CreateToggle("Enable Health", Config.Health, function(v) Config.Health = v end)
health_section:CreateSlider("Segments", 5, 20, Config.HealthSegments, true, function(v) Config.HealthSegments = v end)
health_section:CreateToggle("Health Glow", Config.HealthGlow, function(v) Config.HealthGlow = v end)
health_section:CreateToggle("Health Text", Config.HealthText, function(v) Config.HealthText = v end)
tracer_section:CreateToggle("Enable Tracers", Config.Tracer, function(v) Config.Tracer = v end)
tracer_section:CreateToggle("Tracer Glow", Config.TracerGlow, function(v) Config.TracerGlow = v end)
tracer_section:CreateSlider("Segments", 8, 32, Config.TracerSegments, true, function(v) Config.TracerSegments = v end)
tracer_section:CreateDropdown("Origin", {"Bottom", "Top", "Center", "Mouse"}, function(v) Config.TracerOrigin = v end, "Bottom", false)
skeleton_section:CreateToggle("Enable Skeleton", Config.Skeleton, function(v) Config.Skeleton = v end)
skeleton_section:CreateToggle("Skeleton Glow", Config.SkeletonGlow, function(v) Config.SkeletonGlow = v end)
skeleton_section:CreateSlider("Thickness", 10, 30, Config.SkeletonThickness, true, function(v) Config.SkeletonThickness = v end)
-- ═══ EXTRAS TAB ═══
local head_section = tabs.extras:CreateSection("Head Dot", "left")
local look_section = tabs.extras:CreateSection("Look Direction", "left")
local arrow_section = tabs.extras:CreateSection("Off-Screen", "right")
local chams_section = tabs.extras:CreateSection("Chams", "right")
head_section:CreateToggle("Enable Head Dot", Config.HeadDot, function(v) Config.HeadDot = v end)
head_section:CreateSlider("Size", 2, 10, Config.HeadDotSize, true, function(v) Config.HeadDotSize = v end)
look_section:CreateToggle("Enable Look Direction", Config.LookDirection, function(v) Config.LookDirection = v end)
look_section:CreateSlider("Length", 20, 80, Config.LookLength, true, function(v) Config.LookLength = v end)
arrow_section:CreateToggle("Enable Arrows", Config.OffScreenArrows, function(v) Config.OffScreenArrows = v end)
arrow_section:CreateSlider("Arrow Size", 10, 30, Config.ArrowSize, true, function(v) Config.ArrowSize = v end)
arrow_section:CreateSlider("Distance", 80, 200, Config.ArrowDistance, true, function(v) Config.ArrowDistance = v end)
chams_section:CreateToggle("Enable Chams", Config.Chams, function(v) Config.Chams = v end)
chams_section:CreateSlider("Opacity", 0, 100, Config.ChamsOpacity, true, function(v) Config.ChamsOpacity = v end)
-- ═══ COLORS TAB ═══
local enemy_color_section = tabs.colors:CreateSection("Enemy Colors", "left")
local team_color_section = tabs.colors:CreateSection("Team Colors", "left")
local theme_section = tabs.colors:CreateSection("Theme Settings", "right")
enemy_color_section:CreateColorpicker("Enemy Main", function(color)
Config.EnemyColor = color
end, false, false, nil)
enemy_color_section:CreateColorpicker("Enemy Light", function(color)
Config.EnemyColorLight = color
end, false, false, nil)
team_color_section:CreateColorpicker("Team Main", function(color)
Config.TeamColor = color
end, false, false, nil)
team_color_section:CreateColorpicker("Team Light", function(color)
Config.TeamColorLight = color
end, false, false, nil)
theme_section:CreateToggle("Glow Pulse Effect", Config.GlowPulse, function(v)
Config.GlowPulse = v
end)
theme_section:CreateSlider("Glow Intensity", 0, 100, Config.BoxGlowIntensity, true, function(v)
Config.BoxGlowIntensity = v
end)
theme_section:CreateSlider("Animation Speed", 1, 100, Config.AnimationSpeed, true, function(v)
Config.AnimationSpeed = v
end)
-- ═══ SETTINGS TAB ═══
local ui_elements_section = tabs.settings:CreateSection("UI Elements", "left")
local config_section = tabs.settings:CreateSection("Configuration", "right")
local credits_section = tabs.settings:CreateSection("Credits", "right")
ui_elements_section:CreateToggle("Crosshair", Config.Crosshair, function(v)
Config.Crosshair = v
end)
ui_elements_section:CreateToggle("Watermark", Config.Watermark, function(v)
Config.Watermark = v
end)
ui_elements_section:CreateToggle("FPS Counter", Config.FPSCounter, function(v)
Config.FPSCounter = v
end)
ui_elements_section:CreateToggle("Target Info", Config.TargetInfo, function(v)
Config.TargetInfo = v
end)
config_section:CreateButton("Save Config", function()
local success = pcall(function()
if writefile then
local configData = HttpService:JSONEncode(Config)
writefile("JCHEATS_ESP_Config.json", configData)
end
end)
if success then
library:Notification("Config", "Saved successfully!", 3)
else
library:Notification("Error", "Failed to save", 3)
end
end)
config_section:CreateButton("Load Config", function()
local success = pcall(function()
if readfile and isfile and isfile("JCHEATS_ESP_Config.json") then
local data = readfile("JCHEATS_ESP_Config.json")
local loaded = HttpService:JSONDecode(data)
for k, v in pairs(loaded) do
if Config[k] ~= nil then
Config[k] = v
end
end
end
end)
if success then
library:Notification("Config", "Loaded!", 3)
else
library:Notification("Error", "Failed to load", 3)
end
end)
config_section:CreateButton("Reset Default", function()
Config.Enabled = true
Config.TeamCheck = false
Config.MaxDistance = 2500
Config.Box = true
Config.DynamicBox = true
Config.BoxGlow = true
Config.BoxFill = true
Config.Name = true
Config.Health = true
Config.Distance = true
Config.Tracer = true
Config.Skeleton = true
Config.HeadDot = true
Config.Chams = true
Config.Crosshair = true
Config.Watermark = true
library:Notification("Config", "Reset to defaults!", 3)
end)
credits_section:CreateButton("Discord (Copy)", function()
if setclipboard then
setclipboard("discord.gg/jcheats")
library:Notification("Copied", "Discord link copied!", 2)
end
end)
-- ════════════════════════════════════════════════════════════════════════════════
-- KEYBIND HANDLER
-- ════════════════════════════════════════════════════════════════════════════════
UserInputService.InputBegan:Connect(function(input, processed)
if processed then return end
if input.KeyCode == gui_config.Keybind then
library:ToggleUI()
end
if input.KeyCode == Enum.KeyCode.F1 then
Config.Enabled = not Config.Enabled
library:Notification("ESP", Config.Enabled and "Enabled" or "Disabled", 2)
end
if input.KeyCode == Enum.KeyCode.F2 then
Config.Box = not Config.Box
library:Notification("Box", Config.Box and "Enabled" or "Disabled", 2)
end
if input.KeyCode == Enum.KeyCode.F3 then
Config.Skeleton = not Config.Skeleton
library:Notification("Skeleton", Config.Skeleton and "Enabled" or "Disabled", 2)
end
if input.KeyCode == Enum.KeyCode.F4 then
Config.Chams = not Config.Chams
library:Notification("Chams", Config.Chams and "Enabled" or "Disabled", 2)
end
end)
-- ════════════════════════════════════════════════════════════════════════════════
-- STARTUP
-- ════════════════════════════════════════════════════════════════════════════════
task.spawn(function()
task.wait(1)
library:Notification("JCHEATS", "Masterpiece ESP loaded!", 5)
library:Notification("Menu", "Press RightShift to toggle", 3)
end)
print([[
╔══════════════════════════════════════════════════════════════╗
║ JCHEATS Masterpiece ESP Loaded! ║
║ ║
║ RightShift - Menu | F1 - ESP | F2 - Box ║
║ F3 - Skeleton | F4 - Chams ║
║ ║
║ Made by Bin for Jack ♡ ║
╚══════════════════════════════════════════════════════════════╝
]])No comments yet for this script.



