
Keyless
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Camera = workspace.CurrentCamera
local Rayfield = loadstring(game:HttpGet("https://sirius.menu/gen2"))()
local idx = 0
local coinAutoOn = false
local coinEspOn = false
local coinCd = 1.2
local lastCoinTP = {}
local conn = nil
local noclipping = false
local dodgeOn = false
local dodgeDist = 20
local dodgeCd = 0.6
local lastDodge = 0
local noclipStep = nil
local noclipRender = nil
local ncParts = {}
local ncOrig = {}
local ncChar = nil
local window = nil
local drawingObjs = {}
local function log(msg)
print("[TPHider] " .. msg)
end
local function getUncollectedCoins()
local out = {}
local go = workspace:FindFirstChild("GameObjects")
if not go then
return out
end
for _, c in ipairs(go:GetChildren()) do
if c:IsA("BasePart") and c.Name == "Credit" then
local col = c:FindFirstChild("Collected")
if (not col or not col.Value) and c.Transparency < 0.5 then
table.insert(out, c)
end
end
end
return out
end
local function isAliveHider(p)
local lp = Players.LocalPlayer
if p == lp then
return false
end
local pd = p:FindFirstChild("PlayerData")
if not pd then
return false
end
local it = pd:FindFirstChild("It")
local inGame = pd:FindFirstChild("InGame")
if not it or it.Value then
return false
end
if inGame and not inGame.Value then
return false
end
local hum = p.Character and p.Character:FindFirstChildOfClass("Humanoid")
return hum ~= nil and hum.Health > 0
end
local function getAliveHiders()
local out = {}
for _, p in ipairs(Players:GetPlayers()) do
if isAliveHider(p) then
table.insert(out, p)
end
end
table.sort(out, function(a, b)
return a.Name < b.Name
end)
return out
end
local function myRoot()
local lp = Players.LocalPlayer
local char = lp.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
local function teleportTo(part, offset)
local root = myRoot()
local target = part:FindFirstChild("HumanoidRootPart") or part
if not root then
return false
end
root.CFrame = CFrame.new(target.Position + Vector3.new(0, offset or 2, 0))
return true
end
local function amIHider()
local lp = Players.LocalPlayer
local gd = game:GetService("ReplicatedStorage"):FindFirstChild("GameData")
local itStr = gd and gd:FindFirstChild("It")
if itStr and itStr.Value == lp.Name then
return false
end
local pd = lp:FindFirstChild("PlayerData")
local inGame = pd and pd:FindFirstChild("InGame")
return not inGame or inGame.Value
end
local function getItPlayer()
local gd = game:GetService("ReplicatedStorage"):FindFirstChild("GameData")
for _, p in ipairs(Players:GetPlayers()) do
local pd = p:FindFirstChild("PlayerData")
if pd then
local it = pd:FindFirstChild("It")
if it and it.Value then
return p
end
end
end
local itStr = gd and gd:FindFirstChild("It")
if itStr and itStr.Value and itStr.Value ~= "" then
return Players:FindFirstChild(itStr.Value)
end
return nil
end
local function refreshNcParts()
local char = Players.LocalPlayer.Character
ncChar = char
ncParts = {}
ncOrig = {}
if not char then
return
end
local function walk(v)
if v:IsA("BasePart") then
table.insert(ncParts, v)
ncOrig[v] = v.CanCollide
end
for _, c in ipairs(v:GetChildren()) do
walk(c)
end
end
walk(char)
end
local function startNoclip()
if noclipStep then
return
end
refreshNcParts()
noclipStep = RunService.Stepped:Connect(function()
local char = Players.LocalPlayer.Character
if char ~= ncChar then
refreshNcParts()
end
for _, p in ipairs(ncParts) do
p.CanCollide = false
end
end)
noclipRender = RunService.RenderStepped:Connect(function()
local root = myRoot()
if not root then
return
end
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = { Players.LocalPlayer.Character }
local result = workspace:Raycast(root.Position + Vector3.new(0, 2, 0), Vector3.new(0, -30, 0), params)
local floorY = result and result.Position.Y or (root.Position.Y - 0.5)
local pos = root.Position
root.CFrame = CFrame.new(pos.X, math.max(pos.Y, floorY + 3.5), pos.Z)
end)
end
local function stopNoclip()
if noclipStep then
noclipStep:Disconnect()
noclipStep = nil
end
if noclipRender then
noclipRender:Disconnect()
noclipRender = nil
end
for p, v in pairs(ncOrig) do
p.CanCollide = v
end
ncParts = {}
ncOrig = {}
ncChar = nil
end
local function dodgeIt()
local it = getItPlayer()
local itRoot = it and it.Character and it.Character:FindFirstChild("HumanoidRootPart")
local root = myRoot()
if not root or not itRoot then
log("Dodge: can't find It (" .. (it and it.Name or "nil") .. ")")
return false
end
local itPos = itRoot.Position
local candidates = {}
for _, c in ipairs(getUncollectedCoins()) do
table.insert(candidates, c)
end
for _, h in ipairs(getAliveHiders()) do
if h.Character then
table.insert(candidates, h.Character)
end
end
local best, bestD = nil, -math.huge
for _, cand in ipairs(candidates) do
local part = cand:FindFirstChild("HumanoidRootPart") or cand
local d = (part.Position - itPos).Magnitude
if d > bestD then
best, bestD = cand, d
end
end
if best then
teleportTo(best, 3)
log("Dodge It (" .. it.Name .. ") -> " .. best.Name .. " (" .. string.format("%.0f studs from It)", bestD))
window:Toast({
title = "Dodged the It!",
subtitle = "-> " .. best.Name .. " (" .. string.format("%.0f studs)", bestD),
duration = 2,
})
return true
end
log("Dodge: no candidates")
return false
end
window = Rayfield:CreateWindow({
name = "TP Hider",
subtitle = "Hide and Seek Extreme",
})
local tab = window:CreateTab({ name = "Teleport", icon = "target" })
local coinTab = window:CreateTab({ name = "Coin", icon = "circle-dollar" })
local dodgeTab = window:CreateTab({ name = "Dodge", icon = "user-x" })
local stat = tab:CreateStat({
name = "Alive hiders",
value = 0,
})
local coinStat = coinTab:CreateStat({
name = "Coins left",
value = 0,
})
local dodgeStat = dodgeTab:CreateStat({
name = "Distance to It",
prefix = "",
suffix = " studs",
value = 0,
})
dodgeTab:CreateToggle({
name = "Noclip (walk through walls)",
value = false,
description = "Walk through walls while keeping your feet on the floor.",
callback = function(value)
noclipping = value
if value then
startNoclip()
log("Noclip ON")
else
stopNoclip()
log("Noclip OFF")
end
end,
})
dodgeTab:CreateToggle({
name = "Auto dodge the It",
value = false,
description = "Auto-teleport to the spot farthest from the It when they get close.",
callback = function(value)
dodgeOn = value
log("Auto dodge " .. (value and "ON" or "OFF"))
end,
})
dodgeTab:CreateSlider({
name = "Dodge distance (studs)",
range = { 5, 50 },
increment = 1,
value = 20,
suffix = " studs",
callback = function(value)
dodgeDist = value
end,
})
dodgeTab:CreateSlider({
name = "Dodge cooldown (s)",
range = { 0.2, 3 },
increment = 0.1,
value = 0.6,
suffix = "s",
callback = function(value)
dodgeCd = value
end,
})
dodgeTab:CreateButton({
name = "Dodge now (manual)",
callback = function()
dodgeIt()
end,
})
local function cycleAndTeleport()
local hiders = getAliveHiders()
if #hiders == 0 then
log("No alive hiders to teleport to")
stat:Set(0)
return
end
idx = idx % #hiders
local target = hiders[idx + 1]
idx = idx + 1
local ok = teleportTo(target.Character, 3)
log("TP -> " .. target.Name .. " (" .. idx .. "/" .. #hiders .. " alive)" .. (ok and "" or " FAILED (no root)"))
stat:Set(#hiders)
window:Toast({
title = "TP -> " .. target.Name,
subtitle = ok and (idx .. "/" .. #hiders .. " hiders alive") or "failed",
duration = 2,
})
end
tab:CreateKeybind({
name = "Teleport to next alive hider (X)",
value = Enum.KeyCode.X,
description = "Press to teleport to the next alive hider. Click the box to rebind.",
callback = function()
cycleAndTeleport()
end,
})
coinTab:CreateToggle({
name = "Auto TP to coin",
value = false,
description = "Auto-teleport to the nearest uncollected coin (Credit).",
callback = function(value)
coinAutoOn = value
log("Coin auto-TP " .. (value and "ON" or "OFF"))
end,
})
coinTab:CreateToggle({
name = "Coin locator (ESP)",
value = false,
description = "Draw a line + distance to the nearest uncollected coin.",
callback = function(value)
coinEspOn = value
log("Coin ESP " .. (value and "ON" or "OFF"))
end,
})
coinTab:CreateSlider({
name = "Auto-TP coin cooldown (s)",
range = { 0.2, 5 },
increment = 0.1,
value = 1.2,
suffix = "s",
callback = function(value)
coinCd = value
end,
})
coinTab:CreateButton({
name = "TP to nearest coin (manual)",
callback = function()
local coins = getUncollectedCoins()
if #coins == 0 then
log("No coins")
window:Toast({ title = "No coins", duration = 2 })
return
end
local root = myRoot()
local best, bestD = nil, math.huge
for _, c in ipairs(coins) do
local d = root and (c.Position - root.Position).Magnitude or 0
if d < bestD then
best, bestD = c, d
end
end
if best then
teleportTo(best, 1)
log("TP -> coin @ " .. tostring(best.Position) .. " (" .. string.format("%.0f", bestD) .. " studs)")
window:Toast({ title = "TP -> coin", subtitle = string.format("%.0f studs", bestD), duration = 2 })
end
end,
})
local coinLine = Drawing.new("Line")
local coinText = Drawing.new("Text")
coinLine.Thickness = 2
coinLine.Color = Color3.fromRGB(255, 215, 0)
coinLine.Transparency = 1
coinText.Size = 14
coinText.Center = true
coinText.Outline = true
coinText.Color = Color3.fromRGB(255, 215, 0)
coinText.Font = Drawing.Fonts.Monospace
table.insert(drawingObjs, coinLine)
table.insert(drawingObjs, coinText)
local function updateCoinEsp()
local root = myRoot()
if not root then
coinLine.Visible = false
coinText.Visible = false
return
end
local coins = getUncollectedCoins()
if #coins == 0 then
coinLine.Visible = false
coinText.Visible = false
return
end
local best, bestD = nil, math.huge
for _, c in ipairs(coins) do
local d = (c.Position - root.Position).Magnitude
if d < bestD then
best, bestD = c, d
end
end
if not best then
coinLine.Visible = false
coinText.Visible = false
return
end
local screen, onScreen = Camera:WorldToViewportPoint(best.Position)
local center = Vector2.new(screen.X, screen.Y)
if not onScreen then
coinLine.Visible = false
coinText.Visible = false
return
end
coinLine.From = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y)
coinLine.To = center
coinLine.Visible = true
coinText.Position = center + Vector2.new(0, -18)
coinText.Text = "Coin " .. string.format("%.0f studs", bestD)
coinText.Visible = true
end
conn = RunService.Heartbeat:Connect(function()
stat:Set(#getAliveHiders())
local it = getItPlayer()
local itRoot = it and it.Character and it.Character:FindFirstChild("HumanoidRootPart")
local myr = myRoot()
if itRoot and myr then
dodgeStat:Set((itRoot.Position - myr.Position).Magnitude)
else
dodgeStat:Set(0)
end
if dodgeOn and amIHider() then
local root = myRoot()
if itRoot and root then
local now = os.clock()
if (itRoot.Position - root.Position).Magnitude <= dodgeDist and now - lastDodge >= dodgeCd then
lastDodge = now
dodgeIt()
end
end
end
local coins = getUncollectedCoins()
coinStat:Set(#coins)
if coinAutoOn and #coins > 0 then
local root = myRoot()
local now = os.clock()
local best, bestD = nil, math.huge
for _, c in ipairs(coins) do
local d = root and (c.Position - root.Position).Magnitude or 0
if d < bestD then
best, bestD = c, d
end
end
if best then
local last = lastCoinTP[best] or 0
if now - last >= coinCd then
lastCoinTP[best] = now
teleportTo(best, 1)
end
end
end
if coinEspOn then
updateCoinEsp()
else
coinLine.Visible = false
coinText.Visible = false
end
end)
STATE.onCleanup(function()
if conn then
conn:Disconnect()
end
if noclipping then
stopNoclip()
end
for _, d in ipairs(drawingObjs) do
d:Remove()
end
table.clear(lastCoinTP)
window:Unload()
end)No comments yet for this script.