
Key Required

local Rayfield = loadstring(game:HttpGet("https://sirius.menu/rayfield"))()
local Window = Rayfield:CreateWindow({
Name = "Khal Hub | Prison Life",
LoadingTitle = "Khal Hub",
LoadingSubtitle = "by Khal",
Theme = "Default",
DisableRayfieldPrompts = true,
DisableBuildWarnings = true,
})
local MainTab = Window:CreateTab("Main", nil)
local TeleportTab = Window:CreateTab("Teleport", nil)
local VisualTab = Window:CreateTab("Visuals", nil)
local player = game.Players.LocalPlayer
local RS = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local Players = game:GetService("Players")
-- Movement Variables
local flying = false
local noclipping = false
local flySpeed = 50
local bv, bg, flyConn, noclipConn
-- Teleport Variables
local ClickTeleport = false
local ClickTPKey = Enum.KeyCode.LeftControl
local clickTPConnection = nil
-- Role ESP Variables (Full Avatar)
local espEnabled = false
local showGuards = true
local showInmates = true
local showCriminals = true
local ESPHighlights = {}
local ESPNameTags = {}
local roleColors = {
["Guards"] = Color3.fromRGB(0, 162, 255), -- Biru untuk Police/Guards
["Inmates"] = Color3.fromRGB(255, 165, 0), -- Orange
["Criminals"] = Color3.fromRGB(255, 0, 0) -- Merah
}
-- Player Teleport Variables
local playerButtons = {}
local playerListSection
-- Fly Function
local function startFly()
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChild("Humanoid")
if not hrp or not hum then return end
hum.PlatformStand = true
flying = true
if bv then bv:Destroy() end
if bg then bg:Destroy() end
bv = Instance.new("BodyVelocity")
bv.Velocity = Vector3.new(0, 0, 0)
bv.MaxForce = Vector3.new(1e9, 1e9, 1e9)
bv.Parent = hrp
bg = Instance.new("BodyGyro")
bg.MaxTorque = Vector3.new(1e9, 1e9, 1e9)
bg.P = 1e6
bg.CFrame = hrp.CFrame
bg.Parent = hrp
flyConn = RS.RenderStepped:Connect(function()
local c = player.Character
if not c then return end
local h = c:FindFirstChild("HumanoidRootPart")
if not h or not bv or not bg then return end
local cam = workspace.CurrentCamera
local dir = Vector3.new(0, 0, 0)
if UIS:IsKeyDown(Enum.KeyCode.W) then dir = dir + cam.CFrame.LookVector end
if UIS:IsKeyDown(Enum.KeyCode.S) then dir = dir - cam.CFrame.LookVector end
if UIS:IsKeyDown(Enum.KeyCode.A) then dir = dir - cam.CFrame.RightVector end
if UIS:IsKeyDown(Enum.KeyCode.D) then dir = dir + cam.CFrame.RightVector end
if UIS:IsKeyDown(Enum.KeyCode.Space) then dir = dir + Vector3.new(0, 1, 0) end
if UIS:IsKeyDown(Enum.KeyCode.LeftShift) then dir = dir - Vector3.new(0, 1, 0) end
local hum2 = c:FindFirstChild("Humanoid")
if hum2 and hum2.MoveDirection.Magnitude > 0 then
local md = hum2.MoveDirection
dir = dir + Vector3.new(md.X, 0, md.Z)
end
if dir.Magnitude > 0 then
bv.Velocity = dir.Unit * flySpeed
else
bv.Velocity = Vector3.new(0, 0, 0)
end
bg.CFrame = cam.CFrame
end)
end
local function stopFly()
flying = false
if flyConn then flyConn:Disconnect() flyConn = nil end
if bv then bv:Destroy() bv = nil end
if bg then bg:Destroy() bg = nil end
local char = player.Character
if char then
local hum = char:FindFirstChild("Humanoid")
if hum then hum.PlatformStand = false end
end
end
-- Noclip Function
local function startNoclip()
noclipping = true
pcall(function()
game:GetService("ReplicatedStorage").Scripts.CharacterCollision.Disabled = true
end)
noclipConn = RS.Stepped:Connect(function()
local char = player.Character
if not char then return end
for _, v in ipairs(char:GetDescendants()) do
if v:IsA("BasePart") then
v.CanCollide = false
end
end
end)
end
local function stopNoclip()
noclipping = false
pcall(function()
game:GetService("ReplicatedStorage").Scripts.CharacterCollision.Disabled = false
end)
if noclipConn then noclipConn:Disconnect() noclipConn = nil end
local char = player.Character
if char then
for _, v in ipairs(char:GetDescendants()) do
if v:IsA("BasePart") then
v.CanCollide = true
end
end
end
end
-- Teleport Functions
local function TeleportToPosition(position)
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if hrp then
hrp.CFrame = CFrame.new(position)
end
end
local function GetMousePosition()
local mouse = player:GetMouse()
return mouse.Hit.p
end
local function StartClickTeleport()
if clickTPConnection then clickTPConnection:Disconnect() clickTPConnection = nil end
clickTPConnection = UIS.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == ClickTPKey and ClickTeleport then
local pos = GetMousePosition()
TeleportToPosition(pos)
end
end)
end
local function StopClickTeleport()
if clickTPConnection then
clickTPConnection:Disconnect()
clickTPConnection = nil
end
end
-- Function to create/update name tag
local function createNameTag(plr, char, color)
local head = char:FindFirstChild("Head")
if not head then return end
local nameTag = ESPNameTags[plr]
if not nameTag then
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(2, 0, 1, 0)
billboardGui.StudsOffset = Vector3.new(0, 2, 0)
billboardGui.AlwaysOnTop = true
billboardGui.ExtentsOffset = Vector3.new(0, 0, 0)
billboardGui.Parent = head
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundTransparency = 1
textLabel.TextScaled = true
textLabel.Font = Enum.Font.SourceSansBold
textLabel.TextColor3 = color
textLabel.TextStrokeTransparency = 0.8
textLabel.Text = plr.Name
textLabel.Parent = billboardGui
nameTag = billboardGui
ESPNameTags[plr] = nameTag
else
-- Update existing name tag color
local textLabel = nameTag:FindFirstChildOfClass("TextLabel")
if textLabel then
textLabel.TextColor3 = color
end
end
end
-- Role ESP Full Avatar
local function applyRoleESP(plr)
if plr == player then -- Do not ESP self
if ESPHighlights[plr] then ESPHighlights[plr]:Destroy() ESPHighlights[plr] = nil end
if ESPNameTags[plr] then ESPNameTags[plr]:Destroy() ESPNameTags[plr] = nil end
return
end
local team = plr.Team
if not team then
if ESPHighlights[plr] then ESPHighlights[plr]:Destroy() ESPHighlights[plr] = nil end
if ESPNameTags[plr] then ESPNameTags[plr]:Destroy() ESPNameTags[plr] = nil end
return
end
local teamName = team.Name
local shouldShow = (teamName == "Guards" and showGuards) or
(teamName == "Inmates" and showInmates) or
(teamName == "Criminals" and showCriminals)
local char = plr.Character
if not char then
if ESPHighlights[plr] then ESPHighlights[plr]:Destroy() ESPHighlights[plr] = nil end
if ESPNameTags[plr] then ESPNameTags[plr]:Destroy() ESPNameTags[plr] = nil end
return
end
if not espEnabled or not shouldShow then
if ESPHighlights[plr] then ESPHighlights[plr]:Destroy() ESPHighlights[plr] = nil end
if ESPNameTags[plr] then ESPNameTags[plr]:Destroy() ESPNameTags[plr] = nil end
return
end
local color = roleColors[teamName] or Color3.fromRGB(255, 255, 255)
-- Handle Highlight ESP
local highlight = char:FindFirstChild("KhalRoleESP")
if not highlight then
highlight = Instance.new("Highlight")
highlight.Name = "KhalRoleESP"
highlight.FillTransparency = 0.45
highlight.OutlineTransparency = 0.15
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Parent = char
ESPHighlights[plr] = highlight
end
highlight.FillColor = color
highlight.OutlineColor = color
-- Handle Name Tag ESP
createNameTag(plr, char, color)
end
local function updateAllESP()
for _, plr in ipairs(Players:GetPlayers()) do
applyRoleESP(plr)
end
end
-- Function to safely teleport to a player
local function TeleportToPlayer(targetPlayer)
local char = player.Character
local targetChar = targetPlayer.Character
if not char or not targetChar then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
local targetHrp = targetChar:FindFirstChild("HumanoidRootPart")
if not hrp and not targetHrp then return end
-- Teleport slightly above target to avoid collision issues
local targetPosition = targetHrp.Position + Vector3.new(0, 5, 0)
hrp.CFrame = CFrame.new(targetPosition)
end
-- Function to update the player list UI
local function updatePlayerListUI()
-- Clear existing player buttons
if playerListSection then
for _, button in pairs(playerButtons) do
button:Destroy()
end
playerButtons = {}
end
-- Get current players in the server
local currentPlayers = Players:GetPlayers()
for _, plr in ipairs(currentPlayers) do
if plr ~= player then -- Don't list self
local newButton = playerListSection:CreateButton({
Name = plr.Name,
Callback = function()
TeleportToPlayer(plr)
end
})
table.insert(playerButtons, newButton)
end
end
end
-- Main Tab UI
MainTab:CreateSection("Movement")
MainTab:CreateToggle({Name = "✈️ Fly", CurrentValue = false, Callback = function(val) if val then startFly() else stopFly() end end})
MainTab:CreateToggle({Name = "👻 Noclip", CurrentValue = false, Callback = function(val) if val then startNoclip() else stopNoclip() end end})
MainTab:CreateSlider({Name = "🚀 Fly Speed", Range = {10, 300}, Increment = 10, CurrentValue = 50, Callback = function(val) flySpeed = val end})
-- Teleport Tab UI
TeleportTab:CreateSection("Click Teleport")
TeleportTab:CreateToggle({Name = "🖱️ Enable Click Teleport", CurrentValue = false, Callback = function(val)
ClickTeleport = val
if val then StartClickTeleport() else StopClickTeleport() end
end})
TeleportTab:CreateParagraph({Title = "How to use", Content = "Hold Left Control + Click mouse to teleport."})
TeleportTab:CreateSection("Locations")
TeleportTab:CreateButton({Name = "🏠 Prison Yard", Callback = function() TeleportToPosition(Vector3.new(919, 100, 2377)) end})
TeleportTab:CreateButton({Name = "🏢 Prison Cells", Callback = function() TeleportToPosition(Vector3.new(919, 100, 2317)) end})
TeleportTab:CreateButton({Name = "🍽️ Cafeteria", Callback = function() TeleportToPosition(Vector3.new(930, 100, 2250)) end})
TeleportTab:CreateButton({Name = "🏥 Infirmary", Callback = function() TeleportToPosition(Vector3.new(930, 100, 2400)) end})
TeleportTab:CreateButton({Name = "🚪 Main Gate", Callback = function() TeleportToPosition(Vector3.new(860, 100, 2377)) end})
TeleportTab:CreateButton({Name = "🚁 Criminal Base", Callback = function() TeleportToPosition(Vector3.new(-975, 94, 2053)) end})
TeleportTab:CreateButton({Name = "🏦 Bank", Callback = function() TeleportToPosition(Vector3.new(657, 99, 2472)) end})
TeleportTab:CreateButton({Name = "🏪 Gas Station", Callback = function() TeleportToPosition(Vector3.new(595, 98, 2575)) end})
TeleportTab:CreateButton({Name = "🏠 Police Station", Callback = function() TeleportToPosition(Vector3.new(836, 99, 2276)) end})
TeleportTab:CreateButton({Name = "🔫 Gun Shop", Callback = function() TeleportToPosition(Vector3.new(798, 99, 2435)) end})
-- Player Teleport Section
playerListSection = TeleportTab:CreateSection("Player Teleport")
TeleportTab:CreateButton({Name = "🔄 Refresh Player List", Callback = function() updatePlayerListUI() end})
-- Visual Tab - Role ESP
VisualTab:CreateSection("Role ESP (Full Avatar Highlight & Name Tag)")
VisualTab:CreateToggle({Name = "👁️ Enable Role ESP", CurrentValue = false, Callback = function(val)
espEnabled = val
if val then
updateAllESP()
else
for _, hl in pairs(ESPHighlights) do pcall(function() hl:Destroy() end) end
ESPHighlights = {}
for _, nt in pairs(ESPNameTags) do pcall(function() nt:Destroy() end) end
ESPNameTags = {}
end
end})
VisualTab:CreateToggle({Name = "👮 Guards / Police (Biru)", CurrentValue = true, Callback = function(val) showGuards = val if espEnabled then updateAllESP() end end})
VisualTab:CreateToggle({Name = "🔷 Inmates (Orange)", CurrentValue = true, Callback = function(val) showInmates = val if espEnabled then updateAllESP() end end})
VisualTab:CreateToggle({Name = "🔴 Criminals (Merah)", CurrentValue = true, Callback = function(val) showCriminals = val if espEnabled then updateAllESP() end end})
VisualTab:CreateParagraph({Title = "Catatan", Content = "ESP full body menggunakan Highlight Roblox dan nama di atas kepala.\nPolice team di game bernama \'Guards\'.\nBisa nyalain/matiin per role."})
-- Connections
Players.PlayerAdded:Connect(function(plr)
if plr ~= player then
plr.CharacterAdded:Connect(function(char) task.wait(0.8) applyRoleESP(plr) end)
plr:GetPropertyChangedSignal("Team"):Connect(function() applyRoleESP(plr) end)
end
end)
Players.PlayerRemoving:Connect(function(plr)
if ESPHighlights[plr] then ESPHighlights[plr]:Destroy() ESPHighlights[plr] = nil end
if ESPNameTags[plr] then ESPNameTags[plr]:Destroy() ESPNameTags[plr] = nil end
-- Also remove from player teleport list if it exists
updatePlayerListUI()
end)
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= player then
if plr.Character then task.delay(0.8, function() applyRoleESP(plr) end) end
plr.CharacterAdded:Connect(function(char) task.wait(0.8) applyRoleESP(plr) end)
plr:GetPropertyChangedSignal("Team"):Connect(function() applyRoleESP(plr) end)
end
end
player.CharacterAdded:Connect(function()
flying = false; noclipping = false
if flyConn then flyConn:Disconnect() end
if noclipConn then noclipConn:Disconnect() end
if clickTPConnection then clickTPConnection:Disconnect() end
if bv then bv:Destroy() end
if bg then bg:Destroy() end
pcall(function() game:GetService("ReplicatedStorage").Scripts.CharacterCollision.Disabled = false end)
end)
-- Initial update of player list when script loads
updatePlayerListUI()
Rayfield:Notify({
Title = "Khal Hub Loaded!",
Content = "Role ESP sudah diperbaiki total (Guards = Police) dengan tambahan nama di atas kepala. Fitur Player Teleport juga sudah ditambahkan.",
Duration = 6,
})No comments yet for this script.



