
KeylessUniversal

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local StarterGui = game:GetService("StarterGui")
local LP = Players.LocalPlayer
local TRANSPARENCY = 0.35
local HITBOX_COLOR = Color3.fromRGB(255, 0, 0)
local LOCAL_COLOR = Color3.fromRGB(0, 255, 0)
local HITBOX_SIZE = Vector3.new(2.5, 3.5, 1)
local PING_ESTIMATE = 0.0979
local MAX_HISTORY_SECONDS = 2.0
local SMOOTH_LERP = 0.9
local SHOW_LOCAL_HITBOX = true
local history = {}
local serverVisualizer = nil
local localVisualizer = nil
local hbConn = nil
local function log(msg)
print("[HitboxViz] " .. msg)
end
local function createHitboxPart(name, color)
local p = Instance.new("Part")
p.Name = name
p.Size = HITBOX_SIZE
p.Anchored = true
p.CanCollide = false
p.Locked = true
p.Material = Enum.Material.ForceField
p.Color = color
p.Transparency = TRANSPARENCY
local cam = workspace.CurrentCamera
if cam then
p.Parent = cam
else
p.Parent = workspace
end
return p
end
local function cleanup()
if hbConn then
hbConn:Disconnect()
hbConn = nil
end
if serverVisualizer then
serverVisualizer:Destroy()
serverVisualizer = nil
end
if localVisualizer then
localVisualizer:Destroy()
localVisualizer = nil
end
history = {}
end
local function findEntryAtTime(targetTime)
for i = #history, 1, -1 do
if history[i].t <= targetTime then
return history[i]
end
end
return nil
end
local function startVisualizer(character)
cleanup()
log("Iniciando visualizador...")
local hrp = character:FindFirstChild("HumanoidRootPart")
or character:FindFirstChild("UpperTorso")
or character:FindFirstChild("Torso")
if not hrp then
log("HRP/Torso not found.")
return
end
-- asegurar cámara
repeat task.wait() until workspace.CurrentCamera
serverVisualizer = createHitboxPart("Server_HitboxViz", HITBOX_COLOR)
if SHOW_LOCAL_HITBOX then
localVisualizer = createHitboxPart("Local_HitboxViz", LOCAL_COLOR)
localVisualizer.Transparency = TRANSPARENCY * 0.6
end
local alpha = 1 - SMOOTH_LERP
if alpha < 0 then alpha = 0 end
if alpha > 1 then alpha = 1 end
hbConn = RunService.Heartbeat:Connect(function()
if not hrp or not hrp.Parent then
cleanup()
return
end
local now = os.clock()
table.insert(history, { t = now, cframe = hrp.CFrame })
while #history > 1 and (now - history[1].t) > MAX_HISTORY_SECONDS do
table.remove(history, 1)
end
local targetTime = now - PING_ESTIMATE
local entry = findEntryAtTime(targetTime)
local targetCFrame = entry and entry.cframe
or (history[1] and history[1].cframe)
or hrp.CFrame
if serverVisualizer and serverVisualizer.Parent then
serverVisualizer.CFrame = serverVisualizer.CFrame:Lerp(targetCFrame, alpha)
serverVisualizer.Size = HITBOX_SIZE
end
if localVisualizer and localVisualizer.Parent then
localVisualizer.CFrame = localVisualizer.CFrame:Lerp(hrp.CFrame, alpha)
localVisualizer.Size = HITBOX_SIZE
end
end)
log("Visualizer Enabled.")
end
-- Inicialización
if LP.Character and LP.Character.Parent then
task.delay(0.2, function()
startVisualizer(LP.Character)
end)
end
LP.CharacterAdded:Connect(function(ch)
task.wait(0.5)
startVisualizer(ch)
end)
StarterGui:SetCore("ChatMakeSystemMessage", {
Text = "[Server Hitbox] Enabled — Red = server view approx.",
Color = Color3.fromRGB(255,0,0),
})



Buen chatgpt Hermano. no pudiste eliminar los comentarios almenos?
@Matukex_Studio ya lo hice