KHAL HUB
Key Required

KHAL HUB

Prison LifeKhalaKhala 2.2K views 487 executesUpdated Mar 26, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•399 lines (15188 chars)
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,
})

Features & Information

Prison life fly, noclip, team esp new update with 100% noclip working
#prison life#fly#noclip#team esp#esp

Community Comments (0)

No comments yet for this script.

More Scripts for Prison Life