
Key Required
![[UPD] SEE PLAYERS KEYLESS](https://scriptblox.com/images/sb/81597302030865-1769900207362.png)
-- ===== SERVICIOS =====
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local localPlayer = Players.LocalPlayer
-- ===== ESTADOS =====
local loopTP = false
local loopIndex = 1
-- ===== GUI =====
local gui = Instance.new("ScreenGui")
gui.Name = "WatcherGUI"
gui.ResetOnSpawn = false
gui.Parent = localPlayer:WaitForChild("PlayerGui")
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 360, 0, 180)
frame.Position = UDim2.new(0.5, -180, 0.25, 0)
frame.BackgroundColor3 = Color3.new(0,0,0)
frame.BorderSizePixel = 0
frame.Parent = gui
-- ===== DRAG =====
local dragging, dragStart, startPos
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = frame.Position
end
end)
frame.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 dragging and
(input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
frame.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end)
-- ===== BOTΓN SEE EVERYONE (solo visual por ahora) =====
local seeBtn = Instance.new("TextButton")
seeBtn.Size = UDim2.new(1, -20, 0, 50)
seeBtn.Position = UDim2.new(0, 10, 0, 10)
seeBtn.BackgroundColor3 = Color3.fromRGB(255,0,0)
seeBtn.Text = "see everyone"
seeBtn.TextScaled = true
seeBtn.Font = Enum.Font.FredokaOne
seeBtn.TextColor3 = Color3.new(0,0,0)
seeBtn.Parent = frame
seeBtn.MouseButton1Click:Connect(function()
-- ===== SERVICIOS =====
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local localPlayer = Players.LocalPlayer
-- ===== CONFIG =====
local VELOCIDAD = 12
local MIRADA_UMBRAL = 0.85
-- ===== TABLA DE PARTES =====
local partesPorJugador = {} -- π₯ NUEVO
-- ===== FUNCIΓN =====
local function crearParteParaJugador(jugador)
if jugador == localPlayer then return end
local parte = Instance.new("Part")
parte.Size = Vector3.new(3, 3, 6)
parte.Anchored = true
parte.CanCollide = false
parte.Material = Enum.Material.SmoothPlastic
parte.Transparency = 0.5
parte.Color = Color3.new(1, 1, 1)
parte.Name = "Watcher_" .. jugador.Name
parte.Parent = workspace
partesPorJugador[jugador] = parte -- π₯ NUEVO
-- DECAL FRENTE
local frente = Instance.new("Decal")
frente.Face = Enum.NormalId.Front
frente.Texture = "rbxassetid://6319951708"
frente.Parent = parte
-- DECAL ESPALDA
local espalda = Instance.new("Decal")
espalda.Face = Enum.NormalId.Back
espalda.Texture = "rbxassetid://17589872023"
espalda.Parent = parte
-- LOOP
RunService.RenderStepped:Connect(function(dt)
if not parte or not parte.Parent then return end
local char = jugador.Character
local localChar = localPlayer.Character
if not char or not localChar then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local localHrp = localChar:FindFirstChild("HumanoidRootPart")
local head = char:FindFirstChild("Head")
if not hrp or not localHrp or not head then return end
-- POSICIΓN: 3 studs delante de la cabeza
local origen = head.Position + head.CFrame.LookVector * 3
local posSuave = parte.Position:Lerp(origen, dt * VELOCIDAD)
-- ROTACIΓN
parte.CFrame = CFrame.lookAt(
posSuave,
posSuave + hrp.CFrame.LookVector
)
-- DETECTAR SI TE MIRA
local direccionAlLocal = (localHrp.Position - hrp.Position).Unit
local mirada = hrp.CFrame.LookVector:Dot(direccionAlLocal)
if mirada > MIRADA_UMBRAL then
parte.Color = Color3.fromRGB(255, 0, 0)
else
parte.Color = Color3.new(1, 1, 1)
end
end)
end
-- π₯ NUEVO: eliminar parte cuando el jugador se va
Players.PlayerRemoving:Connect(function(jugador)
local parte = partesPorJugador[jugador]
if parte then
parte:Destroy()
partesPorJugador[jugador] = nil
end
end)
-- JUGADORES EXISTENTES
for _, jugador in ipairs(Players:GetPlayers()) do
crearParteParaJugador(jugador)
end
-- NUEVOS JUGADORES
Players.PlayerAdded:Connect(crearParteParaJugador)
end)
-- ===== LOOP TP =====
local loopBtn = Instance.new("TextButton")
loopBtn.Size = UDim2.new(0.48, 0, 0, 45)
loopBtn.Position = UDim2.new(0.02, 0, 0, 80)
loopBtn.BackgroundColor3 = Color3.fromRGB(255,0,0)
loopBtn.TextScaled = true
loopBtn.Font = Enum.Font.FredokaOne
loopBtn.TextColor3 = Color3.new(0,0,0)
loopBtn.Text = "loop tp (off)"
loopBtn.Parent = frame
-- ===== OFF / ON =====
local offBtn = Instance.new("TextButton")
offBtn.Size = UDim2.new(0.48, 0, 0, 45)
offBtn.Position = UDim2.new(0.5, 0, 0, 80)
offBtn.BackgroundColor3 = Color3.fromRGB(255,0,0)
offBtn.TextScaled = true
offBtn.Font = Enum.Font.FredokaOne
offBtn.TextColor3 = Color3.new(0,0,0)
offBtn.Text = "off"
offBtn.Parent = frame
-- ===== LOOP TP FUNCIΓN =====
task.spawn(function()
while true do
task.wait(0.1)
if loopTP then
local char = localPlayer.Character
if char and char:FindFirstChild("HumanoidRootPart") then
char.HumanoidRootPart.CFrame = CFrame.new(52, 34, -80)
end
end
end
end)
-- ===== BOTΓN LOOP TP =====
loopBtn.MouseButton1Click:Connect(function()
loopTP = not loopTP
loopBtn.Text = loopTP and "loop tp (on)" or "loop tp (off)"
offBtn.Text = loopTP and "on" or "off"
end)
-- ===== BOTΓN OFF =====
offBtn.MouseButton1Click:Connect(function()
loopTP = false
loopBtn.Text = "loop tp (off)"
offBtn.Text = "off"
end)
this is obviously made with Spanish A.I. but who cares
w