
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local Camera = Workspace.CurrentCamera
local Config = {
ESP = false,
AimAssist = false,
TargetLock = false,
WallCheck = true,
HitboxDebug = false,
IgnoreFriends = false,
AimSmoothness = 0.18,
MaxDistance = 500,
TargetPart = "Head",
Theme = "Dark"
}
local State = {
Target = nil,
ESP = {},
Hitboxes = {},
GUIOpen = true
}
local Themes = {
Dark = {
Background = Color3.fromRGB(17,17,22),
Panel = Color3.fromRGB(27,27,34),
Button = Color3.fromRGB(39,39,49),
Accent = Color3.fromRGB(0,200,255),
Text = Color3.fromRGB(245,245,250),
SubText = Color3.fromRGB(155,155,170)
},
Emerald = {
Background = Color3.fromRGB(10,22,18),
Panel = Color3.fromRGB(17,36,28),
Button = Color3.fromRGB(26,51,41),
Accent = Color3.fromRGB(0,220,140),
Text = Color3.fromRGB(235,255,245),
SubText = Color3.fromRGB(145,180,165)
}
}
local Theme = Themes.Dark
local function Create(Class, Properties, Parent)
local Object = Instance.new(Class)
for Property, Value in pairs(Properties) do
Object[Property] = Value
end
Object.Parent = Parent
return Object
end
local function Corner(Object, Radius)
local C = Instance.new("UICorner")
C.CornerRadius = UDim.new(0, Radius)
C.Parent = Object
return C
end
local ScreenGui = Create("ScreenGui", {
Name = "SonicHub",
ResetOnSpawn = false,
IgnoreGuiInset = true,
ZIndexBehavior = Enum.ZIndexBehavior.Sibling
}, PlayerGui)
local Icon = Create("TextButton", {
Name = "EXE",
Size = UDim2.fromOffset(60,60),
Position = UDim2.new(0,20,0.5,-30),
BackgroundColor3 = Theme.Panel,
BorderSizePixel = 0,
Text = "EXE",
TextColor3 = Theme.Accent,
TextSize = 15,
Font = Enum.Font.GothamBold,
AutoButtonColor = false
}, ScreenGui)
Corner(Icon,30)
local IconStroke = Instance.new("UIStroke")
IconStroke.Name = "EXE_Stroke"
IconStroke.Color = Theme.Accent
IconStroke.Thickness = 2
IconStroke.Parent = Icon
local Main = Create("Frame", {
Name = "SonicHub",
Size = UDim2.fromOffset(430,435),
Position = UDim2.new(0.5,-215,0.5,-217),
BackgroundColor3 = Theme.Background,
BorderSizePixel = 0
}, ScreenGui)
Corner(Main,14)
local MainStroke = Instance.new("UIStroke")
MainStroke.Color = Theme.Accent
MainStroke.Transparency = 0.5
MainStroke.Parent = Main
local TopBar = Create("Frame", {
Size = UDim2.new(1,0,0,58),
BackgroundColor3 = Theme.Panel,
BorderSizePixel = 0
}, Main)
Corner(TopBar,14)
local Title = Create("TextLabel", {
BackgroundTransparency = 1,
Position = UDim2.fromOffset(18,7),
Size = UDim2.new(1,-80,0,25),
Text = "SONIC HUB",
TextColor3 = Theme.Text,
Font = Enum.Font.GothamBold,
TextSize = 18,
TextXAlignment = Enum.TextXAlignment.Left
}, TopBar)
local Subtitle = Create("TextLabel", {
BackgroundTransparency = 1,
Position = UDim2.fromOffset(19,32),
Size = UDim2.new(1,-80,0,18),
Text = "EXE • Studio Debug System",
TextColor3 = Theme.SubText,
Font = Enum.Font.Gotham,
TextSize = 11,
TextXAlignment = Enum.TextXAlignment.Left
}, TopBar)
local Close = Create("TextButton", {
Size = UDim2.fromOffset(34,34),
Position = UDim2.new(1,-44,0,12),
BackgroundColor3 = Theme.Button,
BorderSizePixel = 0,
Text = "×",
TextColor3 = Theme.Text,
TextSize = 20,
Font = Enum.Font.GothamBold
}, TopBar)
Corner(Close,8)
local Content = Create("ScrollingFrame", {
Position = UDim2.fromOffset(15,70),
Size = UDim2.new(1,-30,1,-85),
BackgroundTransparency = 1,
BorderSizePixel = 0,
ScrollBarThickness = 3,
CanvasSize = UDim2.new(0,0,0,0),
AutomaticCanvasSize = Enum.AutomaticSize.Y
}, Main)
Create("UIListLayout", {
Padding = UDim.new(0,8),
SortOrder = Enum.SortOrder.LayoutOrder
}, Content)
local Dragging = false
local DragStart
local StartPosition
TopBar.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1
or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = true
DragStart = Input.Position
StartPosition = Main.Position
end
end)
TopBar.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1
or Input.UserInputType == Enum.UserInputType.Touch then
Dragging = false
end
end)
UserInputService.InputChanged:Connect(function(Input)
if not Dragging then
return
end
if Input.UserInputType ~= Enum.UserInputType.MouseMovement
and Input.UserInputType ~= Enum.UserInputType.Touch then
return
end
local Delta = Input.Position - DragStart
Main.Position = UDim2.new(
StartPosition.X.Scale,
StartPosition.X.Offset + Delta.X,
StartPosition.Y.Scale,
StartPosition.Y.Offset + Delta.Y
)
end)
local function OpenGUI()
State.GUIOpen = true
Main.Visible = true
Main.Size = UDim2.fromOffset(0,0)
TweenService:Create(
Main,
TweenInfo.new(0.25,Enum.EasingStyle.Back,Enum.EasingDirection.Out),
{Size = UDim2.fromOffset(430,435)}
):Play()
end
local function CloseGUI()
State.GUIOpen = false
local Tween = TweenService:Create(
Main,
TweenInfo.new(0.18,Enum.EasingStyle.Quad,Enum.EasingDirection.In),
{Size = UDim2.fromOffset(0,0)}
)
Tween:Play()
Tween.Completed:Once(function()
if not State.GUIOpen then
Main.Visible = false
end
end)
end
Icon.MouseButton1Click:Connect(function()
if State.GUIOpen then
CloseGUI()
else
OpenGUI()
end
end)
Close.MouseButton1Click:Connect(CloseGUI)
local IconDragging = false
local IconStart
local IconPosition
Icon.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1
or Input.UserInputType == Enum.UserInputType.Touch then
IconDragging = true
IconStart = Input.Position
IconPosition = Icon.Position
end
end)
Icon.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1
or Input.UserInputType == Enum.UserInputType.Touch then
IconDragging = false
end
end)
UserInputService.InputChanged:Connect(function(Input)
if not IconDragging then
return
end
if Input.UserInputType ~= Enum.UserInputType.MouseMovement
and Input.UserInputType ~= Enum.UserInputType.Touch then
return
end
local Delta = Input.Position - IconStart
Icon.Position = UDim2.new(
IconPosition.X.Scale,
IconPosition.X.Offset + Delta.X,
IconPosition.Y.Scale,
IconPosition.Y.Offset + Delta.Y
)
end)
local function CreateToggle(Name, Default, Callback)
local Button = Create("TextButton", {
Size = UDim2.new(1,0,0,42),
BackgroundColor3 = Theme.Button,
BorderSizePixel = 0,
TextColor3 = Theme.Text,
TextSize = 13,
Font = Enum.Font.GothamMedium,
AutoButtonColor = false
}, Content)
Corner(Button,8)
local Enabled = Default
local function Refresh()
Button.Text = Name .. (Enabled and " • ON" or " • OFF")
if Enabled then
Button.BackgroundColor3 = Theme.Accent
Button.TextColor3 = Color3.fromRGB(0,0,0)
else
Button.BackgroundColor3 = Theme.Button
Button.TextColor3 = Theme.Text
end
end
Button.MouseButton1Click:Connect(function()
Enabled = not Enabled
Callback(Enabled)
Refresh()
end)
Refresh()
return Button
end
local function IsValidTarget(Player)
if not Player or Player == LocalPlayer then
return false
end
if Config.IgnoreFriends then
local Success, IsFriend = pcall(function()
return LocalPlayer:IsFriendsWith(Player.UserId)
end)
if Success and IsFriend then
return false
end
end
local Character = Player.Character
if not Character then
return false
end
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local Root = Character:FindFirstChild("HumanoidRootPart")
if not Humanoid or Humanoid.Health <= 0 or not Root then
return false
end
return true
end
local function GetDistance(Player)
if not IsValidTarget(Player) then
return math.huge
end
local Character = LocalPlayer.Character
if not Character then
return math.huge
end
local MyRoot = Character:FindFirstChild("HumanoidRootPart")
local TargetRoot = Player.Character:FindFirstChild("HumanoidRootPart")
if not MyRoot or not TargetRoot then
return math.huge
end
return (MyRoot.Position - TargetRoot.Position).Magnitude
end
local function HasLineOfSight(Target)
if not IsValidTarget(Target) then
return false
end
local Character = LocalPlayer.Character
if not Character then
return false
end
local OriginPart =
Character:FindFirstChild("Head")
or Character:FindFirstChild("HumanoidRootPart")
local TargetPart =
Target.Character:FindFirstChild(Config.TargetPart)
or Target.Character:FindFirstChild("HumanoidRootPart")
if not OriginPart or not TargetPart then
return false
end
local Parameters = RaycastParams.new()
Parameters.FilterType = Enum.RaycastFilterType.Exclude
Parameters.FilterDescendantsInstances = {Character}
Parameters.IgnoreWater = true
local Result = Workspace:Raycast(
OriginPart.Position,
TargetPart.Position - OriginPart.Position,
Parameters
)
if not Result then
return true
end
return Result.Instance:IsDescendantOf(Target.Character)
end
local function FindTarget()
local BestTarget = nil
local BestDistance = Config.MaxDistance
for _, Player in ipairs(Players:GetPlayers()) do
if IsValidTarget(Player) then
local Distance = GetDistance(Player)
if Distance <= BestDistance then
local Visible = true
if Config.WallCheck then
Visible = HasLineOfSight(Player)
end
if Visible then
BestDistance = Distance
BestTarget = Player
end
end
end
end
return BestTarget
end
local function CreateESP(Player)
if State.ESP[Player] then
return
end
if not IsValidTarget(Player) then
return
end
local Character = Player.Character
local Highlight = Instance.new("Highlight")
Highlight.Name = "SonicHubESP"
Highlight.Adornee = Character
Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
Highlight.FillTransparency = 0.75
Highlight.OutlineTransparency = 0
Highlight.FillColor = Theme.Accent
Highlight.OutlineColor = Theme.Text
Highlight.Parent = Character
local Billboard = Instance.new("BillboardGui")
Billboard.Name = "SonicHubTargetName"
Billboard.Adornee = Character:FindFirstChild("Head")
Billboard.Size = UDim2.fromOffset(180,30)
Billboard.StudsOffset = Vector3.new(0,3,0)
Billboard.AlwaysOnTop = true
Billboard.Parent = Character
local Label = Instance.new("TextLabel")
Label.BackgroundTransparency = 1
Label.Size = UDim2.fromScale(1,1)
Label.Text = Player.DisplayName
Label.Font = Enum.Font.GothamBold
Label.TextSize = 13
Label.TextColor3 = Theme.Accent
Label.TextStrokeTransparency = 0.5
Label.Parent = Billboard
State.ESP[Player] = {
Highlight = Highlight,
Billboard = Billboard
}
end
local function RemoveESP(Player)
local Data = State.ESP[Player]
if not Data then
return
end
if Data.Highlight then
Data.Highlight:Destroy()
end
if Data.Billboard then
Data.Billboard:Destroy()
end
State.ESP[Player] = nil
end
local function UpdateESP()
for _, Player in ipairs(Players:GetPlayers()) do
if Player ~= LocalPlayer then
if Config.ESP then
CreateESP(Player)
else
RemoveESP(Player)
end
end
end
end
local function CreateHitbox(Player)
if State.Hitboxes[Player] then
return
end
if not IsValidTarget(Player) then
return
end
local Root = Player.Character:FindFirstChild("HumanoidRootPart")
if not Root then
return
end
local Selection = Instance.new("SelectionBox")
Selection.Name = "SonicHubHitboxDebug"
Selection.Adornee = Root
Selection.LineThickness = 0.05
Selection.Color3 = Theme.Accent
Selection.Parent = Root
State.Hitboxes[Player] = Selection
end
local function RemoveHitbox(Player)
if State.Hitboxes[Player] then
State.Hitboxes[Player]:Destroy()
State.Hitboxes[Player] = nil
end
end
local function UpdateHitboxes()
for _, Player in ipairs(Players:GetPlayers()) do
if Player ~= LocalPlayer then
if Config.HitboxDebug then
CreateHitbox(Player)
else
RemoveHitbox(Player)
end
end
end
end
local function AimAtTarget(Target)
if not Target then
return
end
if not IsValidTarget(Target) then
return
end
if Config.WallCheck and not HasLineOfSight(Target) then
return
end
local Part = Target.Character:FindFirstChild(Config.TargetPart)
if not Part then
return
end
local Desired = CFrame.lookAt(
Camera.CFrame.Position,
Part.Position
)
Camera.CFrame = Camera.CFrame:Lerp(
Desired,
Config.AimSmoothness
)
end
CreateToggle("ESP",false,function(Value)
Config.ESP = Value
if not Value then
for Player in pairs(State.ESP) do
RemoveESP(Player)
end
end
end)
CreateToggle("Aim Assist",false,function(Value)
Config.AimAssist = Value
end)
CreateToggle("Target Lock",false,function(Value)
Config.TargetLock = Value
if Value then
State.Target = FindTarget()
else
State.Target = nil
end
end)
CreateToggle("Wall Check",true,function(Value)
Config.WallCheck = Value
end)
CreateToggle("Ignore Friends",false,function(Value)
Config.IgnoreFriends = Value
if Value and State.Target then
if not IsValidTarget(State.Target) then
State.Target = nil
end
end
end)
CreateToggle("Hitbox Debug",false,function(Value)
Config.HitboxDebug = Value
UpdateHitboxes()
end)
local SliderFrame = Create("Frame", {
Size = UDim2.new(1,0,0,58),
BackgroundColor3 = Theme.Button,
BorderSizePixel = 0
}, Content)
Corner(SliderFrame,8)
local SliderLabel = Create("TextLabel", {
BackgroundTransparency = 1,
Position = UDim2.fromOffset(12,5),
Size = UDim2.new(1,-24,0,20),
Text = "Aim Smoothness: 18%",
TextColor3 = Theme.Text,
Font = Enum.Font.GothamMedium,
TextSize = 12,
TextXAlignment = Enum.TextXAlignment.Left
}, SliderFrame)
local Slider = Create("TextButton", {
Position = UDim2.fromOffset(12,34),
Size = UDim2.new(1,-24,0,8),
BackgroundColor3 = Theme.Panel,
BorderSizePixel = 0,
Text = ""
}, SliderFrame)
Corner(Slider,5)
local Fill = Create("Frame", {
Size = UDim2.new(Config.AimSmoothness,0,1,0),
BackgroundColor3 = Theme.Accent,
BorderSizePixel = 0
}, Slider)
Corner(Fill,5)
local Sliding = false
local function UpdateSlider(X)
local Start = Slider.AbsolutePosition.X
local Width = Slider.AbsoluteSize.X
local Value = math.clamp(
(X - Start) / Width,
0,
1
)
Config.AimSmoothness = math.max(Value,0.01)
Fill.Size = UDim2.new(
Config.AimSmoothness,
0,
1,
0
)
SliderLabel.Text =
"Aim Smoothness: "
.. math.floor(Config.AimSmoothness * 100)
.. "%"
end
Slider.InputBegan:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1
or Input.UserInputType == Enum.UserInputType.Touch then
Sliding = true
UpdateSlider(Input.Position.X)
end
end)
UserInputService.InputChanged:Connect(function(Input)
if not Sliding then
return
end
if Input.UserInputType == Enum.UserInputType.MouseMovement
or Input.UserInputType == Enum.UserInputType.Touch then
UpdateSlider(Input.Position.X)
end
end)
UserInputService.InputEnded:Connect(function(Input)
if Input.UserInputType == Enum.UserInputType.MouseButton1
or Input.UserInputType == Enum.UserInputType.Touch then
Sliding = false
end
end)
local ThemeButton = Create("TextButton", {
Size = UDim2.new(1,0,0,42),
BackgroundColor3 = Theme.Button,
BorderSizePixel = 0,
Text = "THEME : DARK",
TextColor3 = Theme.Text,
Font = Enum.Font.GothamMedium,
TextSize = 13
}, Content)
Corner(ThemeButton,8)
local function ApplyTheme(Name)
Theme = Themes[Name]
Main.BackgroundColor3 = Theme.Background
TopBar.BackgroundColor3 = Theme.Panel
Title.TextColor3 = Theme.Text
Subtitle.TextColor3 = Theme.SubText
Close.BackgroundColor3 = Theme.Button
Close.TextColor3 = Theme.Text
Icon.BackgroundColor3 = Theme.Panel
Icon.TextColor3 = Theme.Accent
IconStroke.Color = Theme.Accent
MainStroke.Color = Theme.Accent
SliderFrame.BackgroundColor3 = Theme.Button
Slider.BackgroundColor3 = Theme.Panel
Fill.BackgroundColor3 = Theme.Accent
ThemeButton.BackgroundColor3 = Theme.Button
ThemeButton.TextColor3 = Theme.Text
for _, Object in ipairs(Content:GetChildren()) do
if Object:IsA("TextButton")
and Object ~= Slider
and Object ~= ThemeButton then
Object.BackgroundColor3 = Theme.Button
Object.TextColor3 = Theme.Text
end
end
for _, Data in pairs(State.ESP) do
if Data.Highlight then
Data.Highlight.FillColor = Theme.Accent
Data.Highlight.OutlineColor = Theme.Text
end
if Data.Billboard then
local Label =
Data.Billboard:FindFirstChildOfClass("TextLabel")
if Label then
Label.TextColor3 = Theme.Accent
end
end
end
end
ThemeButton.MouseButton1Click:Connect(function()
if Config.Theme == "Dark" then
Config.Theme = "Emerald"
ThemeButton.Text = "THEME : EMERALD"
ApplyTheme("Emerald")
else
Config.Theme = "Dark"
ThemeButton.Text = "THEME : DARK"
ApplyTheme("Dark")
end
end)
local function UpdateTarget()
if Config.TargetLock then
if not IsValidTarget(State.Target) then
State.Target = FindTarget()
end
else
State.Target = FindTarget()
end
end
RunService.RenderStepped:Connect(function()
UpdateESP()
UpdateHitboxes()
UpdateTarget()
if Config.AimAssist then
AimAtTarget(State.Target)
end
end)
Players.PlayerRemoving:Connect(function(Player)
RemoveESP(Player)
RemoveHitbox(Player)
if State.Target == Player then
State.Target = nil
end
end)
Players.PlayerAdded:Connect(function(Player)
Player.CharacterAdded:Connect(function()
task.wait(1)
if Config.ESP then
CreateESP(Player)
end
if Config.HitboxDebug then
CreateHitbox(Player)
end
end)
end)
-- REEMPLAZA LAS FUNCIONES DE ESP DEL SCRIPT ANTERIOR POR ESTE ESP MEJORADO
local ESPFolder = Instance.new("Folder")
ESPFolder.Name = "SonicHubESP"
ESPFolder.Parent = ScreenGui
local function RemoveESP(Player)
local Data = State.ESP[Player]
if Data then
for _, Object in pairs(Data) do
if typeof(Object) == "Instance" then
Object:Destroy()
end
end
end
State.ESP[Player] = nil
end
local function CreateESP(Player)
if Player == LocalPlayer then
return
end
if not IsValidTarget(Player) then
return
end
if State.ESP[Player] then
return
end
local Character = Player.Character
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local Root = Character:FindFirstChild("HumanoidRootPart")
local Head = Character:FindFirstChild("Head")
if not Character or not Humanoid or not Root or not Head then
return
end
local Data = {}
-- Highlight
local Highlight = Instance.new("Highlight")
Highlight.Name = "SonicESPHighlight"
Highlight.Adornee = Character
Highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
Highlight.FillColor = Color3.fromRGB(255,0,0)
Highlight.OutlineColor = Color3.fromRGB(255,255,255)
Highlight.FillTransparency = 0.82
Highlight.OutlineTransparency = 0
Highlight.Parent = ESPFolder
Data.Highlight = Highlight
-- Información sobre la cabeza
local Billboard = Instance.new("BillboardGui")
Billboard.Name = "SonicESPInfo"
Billboard.Adornee = Head
Billboard.Size = UDim2.fromOffset(190,75)
Billboard.StudsOffset = Vector3.new(0,3.2,0)
Billboard.AlwaysOnTop = true
Billboard.MaxDistance = Config.MaxDistance
Billboard.Parent = ESPFolder
Data.Billboard = Billboard
local Name = Instance.new("TextLabel")
Name.BackgroundTransparency = 1
Name.Size = UDim2.new(1,0,0,24)
Name.Text = Player.DisplayName
Name.TextColor3 = Color3.fromRGB(255,0,0)
Name.TextStrokeTransparency = 0
Name.Font = Enum.Font.GothamBold
Name.TextSize = 14
Name.Parent = Billboard
local Distance = Instance.new("TextLabel")
Distance.BackgroundTransparency = 1
Distance.Position = UDim2.fromOffset(0,22)
Distance.Size = UDim2.new(1,0,0,20)
Distance.TextColor3 = Color3.fromRGB(255,255,255)
Distance.TextStrokeTransparency = 0
Distance.Font = Enum.Font.Gotham
Distance.TextSize = 11
Distance.Parent = Billboard
local Health = Instance.new("TextLabel")
Health.BackgroundTransparency = 1
Health.Position = UDim2.fromOffset(0,43)
Health.Size = UDim2.new(1,0,0,20)
Health.TextColor3 = Color3.fromRGB(80,255,80)
Health.TextStrokeTransparency = 0
Health.Font = Enum.Font.GothamBold
Health.TextSize = 11
Health.Parent = Billboard
Data.Distance = Distance
Data.Health = Health
-- Caja 3D para representar el área del personaje
local Box = Instance.new("BoxHandleAdornment")
Box.Name = "SonicESPBox"
Box.Adornee = Root
Box.Size = Vector3.new(4,6,2)
Box.Color3 = Color3.fromRGB(255,0,0)
Box.Transparency = 0.65
Box.AlwaysOnTop = true
Box.ZIndex = 5
Box.Parent = ESPFolder
Data.Box = Box
-- Tracer visual
local Tracer = Instance.new("Frame")
Tracer.Name = "Tracer"
Tracer.AnchorPoint = Vector2.new(0.5,0.5)
Tracer.BorderSizePixel = 0
Tracer.BackgroundColor3 = Color3.fromRGB(255,0,0)
Tracer.Visible = false
Tracer.Parent = ESPFolder
-- Punto central del tracer
local Dot = Instance.new("Frame")
Dot.Name = "TargetDot"
Dot.AnchorPoint = Vector2.new(0.5,0.5)
Dot.Size = UDim2.fromOffset(5,5)
Dot.BackgroundColor3 = Color3.fromRGB(255,0,0)
Dot.BorderSizePixel = 0
Dot.Visible = false
Dot.Parent = ESPFolder
local DotCorner = Instance.new("UICorner")
DotCorner.CornerRadius = UDim.new(1,0)
DotCorner.Parent = Dot
Data.Tracer = Tracer
Data.Dot = Dot
State.ESP[Player] = Data
end
local function UpdateESP(Player)
local Data = State.ESP[Player]
if not Data then
CreateESP(Player)
Data = State.ESP[Player]
end
if not Data then
return
end
if not Config.ESP then
for _, Object in pairs(Data) do
if typeof(Object) == "Instance" then
Object.Visible = false
end
end
return
end
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 Character or not Humanoid or not Root or not Head
or Humanoid.Health <= 0 then
RemoveESP(Player)
return
end
local Distance = GetDistance(Player)
if Distance > Config.MaxDistance then
Data.Billboard.Enabled = false
Data.Tracer.Visible = false
Data.Dot.Visible = false
Data.Highlight.Enabled = false
Data.Box.Visible = false
return
end
Data.Billboard.Enabled = true
Data.Highlight.Enabled = true
Data.Box.Visible = true
-- Actualizar distancia
Data.Distance.Text =
"Distance: " .. math.floor(Distance) .. " studs"
-- Actualizar vida
local HealthPercent =
math.clamp(
Humanoid.Health / math.max(Humanoid.MaxHealth,1),
0,
1
)
Data.Health.Text =
"HP: "
.. math.floor(Humanoid.Health)
.. " / "
.. math.floor(Humanoid.MaxHealth)
-- Cambiar color según vida
if HealthPercent > 0.6 then
Data.Health.TextColor3 = Color3.fromRGB(80,255,80)
elseif HealthPercent > 0.3 then
Data.Health.TextColor3 = Color3.fromRGB(255,200,50)
else
Data.Health.TextColor3 = Color3.fromRGB(255,50,50)
end
-- Actualizar tamaño de caja
local Height = math.clamp(
Character:GetExtentsSize().Y,
4,
8
)
Data.Box.Size = Vector3.new(4,Height,2)
-- Tracer desde la parte inferior de la pantalla
local ScreenPosition, OnScreen =
Camera:WorldToViewportPoint(Root.Position)
if OnScreen then
local Start = Vector2.new(
Camera.ViewportSize.X / 2,
Camera.ViewportSize.Y
)
local End = Vector2.new(
ScreenPosition.X,
ScreenPosition.Y
)
local Difference = End - Start
local Length = Difference.Magnitude
Data.Tracer.Position = UDim2.fromOffset(
(Start.X + End.X) / 2,
(Start.Y + End.Y) / 2
)
Data.Tracer.Size = UDim2.fromOffset(
2,
Length
)
Data.Tracer.Rotation =
math.deg(math.atan2(Difference.Y,Difference.X)) + 90
Data.Tracer.Visible = true
Data.Dot.Position = UDim2.fromOffset(
ScreenPosition.X,
ScreenPosition.Y
)
Data.Dot.Visible = true
else
Data.Tracer.Visible = false
Data.Dot.Visible = false
end
-- Color rojo para todos los objetivos
Data.Highlight.FillColor = Color3.fromRGB(255,0,0)
Data.Highlight.OutlineColor = Color3.fromRGB(255,255,255)
Data.Box.Color3 = Color3.fromRGB(255,0,0)
Data.Tracer.BackgroundColor3 = Color3.fromRGB(255,0,0)
Data.Dot.BackgroundColor3 = Color3.fromRGB(255,0,0)
end
local function UpdateAllESP()
for _, Player in ipairs(Players:GetPlayers()) do
if Player ~= LocalPlayer then
if Config.ESP then
UpdateESP(Player)
elseif State.ESP[Player] then
RemoveESP(Player)
end
end
end
end
Players.PlayerAdded:Connect(function(Player)
Player.CharacterAdded:Connect(function()
task.wait(0.5)
if Config.ESP then
CreateESP(Player)
end
end)
end)
Players.PlayerRemoving:Connect(function(Player)
RemoveESP(Player)
end)
RunService.RenderStepped:Connect(function()
if Config.ESP then
UpdateAllESP()
end
end)No comments yet for this script.



