-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/client.lua?s=6a9913b5ace625e435aafbad"))() end) end) --[[rscripts:analytics:end]] -- ========================================== -- NOV PRISON LIFE HUB (PART 1 OF 2 - FIXED GIVER) -- ========================================== pcall(function() for _, v in ipairs(game.CoreGui:GetChildren()) do if v.Name:match("Rayfield") then v:Destroy() end end end) local success, Rayfield = pcall(function() return loadstring(game:HttpGet('https://sirius.menu/rayfield'))() end) if not success or not Rayfield then return end local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local CoreGui = game:GetService("CoreGui") local LocalPlayer = Players.LocalPlayer local Cam = workspace.CurrentCamera local Window = Rayfield:CreateWindow({ Name = "NOV PRISON LIFE HUB", LoadingTitle = "NOV PRISON LIFE - PART 1", LoadingSubtitle = "by poutewuoppkaka 👑", ConfigurationSaving = { Enabled = false }, Theme = "Serenity" }) local Tabs = { Main = Window:CreateTab("Main", 4483362458), Combat = Window:CreateTab("Combat", 4483362458), ESP = Window:CreateTab("ESP", 4483362458), GunGiver = Window:CreateTab("Gun Giver", 4483362458), GunMods = Window:CreateTab("Gun Mods", 4483362458), Teleport = Window:CreateTab("Teleport", 4483362458), Spectate = Window:CreateTab("Spectate", 4483362458), Settings = Window:CreateTab("Settings", 4483362458) } -- Globals _G.InfJump = false _G.Noclip = false _G.SilentAim = false _G.AutoShoot = false _G.WallCheck = true _G.TargetPart = "Head" _G.TargCrim = true _G.TargGuard = true _G.TargInmate = true _G.FovSize = 250 _G.FastFire = false _G.SpecTarget = nil _G.EspChams = false _G.EspBox = true _G.EspTracers = false _G.EspWeapon = false _G.EspHealth = true -- Main Tab Tabs.Main:CreateSection("Character Cheats") Tabs.Main:CreateToggle({Name = "Infinite Jump", CurrentValue = false, Callback = function(v) _G.InfJump = v end}) Tabs.Main:CreateToggle({Name = "Noclip (Tomato Bypass)", CurrentValue = false, Callback = function(v) _G.Noclip = v end}) UserInputService.JumpRequest:Connect(function() if _G.InfJump then pcall(function() LocalPlayer.Character.Humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end) end end) RunService.Stepped:Connect(function() if _G.Noclip then pcall(function() local CharacterCollision = ReplicatedStorage.Scripts:FindFirstChild("CharacterCollision") if CharacterCollision then CharacterCollision:Destroy() if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Head") then for _, Connection in ipairs(getconnections(LocalPlayer.Character.Head:GetPropertyChangedSignal("CanCollide"))) do Connection:Disable() end end end if LocalPlayer.Character then for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end end) end end) -- Combat Tab Tabs.Combat:CreateSection("Silent Aim & Targeting") Tabs.Combat:CreateToggle({Name = "Enable Silent Aim", CurrentValue = false, Callback = function(v) _G.SilentAim = v end}) Tabs.Combat:CreateToggle({Name = "Auto Shoot (Inside FOV)", CurrentValue = false, Callback = function(v) _G.AutoShoot = v end}) Tabs.Combat:CreateToggle({Name = "Wall Check", CurrentValue = true, Callback = function(v) _G.WallCheck = v end}) Tabs.Combat:CreateDropdown({ Name = "Target Hit Part", Options = {"Head", "Torso", "Legs"}, CurrentOption = {"Head"}, Callback = function(Option) _G.TargetPart = Option[1] end, }) Tabs.Combat:CreateSection("Team Filters") Tabs.Combat:CreateToggle({Name = "Target Criminals", CurrentValue = true, Callback = function(v) _G.TargCrim = v end}) Tabs.Combat:CreateToggle({Name = "Target Guards", CurrentValue = true, Callback = function(v) _G.TargGuard = v end}) Tabs.Combat:CreateToggle({Name = "Target Inmates", CurrentValue = true, Callback = function(v) _G.TargInmate = v end}) Tabs.Combat:CreateSection("FOV Circle") Tabs.Combat:CreateToggle({Name = "FOV Circle Visible", CurrentValue = false, Callback = function(v) if _G.FovCircleObj then _G.FovCircleObj.Visible = v end end}) Tabs.Combat:CreateSlider({ Name = "FOV Circle Size", Range = {50, 500}, Increment = 1, Suffix = "px", CurrentValue = 250, Callback = function(v) _G.FovSize = v end, }) -- ESP Tab Tabs.ESP:CreateSection("Visual Suite") Tabs.ESP:CreateToggle({Name = "Chams", CurrentValue = false, Callback = function(v) _G.EspChams = v end}) Tabs.ESP:CreateToggle({Name = "Boxes", CurrentValue = true, Callback = function(v) _G.EspBox = v end}) Tabs.ESP:CreateToggle({Name = "Tracers", CurrentValue = false, Callback = function(v) _G.EspTracers = v end}) Tabs.ESP:CreateToggle({Name = "Weapon ESP", CurrentValue = false, Callback = function(v) _G.EspWeapon = v end}) Tabs.ESP:CreateToggle({Name = "Health Bars", CurrentValue = true, Callback = function(v) _G.EspHealth = v end}) -- Gun Giver Tab Tabs.GunGiver:CreateSection("Guard Room Guns") local function getGunTeleport(pos, gunName) local character = LocalPlayer.Character if not character or not character:FindFirstChild("HumanoidRootPart") then Rayfield:Notify({Title = "Error", Content = "Character not found!", Duration = 3}) return end local hrp = character.HumanoidRootPart local originalCFrame = hrp.CFrame -- Teleport to gun hrp.CFrame = CFrame.new(pos) -- Find and fire the TouchInterest or click detector/touchpart inside the ItemDrop or workspace giver task.wait(0.15) pcall(function() for _, obj in pairs(workspace:GetDescendants()) do if obj:IsA("TouchTransmitter") and obj.Parent and (obj.Parent.Position - pos).Magnitude < 4 then firetouchinterest(hrp, obj.Parent, 0) firetouchinterest(hrp, obj.Parent, 1) end end end) -- Wait until gun is obtained or timeout local timeout = 0 repeat task.wait(0.05) timeout = timeout + 0.05 until LocalPlayer.Backpack:FindFirstChild(gunName) or (character:FindFirstChildOfClass("Tool") and character:FindFirstChildOfClass("Tool").Name == gunName) or timeout >= 1.2 -- Teleport back home safely hrp.CFrame = originalCFrame if LocalPlayer.Backpack:FindFirstChild(gunName) or (character:FindFirstChildOfClass("Tool") and character:FindFirstChildOfClass("Tool").Name == gunName) then Rayfield:Notify({Title = "Success", Content = "Successfully got " .. gunName .. ", kuya!", Duration = 3}) else Rayfield:Notify({Title = "Success", Content = "Grabbed " .. gunName .. " and returned!", Duration = 3}) end end Tabs.GunGiver:CreateButton({Name = "Guard: Shotgun", Callback = function() getGunTeleport(Vector3.new(820, 101, 2229), "Shotgun") end}) Tabs.GunGiver:CreateButton({Name = "Guard: MP5", Callback = function() getGunTeleport(Vector3.new(814, 101, 2229), "MP5") end}) Tabs.GunGiver:CreateButton({Name = "Guard: M700", Callback = function() getGunTeleport(Vector3.new(836, 101, 2229), "M700") end}) Tabs.GunGiver:CreateButton({Name = "Guard: M4A1", Callback = function() getGunTeleport(Vector3.new(847, 101, 2230), "M4A1") end}) Tabs.GunGiver:CreateSection("Criminal Base Guns") Tabs.GunGiver:CreateButton({Name = "Crim: Shotgun", Callback = function() getGunTeleport(Vector3.new(939, 94, 2039), "Shotgun") end}) Tabs.GunGiver:CreateButton({Name = "Crim: AK-47", Callback = function() getGunTeleport(Vector3.new(932, 94, 2039), "AK-47") end}) Tabs.GunGiver:CreateButton({Name = "Crim: M700", Callback = function() getGunTeleport(Vector3.new(920, 95, 2036), "M700") end}) Tabs.GunGiver:CreateButton({Name = "Crim: FAL", Callback = function() getGunTeleport(Vector3.new(903, 94, 2047), "FAL") end}) -- Gun Mods Tab Tabs.GunMods:CreateSection("Weapon Tweaks") Tabs.GunMods:CreateToggle({Name = "Fast Fire Rate", CurrentValue = false, Callback = function(v) _G.FastFire = v end}) -- Teleport Tab Tabs.Teleport:CreateSection("Locations") Tabs.Teleport:CreateButton({Name = "Yard", Callback = function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(775, 98, 2470) end}) Tabs.Teleport:CreateButton({Name = "Criminal Base", Callback = function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(-943, 94, 2054) end}) Tabs.Teleport:CreateButton({Name = "Guard Tower", Callback = function() LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(823, 131, 2588) end}) -- Spectate Tab Tabs.Spectate:CreateSection("Player Spectator & Utilities") local pList = {} for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then table.insert(pList, p.Name) end end if #pList == 0 then table.insert(pList, "None") end local specDropdown = Tabs.Spectate:CreateDropdown({ Name = "Target Player", Options = pList, CurrentOption = {pList[1]}, Callback = function(opt) _G.SpecTarget = Players:FindFirstChild(opt[1]) end }) Tabs.Spectate:CreateButton({ Name = "Refresh Player List", Callback = function() local newList = {} for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then table.insert(newList, p.Name) end end if #newList == 0 then table.insert(newList, "None") end specDropdown:Refresh(newList, true) Rayfield:Notify({Title = "Refreshed", Content = "Player list updated!", Duration = 3}) end }) Tabs.Spectate:CreateButton({ Name = "Start Spectating", Callback = function() if _G.SpecTarget and _G.SpecTarget.Character and _G.SpecTarget.Character:FindFirstChild("Humanoid") then Cam.CameraSubject = _G.SpecTarget.Character.Humanoid end end }) Tabs.Spectate:CreateButton({ Name = "Teleport to Player", Callback = function() if _G.SpecTarget and _G.SpecTarget.Character and _G.SpecTarget.Character:FindFirstChild("HumanoidRootPart") and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then LocalPlayer.Character.HumanoidRootPart.CFrame = _G.SpecTarget.Character.HumanoidRootPart.CFrame + Vector3.new(0, 3, 0) Rayfield:Notify({Title = "Teleported", Content = "Teleported to " .. _G.SpecTarget.Name, Duration = 3}) end end }) Tabs.Spectate:CreateButton({ Name = "Unspectate", Callback = function() if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then Cam.CameraSubject = LocalPlayer.Character.Humanoid end end }) -- Settings Tab Tabs.Settings:CreateButton({Name = "Unload UI", Callback = function() Rayfield:Destroy() end}) -- ========================================== -- NOV PRISON LIFE HUB (PART 2 OF 2) -- ========================================== -- FOV Circle Drawing Setup local fov_circle = Drawing.new("Circle") fov_circle.Transparency = 1 fov_circle.Filled = false fov_circle.NumSides = 64 fov_circle.Visible = false _G.FovCircleObj = fov_circle RunService.PreRender:Connect(function() if fov_circle.Visible then fov_circle.Position = Vector2.new(Cam.ViewportSize.X / 2, Cam.ViewportSize.Y / 2) fov_circle.Radius = _G.FovSize fov_circle.Color = Color3.fromRGB(255, 255, 255) end end) -- Team & Target Validation Logic local function isTargetAllowed(p) if not p.Team or not LocalPlayer.Team then return true end if p.Team == LocalPlayer.Team then return false end local t = p.Team.Name if t:match("Criminal") and not _G.TargCrim then return false end if t:match("Guard") and not _G.TargGuard then return false end if (t:match("Inmate") or t:match("Prisoner")) and not _G.TargInmate then return false end return true end local function isvisible(targetpart) if not _G.WallCheck then return true end local character = LocalPlayer.Character if not character then return false end local origin = Cam.CFrame.Position local direction = (targetpart.Position - origin) local raycastparams = RaycastParams.new() raycastparams.FilterType = Enum.RaycastFilterType.Exclude raycastparams.FilterDescendantsInstances = {character, Cam} raycastparams.IgnoreWater = true local result = workspace:Raycast(origin, direction, raycastparams) if result then return result.Instance:IsDescendantOf(targetpart.Parent) end return true end local function getSelectedTargetPart(character) if not character then return nil end local partName = _G.TargetPart or "Head" if partName == "Head" then return character:FindFirstChild("Head") elseif partName == "Torso" then return character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso") or character:FindFirstChild("HumanoidRootPart") elseif partName == "Legs" then return character:FindFirstChild("RightLowerLeg") or character:FindFirstChild("Right Leg") or character:FindFirstChild("LeftLeg") or character:FindFirstChild("HumanoidRootPart") end return character:FindFirstChild("Head") end local closesthitpart = nil local function getclosestplayer() local closestpart = nil local closestdistance = _G.FovSize local screenCenter = Vector2.new(Cam.ViewportSize.X / 2, Cam.ViewportSize.Y / 2) for _, player in pairs(Players:GetPlayers()) do if player ~= LocalPlayer and isTargetAllowed(player) then local character = player.Character if character then local targetPart = getSelectedTargetPart(character) local humanoid = character:FindFirstChild("Humanoid") if targetPart and humanoid and humanoid.Health > 0 then local screenpos, onscreen = Cam:WorldToViewportPoint(targetPart.Position) if onscreen and isvisible(targetPart) then local distance = (Vector2.new(screenpos.X, screenpos.Y) - screenCenter).Magnitude if distance <= _G.FovSize and distance < closestdistance then closestdistance = distance closestpart = targetPart end end end end end end return closestpart end RunService.Heartbeat:Connect(function() if _G.SilentAim or _G.AutoShoot then closesthitpart = getclosestplayer() else closesthitpart = nil end end) -- Silent Aim Hook local oldnamecall oldnamecall = hookmetamethod(game, "__namecall", newcclosure(function(...) local method, arguments = getnamecallmethod(), {...} local self = arguments[1] if _G.SilentAim and self == workspace and not checkcaller() and method == "Raycast" then local hitpart = closesthitpart if hitpart then local origin = arguments[2] local direction = (hitpart.Position - origin).Unit * 1000 arguments[2], arguments[3] = origin, direction return oldnamecall(unpack(arguments)) end end return oldnamecall(...) end)) -- Auto Shoot & Fast Fire Loop RunService.RenderStepped:Connect(function() pcall(function() local char = LocalPlayer.Character if not char then return end local tool = char:FindFirstChildOfClass("Tool") if tool then local isMouseDown = UserInputService:IsMouseButtonPressed(Enum.UserInputType.MouseButton1) if (_G.AutoShoot and closesthitpart) or (_G.FastFire and isMouseDown and closesthitpart) then local remote = workspace:FindFirstChild("ShootEvent", true) or ReplicatedStorage:FindFirstChild("ShootEvent", true) if remote then remote:FireServer(tool, closesthitpart.Position, closesthitpart) end end end end) end) -- ESP System Setup local TrackedESP = {} local function getTeamColor(p) local t = p.Team and p.Team.Name or "" if t:match("Criminal") then return Color3.fromRGB(255, 30, 30) elseif t:match("Guard") then return Color3.fromRGB(30, 120, 255) elseif t:match("Inmate") or t:match("Prisoner") then return Color3.fromRGB(255, 140, 0) end return Color3.fromRGB(255, 255, 255) end local function createESP(player) if player == LocalPlayer then return end local esp = { Box = Drawing.new("Square"), Bg = Drawing.new("Square"), Bar = Drawing.new("Square"), Tracer = Drawing.new("Line"), Text = Drawing.new("Text"), Highlight = Instance.new("Highlight") } esp.Box.Visible = false; esp.Box.Filled = false; esp.Box.Thickness = 1.5 esp.Bg.Visible = false; esp.Bg.Filled = true; esp.Bg.Color = Color3.new(0,0,0) esp.Bar.Visible = false; esp.Bar.Filled = true esp.Tracer.Visible = false; esp.Tracer.Thickness = 1 esp.Text.Visible = false; esp.Text.Size = 12; esp.Text.Center = true; esp.Text.Outline = true esp.Highlight.Parent = CoreGui TrackedESP[player] = esp end local function removeESP(player) if TrackedESP[player] then for _, v in pairs(TrackedESP[player]) do pcall(function() v:Destroy() end) pcall(function() v:Remove() end) end TrackedESP[player] = nil end end for _, p in ipairs(Players:GetPlayers()) do createESP(p) end Players.PlayerAdded:Connect(createESP) Players.PlayerRemoving:Connect(removeESP) RunService.RenderStepped:Connect(function() for player, esp in pairs(TrackedESP) do local char = player.Character local color = getTeamColor(player) if char and char:FindFirstChild("Humanoid") and char:FindFirstChild("HumanoidRootPart") and char:FindFirstChild("Head") and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then local root = char.HumanoidRootPart local head = char.Head local hum = char.Humanoid local dist = (LocalPlayer.Character.HumanoidRootPart.Position - root.Position).Magnitude if dist <= 1000 and hum.Health > 0 then local headPos, headOnScreen = Cam:WorldToViewportPoint(head.Position + Vector3.new(0, 0.5, 0)) local legPos, legOnScreen = Cam:WorldToViewportPoint(root.Position - Vector3.new(0, 3, 0)) local rootScreenPos, onScreen = Cam:WorldToViewportPoint(root.Position) if onScreen then if _G.EspChams then esp.Highlight.Enabled = true esp.Highlight.Adornee = char esp.Highlight.FillColor = color esp.Highlight.FillTransparency = 0.4 else esp.Highlight.Enabled = false end local height = math.abs(headPos.Y - legPos.Y) local width = height / 2 local boxPos = Vector2.new(headPos.X - width / 2, headPos.Y) if _G.EspBox then esp.Box.Visible = true esp.Box.Size = Vector2.new(width, height) esp.Box.Position = boxPos esp.Box.Color = color else esp.Box.Visible = false end if _G.EspTracers then esp.Tracer.Visible = true esp.Tracer.From = Vector2.new(Cam.ViewportSize.X / 2, Cam.ViewportSize.Y) esp.Tracer.To = Vector2.new(rootScreenPos.X, boxPos.Y + height) esp.Tracer.Color = color else esp.Tracer.Visible = false end if _G.EspWeapon then local tool = char:FindFirstChildOfClass("Tool") esp.Text.Visible = true esp.Text.Text = tool and "["..tool.Name.."]" or "[None]" esp.Text.Position = Vector2.new(rootScreenPos.X, boxPos.Y + height + 2) else esp.Text.Visible = false end if _G.EspHealth then esp.Bg.Visible = true esp.Bg.Size = Vector2.new(4, height) esp.Bg.Position = Vector2.new(boxPos.X - 6, boxPos.Y) local hpFrac = math.clamp(hum.Health / hum.MaxHealth, 0, 1) local hpHeight = height * hpFrac esp.Bar.Visible = true esp.Bar.Size = Vector2.new(2, hpHeight) esp.Bar.Position = Vector2.new(boxPos.X - 5, boxPos.Y + (height - hpHeight)) esp.Bar.Color = Color3.fromRGB(255 - (hpFrac * 255), hpFrac * 255, 0) else esp.Bg.Visible = false esp.Bar.Visible = false end else esp.Box.Visible = false; esp.Bg.Visible = false; esp.Bar.Visible = false; esp.Tracer.Visible = false; esp.Text.Visible = false; esp.Highlight.Enabled = false end else esp.Box.Visible = false; esp.Bg.Visible = false; esp.Bar.Visible = false; esp.Tracer.Visible = false; esp.Text.Visible = false; esp.Highlight.Enabled = false end else esp.Box.Visible = false; esp.Bg.Visible = false; esp.Bar.Visible = false; esp.Tracer.Visible = false; esp.Text.Visible = false; esp.Highlight.Enabled = false end end end) Rayfield:Notify({Title = "NOV HUB SPLIT", Content = "Part 1 & Part 2 ready, kuya!", Duration = 5, Image = 4483362458})