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, })