--[[ ╔══════════════════════════════════════════════════════════════╗ ║ Axiom menu ║ ║ Role ESP + Noclip + Aim + Auto-Give + Humanoid + Arrest ║ ║ + Teleport (Presets) + Go-To Players ║ ╠══════════════════════════════════════════════════════════════╣ ║ Version: 3.2.0 ║ ║ • Added Teleport tab (presets + saved locations) ║ ║ • Added Go-To Players tab (grouped by role + distance) ║ ╚══════════════════════════════════════════════════════════════╝ ]] local VERSION = "3.2.0" local SAFE_MODE = false -- ══════════════════════════════════════════════════════════════════ -- BOOT -- ══════════════════════════════════════════════════════════════════ local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local Workspace = game:GetService("Workspace") local LocalPlayer = Players.LocalPlayer if not LocalPlayer then repeat task.wait(0.1) until Players.LocalPlayer LocalPlayer = Players.LocalPlayer end repeat task.wait() until game:IsLoaded() print(string.format("[PrisonVision v%s] Loading...", VERSION)) local Camera = Workspace.CurrentCamera -- ══════════════════════════════════════════════════════════════════ -- GLOBAL STATE -- ══════════════════════════════════════════════════════════════════ local Flags = { -- ESP ["ESP/Enabled"] = true, ["ESP/ShowUsername"] = true, ["ESP/TeamCheck"] = false, ["ESP/MaxDistance"] = 5000, ["ESP/ColorByRole"] = true, ["ESP/NametagOpacity"] = 0, ["ESP/HighlightEnabled"] = true, ["ESP/HighlightFillAlpha"] = 0.75, ["ESP/HighlightOutlineAlpha"] = 0.35, ["ESP/HealthIndicator"] = true, ["ESP/ShowDistance"] = true, ["ESP/ShowEquipped"] = true, -- Noclip ["Noclip/Enabled"] = false, ["Noclip/Radius"] = 300, ["Noclip/IncludeAnchored"] = true, ["Noclip/IncludeUnanchored"] = false, -- Aim ["Aim/AimLock"] = false, ["Aim/TeamCheck"] = false, ["Aim/VisibilityCheck"] = true, ["Aim/AttractionStrength"] = 200, ["Aim/FOV/Radius"] = 100, ["Aim/FOV/ShowCircle"] = true, ["Aim/Dampening"] = true, ["Aim/Dampening/Threshold"] = 5, ["Aim/Dampening/Strength"] = 5, ["Aim/Priority"] = "Head", ["Aim/BodyParts"] = {"Head"}, ["Aim/TargetGroups"] = { Head = true, Torso = false, LeftArm = false, RightArm = false, LeftLeg = false, RightLeg = false, }, -- Auto-Give ["AutoGive/Enabled"] = true, -- Arrest ["Arrest/Enabled"] = true, ["Arrest/StickDistance"] = 2.2, ["Arrest/StickHeight"] = 0.0, ["Arrest/StickDuration"] = 5.0, ["Arrest/ToolName"] = "Handcuffs", ["Arrest/RestorePosition"] = true, -- Humanoid (values start nil; captured on spawn) ["Humanoid/WalkSpeed"] = nil, ["Humanoid/JumpPower"] = nil, ["Humanoid/JumpHeight"] = nil, ["Humanoid/HipHeight"] = nil, ["Humanoid/MaxHealth"] = nil, ["Humanoid/WalkSpeed/Locked"] = false, ["Humanoid/JumpPower/Locked"] = false, ["Humanoid/JumpHeight/Locked"] = false, ["Humanoid/HipHeight/Locked"] = false, ["Humanoid/MaxHealth/Locked"] = false, } -- ══════════════════════════════════════════════════════════════════ -- TELEPORT SAVED LOCATIONS (persistent in this session) -- ══════════════════════════════════════════════════════════════════ local SavedLocations = {} local function SaveLocationsToDisk() if not writefile then return end local ok, encoded = pcall(function() return game:GetService("HttpService"):JSONEncode(SavedLocations) end) if ok and encoded then pcall(function() writefile("PrisonVision_Locations.json", encoded) end) end end local function LoadLocationsFromDisk() if not (isfile and readfile) then return end local ok = pcall(function() if isfile("PrisonVision_Locations.json") then local raw = readfile("PrisonVision_Locations.json") local decoded = game:GetService("HttpService"):JSONDecode(raw) if type(decoded) == "table" then SavedLocations = decoded end end end) end LoadLocationsFromDisk() -- ══════════════════════════════════════════════════════════════════ -- THEME -- ══════════════════════════════════════════════════════════════════ local THEME = { Background = Color3.fromRGB(16, 16, 18), Sidebar = Color3.fromRGB(22, 22, 26), Element = Color3.fromRGB(32, 32, 38), Accent = Color3.fromRGB(255, 140, 60), Text = Color3.fromRGB(235, 235, 240), TextDark = Color3.fromRGB(140, 140, 150), Success = Color3.fromRGB(70, 210, 120), Fail = Color3.fromRGB(230, 70, 70), } local ROLE_COLORS = { Guard = Color3.fromRGB(70, 150, 255), Inmate = Color3.fromRGB(255, 150, 60), Criminal = Color3.fromRGB(230, 60, 60), Neutral = Color3.fromRGB(200, 200, 210), Unknown = Color3.fromRGB(180, 180, 190), } -- ══════════════════════════════════════════════════════════════════ -- UTILITY -- ══════════════════════════════════════════════════════════════════ local function SafeSet(obj, prop, val) if not obj then return false end local ok = pcall(function() if obj[prop] ~= val then obj[prop] = val end end) return ok end local function SafeDestroy(obj) if obj then pcall(function() obj:Destroy() end) end end -- ══════════════════════════════════════════════════════════════════ -- ROLE DETECTION -- ══════════════════════════════════════════════════════════════════ local function DetectRole(player) if not player or not player.Parent then return "Unknown" end local team = player.Team if team then local name = string.lower(team.Name) if name:find("guard") or name:find("police") or name:find("cop") or name:find("officer") then return "Guard" elseif name:find("inmate") or name:find("prisoner") then return "Inmate" elseif name:find("criminal") or name:find("escapee") or name:find("wanted") then return "Criminal" elseif name:find("neutral") or name:find("civilian") then return "Neutral" end local ok, color = pcall(function() return team.TeamColor.Color end) if ok and color then local r, g, b = color.R, color.G, color.B if b > 0.6 and r < 0.4 and g < 0.6 then return "Guard" elseif r > 0.7 and g > 0.4 and g < 0.8 and b < 0.4 then return "Inmate" elseif r > 0.7 and g < 0.4 and b < 0.4 then return "Criminal" elseif r > 0.6 and g > 0.6 and b > 0.6 then return "Neutral" end end end return "Unknown" end local function IsLocalGuard() local role = DetectRole(LocalPlayer) return role == "Guard" end -- ══════════════════════════════════════════════════════════════════ -- HEALTH HELPERS -- ══════════════════════════════════════════════════════════════════ local function GetHealth(player) if not player then return 0, 100 end local char = player.Character if not char then return 0, 100 end local hum = char:FindFirstChildOfClass("Humanoid") if hum then return hum.Health, hum.MaxHealth end return 0, 100 end local function GetHealthColor(health, maxHealth) if not maxHealth or maxHealth <= 0 then return Color3.fromRGB(255, 255, 255) end local percent = math.clamp(health / maxHealth, 0, 1) if percent >= 0.75 then return Color3.fromRGB(70, 220, 100) elseif percent >= 0.50 then return Color3.fromRGB(180, 220, 70) elseif percent >= 0.25 then return Color3.fromRGB(255, 180, 50) else return Color3.fromRGB(230, 60, 60) end end -- ══════════════════════════════════════════════════════════════════ -- PLAYER CACHE & CHAR CACHE -- ══════════════════════════════════════════════════════════════════ local cachedPlayersList = Players:GetPlayers() local function GetPlayersCache() return cachedPlayersList end local function UpdatePlayerCache() cachedPlayersList = Players:GetPlayers() end local CharCache = {} local function GetCharacter(player) if not player then return nil end local cache = CharCache[player] if cache then local char = cache.Char local root = cache.Root if char and char.Parent and char == player.Character and root and root.Parent then if cache.Humanoid then if cache.Humanoid.Health > 0 then return char, root end return nil end return char, root else cache.Char = nil cache.Root = nil cache.Humanoid = nil end end local character = player.Character if not character or not character.Parent then return nil end local rootPart = character:FindFirstChild("HumanoidRootPart") or character.PrimaryPart if not rootPart then return nil end local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Health <= 0 then return nil end if not cache then cache = {} CharCache[player] = cache end cache.Char = character cache.Root = rootPart cache.Humanoid = humanoid cache.Head = character:FindFirstChild("Head") return character, rootPart end -- ══════════════════════════════════════════════════════════════════ -- HUMANOID STATE (capture only — never force defaults) -- ══════════════════════════════════════════════════════════════════ local HumanoidState = { Original = {}, Captured = false } local HUMANOID_PROPERTY_MAP = { ["Humanoid/WalkSpeed"] = "WalkSpeed", ["Humanoid/JumpPower"] = "JumpPower", ["Humanoid/JumpHeight"] = "JumpHeight", ["Humanoid/HipHeight"] = "HipHeight", ["Humanoid/MaxHealth"] = "MaxHealth", } local function CaptureHumanoidSettings() local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if not hum then return end HumanoidState.Original = {} for flagKey, prop in pairs(HUMANOID_PROPERTY_MAP) do local ok, val = pcall(function() return hum[prop] end) if ok and val ~= nil then HumanoidState.Original[flagKey] = val local isLocked = Flags[flagKey .. "/Locked"] == true if not isLocked and Flags[flagKey] == nil then Flags[flagKey] = val end end end HumanoidState.Captured = true end local function ApplySavedHumanoidSettings() local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if not hum then return end for flagKey, prop in pairs(HUMANOID_PROPERTY_MAP) do local val = Flags[flagKey] local isLocked = Flags[flagKey .. "/Locked"] == true local origVal = HumanoidState.Original[flagKey] if isLocked or (val ~= nil and origVal ~= nil and val ~= origVal) then pcall(function() if hum[prop] ~= val then hum[prop] = val end end) end end end local function ApplyHumanoidSettings() if not HumanoidState.Captured then return end local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if not hum then return end for flagKey, prop in pairs(HUMANOID_PROPERTY_MAP) do local isLocked = Flags[flagKey .. "/Locked"] == true if isLocked then local val = Flags[flagKey] if val ~= nil then pcall(function() if hum[prop] ~= val then hum[prop] = val end end) end end end end -- ══════════════════════════════════════════════════════════════════ -- AIM SYSTEM -- ══════════════════════════════════════════════════════════════════ local TARGET_GROUPS = { Head = {"Head"}, Torso = {"Torso", "UpperTorso", "LowerTorso", "HumanoidRootPart"}, LeftArm = {"Left Arm", "LeftUpperArm", "LeftLowerArm", "LeftHand"}, RightArm = {"Right Arm", "RightUpperArm", "RightLowerArm", "RightHand"}, LeftLeg = {"Left Leg", "LeftUpperLeg", "LeftLowerLeg", "LeftFoot"}, RightLeg = {"Right Leg", "RightUpperLeg", "RightLowerLeg", "RightFoot"}, } local ALL_BODY_PARTS = {} for _, group in pairs(TARGET_GROUPS) do for _, part in ipairs(group) do table.insert(ALL_BODY_PARTS, part) end end local AimState = { LastAimTarget = nil, LastMouseMode = nil, LastOriginX = nil, LastOriginY = nil, } local function ClearAimLockState(resetMouseMode) AimState.LastAimTarget = nil AimState.LastOriginX = nil AimState.LastOriginY = nil if resetMouseMode then AimState.LastMouseMode = nil end end local CachedFilterType = (function() local ok, val = pcall(function() local ft = Enum.RaycastFilterType.Exclude if typeof(ft) == "EnumItem" then return ft end end) if ok and val then return val end ok, val = pcall(function() local ft = Enum.RaycastFilterType.Blacklist if typeof(ft) == "EnumItem" then return ft end end) if ok and val then return val end return nil end)() local SharedRaycastParams = RaycastParams.new() SharedRaycastParams.IgnoreWater = true if CachedFilterType then SharedRaycastParams.FilterType = CachedFilterType end local function Raycast(Origin, Direction, Filter) SharedRaycastParams.FilterDescendantsInstances = Filter return Workspace:Raycast(Origin, Direction, SharedRaycastParams) end local OcclusionFilter = {nil, nil} local function ObjectOccluded(Enabled, Origin, Position, Object) if not Enabled then return false end if typeof(Position) ~= "Vector3" then return false end OcclusionFilter[1] = LocalPlayer.Character OcclusionFilter[2] = Object local hit = Raycast(Origin, Position - Origin, OcclusionFilter) if hit and hit.Instance and not hit.Instance:IsDescendantOf(Object) then return true end return false end local ViewportCache = {} local ViewportPool = {} local MAX_VIEWPORT_POOL = 64 local _vp_floor = math.floor RunService.RenderStepped:Connect(function() local recycled = 0 for _, entry in pairs(ViewportCache) do if recycled < MAX_VIEWPORT_POOL then ViewportPool[#ViewportPool + 1] = entry recycled = recycled + 1 end end table.clear(ViewportCache) end) local function GetViewportPoint(worldPos) local kx = _vp_floor(worldPos.X * 4) local ky = _vp_floor(worldPos.Y * 4) local kz = _vp_floor(worldPos.Z * 4) local key = kx .. "|" .. ky .. "|" .. kz local entry = ViewportCache[key] if entry then return entry[1], entry[2] end local screenPos, onScreen = Camera:WorldToViewportPoint(worldPos) entry = table.remove(ViewportPool) or {} entry[1], entry[2] = screenPos, onScreen ViewportCache[key] = entry return screenPos, onScreen end local function GetCrosshairViewportPosition(mouseBehavior) if not Camera then Camera = Workspace.CurrentCamera end if not Camera then return nil, nil, false end local viewportSize = Camera.ViewportSize if mouseBehavior == Enum.MouseBehavior.LockCenter then return viewportSize.X * 0.5, viewportSize.Y * 0.5, true end local mouseLoc = UserInputService:GetMouseLocation() local crosshairX = mouseLoc.X local crosshairY = mouseLoc.Y if crosshairX ~= crosshairX or crosshairY ~= crosshairY then return nil, nil, false end if crosshairX < 0 or crosshairY < 0 or crosshairX > viewportSize.X or crosshairY > viewportSize.Y then return nil, nil, false end return crosshairX, crosshairY, true end local CandidateList = {} local CandidateCount = 0 local MAX_CANDIDATES = 15 local ClosestResult = {nil, nil, nil, 0, 0, nil} local function CandidateSortFn(a, b) return a.mag < b.mag end local function BoundedInsertionSort(array, count, compare) for i = 2, count do local key = array[i] local j = i - 1 while j > 0 and compare(key, array[j]) do array[j + 1] = array[j] j = j - 1 end array[j + 1] = key end end local _hoistedCheckParts = {} local _lastTargetGroupsHash = nil local function RebuildCheckParts() table.clear(_hoistedCheckParts) local anySelected = false for category, enabled in pairs(Flags["Aim/TargetGroups"]) do if enabled then anySelected = true for _, partName in ipairs(TARGET_GROUPS[category]) do table.insert(_hoistedCheckParts, partName) end end end if not anySelected then for _, partName in ipairs(ALL_BODY_PARTS) do table.insert(_hoistedCheckParts, partName) end end end local function GetClosest(Enabled, TeamCheck, VisibilityCheck, FieldOfView, StickyTarget) if not Enabled then return nil end local CameraPosition = Camera.CFrame.Position local mouseBehavior = UserInputService.MouseBehavior local crosshairX, crosshairY, crosshairValid = GetCrosshairViewportPosition(mouseBehavior) if not crosshairValid then return nil end CandidateCount = 0 local players = GetPlayersCache() local lookVector = Camera.CFrame.LookVector local maxCandsLimit = MAX_CANDIDATES * 3 local currentHash = (Flags["Aim/TargetGroups"].Head and 1 or 0) + (Flags["Aim/TargetGroups"].Torso and 2 or 0) + (Flags["Aim/TargetGroups"].LeftArm and 4 or 0) + (Flags["Aim/TargetGroups"].RightArm and 8 or 0) + (Flags["Aim/TargetGroups"].LeftLeg and 16 or 0) + (Flags["Aim/TargetGroups"].RightLeg and 32 or 0) if currentHash ~= _lastTargetGroupsHash then RebuildCheckParts() _lastTargetGroupsHash = currentHash end local checkParts = _hoistedCheckParts for _, Player in ipairs(players) do if Player == LocalPlayer then continue end local Character, RootPart = GetCharacter(Player) if not Character or not RootPart then continue end if TeamCheck then local lpTeam, pTeam = LocalPlayer.Team, Player.Team if lpTeam and pTeam and lpTeam == pTeam then continue end end local rootPos = RootPart.Position local relPos = rootPos - CameraPosition if lookVector:Dot(relPos) < 0 then continue end for _, PartName in ipairs(checkParts) do local cache = CharCache[Player] local BodyPart = (cache and cache[PartName]) or Character:FindFirstChild(PartName) if not BodyPart then continue end local ActualPosition = BodyPart.Position local ScreenPosition, OnScreen = GetViewportPoint(ActualPosition) if OnScreen then local screenX, screenY = ScreenPosition.X, ScreenPosition.Y local dx, dy = screenX - crosshairX, screenY - crosshairY local Magnitude = math.sqrt(dx * dx + dy * dy) if Magnitude < FieldOfView then if CandidateCount < maxCandsLimit then CandidateCount = CandidateCount + 1 local entry = CandidateList[CandidateCount] if not entry then entry = {} CandidateList[CandidateCount] = entry end entry.mag = Magnitude entry.ply = Player entry.char = Character entry.part = BodyPart entry.sx = screenX entry.sy = screenY entry.pos = ActualPosition entry.realPos = ActualPosition end end end end end if CandidateCount == 0 then return nil end if CandidateCount > 1 then BoundedInsertionSort(CandidateList, CandidateCount, CandidateSortFn) end if StickyTarget then for i = 1, CandidateCount do local entry = CandidateList[i] if entry.ply == StickyTarget then if not ObjectOccluded(VisibilityCheck, CameraPosition, entry.realPos, entry.char) then ClosestResult[1] = entry.ply ClosestResult[2] = entry.char ClosestResult[3] = entry.part ClosestResult[4] = entry.sx ClosestResult[5] = entry.sy ClosestResult[6] = entry.pos return ClosestResult end break end end end local limit = math.min(CandidateCount, MAX_CANDIDATES) for i = 1, limit do local entry = CandidateList[i] if not entry then continue end if ObjectOccluded(VisibilityCheck, CameraPosition, entry.realPos, entry.char) then continue end ClosestResult[1] = entry.ply ClosestResult[2] = entry.char ClosestResult[3] = entry.part ClosestResult[4] = entry.sx ClosestResult[5] = entry.sy ClosestResult[6] = entry.pos return ClosestResult end return nil end local function AimAt(Hitbox) if not Hitbox then ClearAimLockState(false) return end if not mousemoverel then return end local targetPart = Hitbox[3] if not targetPart or not targetPart.Parent then ClearAimLockState(false) return end local currentMode = UserInputService.MouseBehavior if currentMode ~= AimState.LastMouseMode then AimState.LastMouseMode = currentMode AimState.LastOriginX = nil AimState.LastOriginY = nil end local currentTarget = Hitbox[1] if currentTarget ~= AimState.LastAimTarget then AimState.LastAimTarget = currentTarget AimState.LastOriginX = nil AimState.LastOriginY = nil end local targetPos = targetPart.Position local cameraPos = Camera.CFrame.Position local dist = (targetPos - cameraPos).Magnitude if dist < 1 then return end local ScreenPosition, OnScreen = GetViewportPoint(targetPos) if not OnScreen or ScreenPosition.Z <= 0 then return end local viewportSize = Camera.ViewportSize local originX, originY, originValid = GetCrosshairViewportPosition(currentMode) if not originValid then return end AimState.LastOriginX = originX AimState.LastOriginY = originY local targetX, targetY = ScreenPosition.X, ScreenPosition.Y local dx, dy = targetX - originX, targetY - originY local mag = math.sqrt(dx * dx + dy * dy) if mag > Flags["Aim/FOV/Radius"] then return end local attractionMultiplier = Flags["Aim/AttractionStrength"] / 100 if Flags["Aim/Dampening"] then local lockThreshold = Flags["Aim/Dampening/Threshold"] if mag < lockThreshold then local dampening = math.max(Flags["Aim/Dampening/Strength"] / 100, mag / lockThreshold) attractionMultiplier = attractionMultiplier * dampening end end local BASE_PULL = 0.2 local deltaX = dx * BASE_PULL * attractionMultiplier local deltaY = dy * BASE_PULL * attractionMultiplier if deltaX ~= deltaX or deltaY ~= deltaY then return end local maxClampX = viewportSize.X * 0.5 local maxClampY = viewportSize.Y * 0.5 deltaX = math.clamp(deltaX, -maxClampX, maxClampX) deltaY = math.clamp(deltaY, -maxClampY, maxClampY) mousemoverel(math.floor(deltaX + 0.5), math.floor(deltaY + 0.5)) end local CachedTarget = nil local CachedTargetTime = 0 local TARGET_CACHE_DURATION = 0.016 local function GetCachedTarget() local now = os.clock() if CachedTarget and (now - CachedTargetTime) < TARGET_CACHE_DURATION then return CachedTarget end CachedTarget = GetClosest( true, Flags["Aim/TeamCheck"], Flags["Aim/VisibilityCheck"], Flags["Aim/FOV/Radius"], AimState.LastAimTarget ) CachedTargetTime = now return CachedTarget end local FovCircleGui = nil local FovCircleFrame = nil local function EnsureFovCircleGui() if FovCircleGui and FovCircleGui.Parent then return FovCircleGui end local parent = gethui and gethui() or game:GetService("CoreGui") FovCircleGui = Instance.new("ScreenGui") FovCircleGui.Name = "PrisonVision_FOV" FovCircleGui.DisplayOrder = 5000 FovCircleGui.IgnoreGuiInset = true FovCircleGui.ResetOnSpawn = false FovCircleGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling pcall(function() FovCircleGui.Parent = parent end) if not FovCircleGui.Parent then FovCircleGui.Parent = game:GetService("CoreGui") end return FovCircleGui end local function UpdateFOVCircle() local showCircle = Flags["Aim/AimLock"] and Flags["Aim/FOV/ShowCircle"] if not showCircle then if FovCircleFrame then FovCircleFrame.Visible = false end return end local gui = EnsureFovCircleGui() if not FovCircleFrame or FovCircleFrame.Parent ~= gui then if FovCircleFrame then SafeDestroy(FovCircleFrame) end FovCircleFrame = Instance.new("Frame") FovCircleFrame.Name = "FOVCircle" FovCircleFrame.BackgroundTransparency = 1 FovCircleFrame.BorderSizePixel = 0 FovCircleFrame.AnchorPoint = Vector2.new(0.5, 0.5) FovCircleFrame.ZIndex = 1 local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(1, 0); corner.Parent = FovCircleFrame local stroke = Instance.new("UIStroke") stroke.Name = "Stroke" stroke.Thickness = 1.5 stroke.Color = THEME.Accent stroke.Transparency = 0.2 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = FovCircleFrame FovCircleFrame.Parent = gui end local currentMode = UserInputService.MouseBehavior local crosshairX, crosshairY, crosshairValid = GetCrosshairViewportPosition(currentMode) if crosshairValid then local radius = Flags["Aim/FOV/Radius"] or 50 local diameter = radius * 2 FovCircleFrame.Size = UDim2.fromOffset(diameter, diameter) FovCircleFrame.Position = UDim2.fromOffset(crosshairX, crosshairY) FovCircleFrame.Visible = true else FovCircleFrame.Visible = false end end local function UpdateAim() pcall(UpdateFOVCircle) if SAFE_MODE then return end local AimActive = Flags["Aim/AimLock"] if not AimActive then ClearAimLockState(false) return end local target = GetCachedTarget() if target then AimAt(target) else ClearAimLockState(false) end end -- ══════════════════════════════════════════════════════════════════ -- ESP SYSTEM -- ══════════════════════════════════════════════════════════════════ local ESP = { Objects = {}, Folder = nil } local function EnsureESPFolder() if ESP.Folder and ESP.Folder.Parent then return ESP.Folder end local parent = gethui and gethui() or game:GetService("CoreGui") ESP.Folder = Instance.new("Folder") ESP.Folder.Name = "PrisonVision_ESP" pcall(function() ESP.Folder.Parent = parent end) if not ESP.Folder.Parent then ESP.Folder.Parent = game:GetService("CoreGui") end return ESP.Folder end local function CreateNametag(player) local folder = EnsureESPFolder() local billboard = Instance.new("BillboardGui") billboard.Name = "PV_" .. player.Name billboard.Adornee = nil billboard.AlwaysOnTop = true billboard.Size = UDim2.new(0, 200, 0, 90) billboard.StudsOffset = Vector3.new(0, 3.2, 0) billboard.MaxDistance = Flags["ESP/MaxDistance"] billboard.Enabled = false billboard.Parent = folder local layout = Instance.new("UIListLayout") layout.FillDirection = Enum.FillDirection.Vertical layout.HorizontalAlignment = Enum.HorizontalAlignment.Center layout.VerticalAlignment = Enum.VerticalAlignment.Bottom layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 1) layout.Parent = billboard local label = Instance.new("TextLabel") label.Name = "NameLabel" label.Size = UDim2.new(1, 0, 0, 18) label.BackgroundTransparency = 1 label.Text = player.Name label.TextColor3 = ROLE_COLORS.Unknown label.TextStrokeTransparency = 0 label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) label.TextSize = 14 label.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) label.TextTransparency = Flags["ESP/NametagOpacity"] label.LayoutOrder = 1 label.Parent = billboard local healthNum = Instance.new("TextLabel") healthNum.Name = "HealthNum" healthNum.Size = UDim2.new(1, 0, 0, 16) healthNum.BackgroundTransparency = 1 healthNum.Text = "100/100" healthNum.TextColor3 = Color3.fromRGB(255, 255, 255) healthNum.TextStrokeTransparency = 0 healthNum.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) healthNum.TextSize = 13 healthNum.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) healthNum.TextTransparency = Flags["ESP/NametagOpacity"] healthNum.LayoutOrder = 2 healthNum.Visible = Flags["ESP/HealthIndicator"] healthNum.Parent = billboard local healthBarBG = Instance.new("Frame") healthBarBG.Name = "HealthBarBG" healthBarBG.Size = UDim2.new(0.7, 0, 0, 5) healthBarBG.BackgroundColor3 = Color3.fromRGB(200, 50, 50) healthBarBG.BorderSizePixel = 0 healthBarBG.LayoutOrder = 3 healthBarBG.Visible = Flags["ESP/HealthIndicator"] healthBarBG.Parent = billboard local hbCorner = Instance.new("UICorner") hbCorner.CornerRadius = UDim.new(1, 0); hbCorner.Parent = healthBarBG local healthBarFill = Instance.new("Frame") healthBarFill.Name = "HealthBarFill" healthBarFill.Size = UDim2.fromScale(1, 1) healthBarFill.BackgroundColor3 = Color3.fromRGB(70, 220, 100) healthBarFill.BorderSizePixel = 0 healthBarFill.Parent = healthBarBG local hbfCorner = Instance.new("UICorner") hbfCorner.CornerRadius = UDim.new(1, 0); hbfCorner.Parent = healthBarFill local distanceLabel = Instance.new("TextLabel") distanceLabel.Name = "DistanceLabel" distanceLabel.Size = UDim2.new(1, 0, 0, 16) distanceLabel.BackgroundTransparency = 1 distanceLabel.Text = "0" distanceLabel.TextColor3 = Color3.fromRGB(200, 200, 200) distanceLabel.TextStrokeTransparency = 0 distanceLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) distanceLabel.TextSize = 12 distanceLabel.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) distanceLabel.TextTransparency = Flags["ESP/NametagOpacity"] distanceLabel.LayoutOrder = 4 distanceLabel.Visible = Flags["ESP/ShowDistance"] distanceLabel.Parent = billboard local equippedLabel = Instance.new("TextLabel") equippedLabel.Name = "EquippedLabel" equippedLabel.Size = UDim2.new(1, 0, 0, 16) equippedLabel.BackgroundTransparency = 1 equippedLabel.Text = "[Unarmed]" equippedLabel.TextColor3 = Color3.fromRGB(200, 200, 200) equippedLabel.TextStrokeTransparency = 0 equippedLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) equippedLabel.TextSize = 12 equippedLabel.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) equippedLabel.TextTransparency = Flags["ESP/NametagOpacity"] equippedLabel.LayoutOrder = 5 equippedLabel.Visible = Flags["ESP/ShowEquipped"] equippedLabel.Parent = billboard local highlight = Instance.new("Highlight") highlight.Name = "PV_HL_" .. player.Name highlight.Adornee = nil highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.FillColor = ROLE_COLORS.Unknown highlight.FillTransparency = Flags["ESP/HighlightFillAlpha"] highlight.OutlineColor = ROLE_COLORS.Unknown highlight.OutlineTransparency = Flags["ESP/HighlightOutlineAlpha"] highlight.Enabled = false highlight.Parent = folder ESP.Objects[player] = { Nametag = billboard, Label = label, HealthNum = healthNum, HealthBarBG = healthBarBG, HealthBarFill= healthBarFill, DistanceLabel= distanceLabel, EquippedLabel= equippedLabel, Highlight = highlight, LastName = player.Name, LastRole = nil, LastHealth = -1, LastMaxHealth= -1, LastDistance = -1, LastEquipped = "", } end local function RemoveNametag(player) local data = ESP.Objects[player] if not data then return end SafeDestroy(data.Nametag) if data.Highlight then SafeDestroy(data.Highlight) end ESP.Objects[player] = nil end local function UpdateNametag(player) local data = ESP.Objects[player] if not data then return end local shouldShow = Flags["ESP/Enabled"] if shouldShow and Flags["ESP/TeamCheck"] then if player.Team and LocalPlayer.Team and player.Team == LocalPlayer.Team then shouldShow = false end end if shouldShow and player == LocalPlayer then shouldShow = false end local char = player.Character local root = char and (char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart) local humanoid = char and char:FindFirstChildOfClass("Humanoid") if not root or not humanoid or humanoid.Health <= 0 then shouldShow = false end local dist = 0 if shouldShow then local myRoot = LocalPlayer.Character and (LocalPlayer.Character:FindFirstChild("HumanoidRootPart") or LocalPlayer.Character.PrimaryPart) if myRoot then dist = (root.Position - myRoot.Position).Magnitude if dist > Flags["ESP/MaxDistance"] then shouldShow = false end end end if not shouldShow then SafeSet(data.Nametag, "Enabled", false) if data.Highlight then SafeSet(data.Highlight, "Enabled", false) end return end if data.Nametag.Adornee ~= root then data.Nametag.Adornee = root end SafeSet(data.Nametag, "Enabled", true) SafeSet(data.Nametag, "MaxDistance", Flags["ESP/MaxDistance"]) if data.Highlight then local hlActive = Flags["ESP/HighlightEnabled"] if data.Highlight.Adornee ~= char then data.Highlight.Adornee = char end SafeSet(data.Highlight, "Enabled", hlActive) end if Flags["ESP/ShowUsername"] then if data.LastName ~= player.Name then data.LastName = player.Name SafeSet(data.Label, "Text", player.Name) end SafeSet(data.Label, "Visible", true) else SafeSet(data.Label, "Visible", false) end local health, maxHealth = GetHealth(player) if data.HealthNum then SafeSet(data.HealthNum, "Visible", Flags["ESP/HealthIndicator"]) if data.LastHealth ~= math.floor(health) or data.LastMaxHealth ~= math.floor(maxHealth) then data.LastHealth = math.floor(health) data.LastMaxHealth = math.floor(maxHealth) SafeSet(data.HealthNum, "Text", string.format("%d / %d", math.floor(health), math.floor(maxHealth))) local hpColor = GetHealthColor(health, maxHealth) SafeSet(data.HealthNum, "TextColor3", hpColor) if data.HealthBarFill then local pct = math.clamp(health / math.max(maxHealth, 1), 0, 1) SafeSet(data.HealthBarFill, "Size", UDim2.fromScale(pct, 1)) SafeSet(data.HealthBarFill, "BackgroundColor3", hpColor) end end end if data.HealthBarBG then SafeSet(data.HealthBarBG, "Visible", Flags["ESP/HealthIndicator"]) end if data.DistanceLabel then SafeSet(data.DistanceLabel, "Visible", Flags["ESP/ShowDistance"]) local distRounded = math.floor(dist) if math.abs(data.LastDistance - distRounded) >= 1 then data.LastDistance = distRounded SafeSet(data.DistanceLabel, "Text", string.format("%d studs", distRounded)) end end if data.EquippedLabel then SafeSet(data.EquippedLabel, "Visible", Flags["ESP/ShowEquipped"]) local tool = char:FindFirstChildOfClass("Tool") local toolName = tool and tool.Name or "Unarmed" local equippedStr = "[" .. toolName .. "]" if data.LastEquipped ~= equippedStr then data.LastEquipped = equippedStr SafeSet(data.EquippedLabel, "Text", equippedStr) end end local role = Flags["ESP/ColorByRole"] and DetectRole(player) or nil if role then if data.LastRole ~= role then data.LastRole = role local color = ROLE_COLORS[role] or ROLE_COLORS.Unknown SafeSet(data.Label, "TextColor3", color) if data.Highlight then SafeSet(data.Highlight, "FillColor", color) SafeSet(data.Highlight, "OutlineColor", color) end end else if data.LastRole ~= "plain" then data.LastRole = "plain" SafeSet(data.Label, "TextColor3", ROLE_COLORS.Neutral) if data.Highlight then SafeSet(data.Highlight, "FillColor", ROLE_COLORS.Neutral) SafeSet(data.Highlight, "OutlineColor", ROLE_COLORS.Neutral) end end end local op = Flags["ESP/NametagOpacity"] SafeSet(data.Label, "TextTransparency", op) if data.HealthNum then SafeSet(data.HealthNum, "TextTransparency", op) end if data.DistanceLabel then SafeSet(data.DistanceLabel, "TextTransparency", op) end if data.EquippedLabel then SafeSet(data.EquippedLabel, "TextTransparency", op) end if data.HealthBarBG then SafeSet(data.HealthBarBG, "BackgroundTransparency", op) end if data.HealthBarFill then SafeSet(data.HealthBarFill, "BackgroundTransparency", op) end end local function RefreshESP() local players = Players:GetPlayers() for _, p in ipairs(players) do if p ~= LocalPlayer then if not ESP.Objects[p] then CreateNametag(p) end UpdateNametag(p) end end for p, _ in pairs(ESP.Objects) do if not p.Parent then RemoveNametag(p) end end end -- ══════════════════════════════════════════════════════════════════ -- NOCLIP -- ══════════════════════════════════════════════════════════════════ local Noclip = { Broken = {}, BrokenCount = 0, OverlapParams = OverlapParams.new(), RaycastParams = RaycastParams.new(), ScratchIgnore = {}, } Noclip.OverlapParams.FilterType = Enum.RaycastFilterType.Exclude Noclip.OverlapParams.MaxParts = 0 Noclip.RaycastParams.FilterType = Enum.RaycastFilterType.Exclude Noclip.RaycastParams.IgnoreWater = true local _feetPartsBuffer = {} local function GetPartsUnderFeet(char) table.clear(_feetPartsBuffer) if not char then return _feetPartsBuffer end local root = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart if not root then return _feetPartsBuffer end local ignore = Noclip.ScratchIgnore table.clear(ignore) ignore[1] = char Noclip.RaycastParams.FilterDescendantsInstances = ignore local basePos = root.Position - Vector3.new(0, 2.5, 0) local direction = Vector3.new(0, -12, 0) local rootCF = root.CFrame local relOffsets = { Vector3.new(0, 0, 0), Vector3.new(-1.2, 0, -1.2), Vector3.new(1.2, 0, -1.2), Vector3.new(-1.2, 0, 1.2), Vector3.new(1.2, 0, 1.2), } for _, relOff in ipairs(relOffsets) do local origin = basePos + rootCF:VectorToWorldSpace(relOff) local ok, result = pcall(function() return Workspace:Raycast(origin, direction, Noclip.RaycastParams) end) if ok and result and result.Instance then _feetPartsBuffer[result.Instance] = true end end return _feetPartsBuffer end local function ShouldBreak(part, feetParts) if not part or not part:IsA("BasePart") then return false end if part:IsA("Terrain") then return false end if not part.Parent then return false end local myChar = LocalPlayer.Character if myChar and part:IsDescendantOf(myChar) then return false end local model = part:FindFirstAncestorOfClass("Model") if model and Players:GetPlayerFromCharacter(model) then return false end if part:IsA("SpawnLocation") then return false end if feetParts and feetParts[part] then return false end local name = string.lower(part.Name) if name == "baseplate" or name == "ground" or name == "floor" or name == "terrain" or name == "base" then return false end if part.Size.X > 400 and part.Size.Z > 400 then return false end if part.Anchored then if not Flags["Noclip/IncludeAnchored"] then return false end else if not Flags["Noclip/IncludeUnanchored"] then return false end end return true end local function BreakPart(part) if Noclip.Broken[part] then if part.CanCollide then pcall(function() part.CanCollide = false end) end return end Noclip.Broken[part] = { cc = part.CanCollide } Noclip.BrokenCount = Noclip.BrokenCount + 1 pcall(function() part.CanCollide = false end) end local function RestorePart(part) local data = Noclip.Broken[part] if not data then return end pcall(function() if part and part.Parent and type(data) == "table" then part.CanCollide = data.cc end end) Noclip.Broken[part] = nil Noclip.BrokenCount = math.max(0, Noclip.BrokenCount - 1) end local function RestoreAll() for part, data in pairs(Noclip.Broken) do pcall(function() if part and part.Parent and type(data) == "table" then part.CanCollide = data.cc end end) end Noclip.Broken = {} Noclip.BrokenCount = 0 end local function ScanAndBreak() local char = LocalPlayer.Character if not char then return end local root = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart if not root then return end local radius = Flags["Noclip/Radius"] or 300 local origin = root.Position local feetParts = GetPartsUnderFeet(char) local ignore = Noclip.ScratchIgnore table.clear(ignore) ignore[1] = char Noclip.OverlapParams.FilterDescendantsInstances = ignore local ok, parts = pcall(function() return Workspace:GetPartBoundsInRadius(origin, radius, Noclip.OverlapParams) end) if not ok or not parts then return end for _, part in ipairs(parts) do if ShouldBreak(part, feetParts) then BreakPart(part) end end end local function EnforceNoclip() if next(Noclip.Broken) == nil then return end local char = LocalPlayer.Character if not char then return end local root = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart if not root then return end local feetParts = GetPartsUnderFeet(char) local toRemove = nil local toRestore = nil for part, _ in pairs(Noclip.Broken) do if not part or not part.Parent then toRemove = toRemove or {} toRemove[#toRemove + 1] = part elseif feetParts[part] then toRestore = toRestore or {} toRestore[#toRestore + 1] = part elseif part.CanCollide then pcall(function() part.CanCollide = false end) end end if toRemove then for _, part in ipairs(toRemove) do if Noclip.Broken[part] then Noclip.Broken[part] = nil Noclip.BrokenCount = math.max(0, Noclip.BrokenCount - 1) end end end if toRestore then for _, part in ipairs(toRestore) do RestorePart(part) end end end -- ══════════════════════════════════════════════════════════════════ -- AUTO-GIVE -- ══════════════════════════════════════════════════════════════════ local AutoGive = { Running = false } local MP5_ORIGIN_POS = Vector3.new(813.698, 97.850, 2229.396) local REMINGTON_ORIGIN_POS = Vector3.new(820.298, 97.850, 2229.396) local MATCH_TOLERANCE = 5 local TP_HEIGHT_OFFSET = 6 local TP_DWELL_TIME = 0.8 local function FindTouchGiverByPos(targetPos) for _, obj in ipairs(Workspace:GetChildren()) do if obj.Name == "TouchGiver" and obj:IsA("Model") then local ok, pos = pcall(function() local primary = obj.PrimaryPart or obj:FindFirstChildWhichIsA("BasePart") return primary and primary.Position end) if ok and pos and (pos - targetPos).Magnitude < MATCH_TOLERANCE then return obj, pos end end end return nil end local function GetMyRoot() local char = LocalPlayer.Character if not char then return nil end return char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart end local function TeleportToTouchGiver(touchPos, myRoot, homeCFrame) if not myRoot or not touchPos then return end local targetCFrame = CFrame.new(touchPos + Vector3.new(0, TP_HEIGHT_OFFSET, 0)) pcall(function() myRoot.CFrame = targetCFrame end) task.wait(TP_DWELL_TIME) pcall(function() myRoot.CFrame = homeCFrame end) task.wait(0.1) end local function SpawnTouchGiversInFront(force) if not force and not Flags["AutoGive/Enabled"] then return end if AutoGive.Running then return end AutoGive.Running = true task.wait(1.2) local myRoot = GetMyRoot() if not myRoot then AutoGive.Running = false return end local homeCFrame = myRoot.CFrame local _, mp5Pos = FindTouchGiverByPos(MP5_ORIGIN_POS) local _, remPos = FindTouchGiverByPos(REMINGTON_ORIGIN_POS) if not mp5Pos and not remPos then AutoGive.Running = false return end if remPos then TeleportToTouchGiver(remPos, myRoot, homeCFrame) myRoot = GetMyRoot() if myRoot then homeCFrame = myRoot.CFrame end end if mp5Pos then TeleportToTouchGiver(mp5Pos, myRoot, homeCFrame) end local finalRoot = GetMyRoot() if finalRoot then pcall(function() finalRoot.CFrame = homeCFrame end) end AutoGive.Running = false end -- ══════════════════════════════════════════════════════════════════ -- ARREST SYSTEM -- ══════════════════════════════════════════════════════════════════ local ArrestState = { Running = false, SelectedPlayer = nil, ChaserConn = nil, EndTime = 0, HomeCFrame = nil, TargetRoot = nil, } local function GetCriminalsList() local out = {} for _, p in ipairs(GetPlayersCache()) do if p ~= LocalPlayer and p.Parent then local role = DetectRole(p) if role == "Criminal" then local char, root = GetCharacter(p) if char and root then local myRoot = GetMyRoot() local dist = myRoot and (root.Position - myRoot.Position).Magnitude or 0 table.insert(out, { player = p, dist = dist }) end end end end table.sort(out, function(a, b) return a.dist < b.dist end) return out end local function EquipToolByName(toolName) local char = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not char or not backpack then return false end local equipped = char:FindFirstChildOfClass("Tool") if equipped and equipped.Name == toolName then return true end local tool = backpack:FindFirstChild(toolName) if not tool or not tool:IsA("Tool") then return false end local hum = char:FindFirstChildOfClass("Humanoid") if not hum then return false end pcall(function() hum:EquipTool(tool) end) return true end local function GetBehindCFrame(targetRoot) if not targetRoot then return nil end local dist = Flags["Arrest/StickDistance"] or 2.2 local height = Flags["Arrest/StickHeight"] or 0.0 return targetRoot.CFrame * CFrame.new(0, height, dist) end local function StartChaser(targetRoot) local char = LocalPlayer.Character if not char then return nil end local myRoot = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart local hum = char:FindFirstChildOfClass("Humanoid") if not myRoot or not hum then return nil end pcall(function() hum.AutoRotate = false end) local chaserConn chaserConn = RunService.RenderStepped:Connect(function() local myR = LocalPlayer.Character and (LocalPlayer.Character:FindFirstChild("HumanoidRootPart") or LocalPlayer.Character.PrimaryPart) if not myR then return end local behind = GetBehindCFrame(targetRoot) if behind then pcall(function() myR.CFrame = behind myR.AssemblyLinearVelocity = Vector3.zero end) end end) return chaserConn end local function StopChaser(restoreCFrame) if ArrestState.ChaserConn then pcall(function() ArrestState.ChaserConn:Disconnect() end) ArrestState.ChaserConn = nil end local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then pcall(function() hum.AutoRotate = true end) end local myRoot = char and (char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart) if myRoot and restoreCFrame then pcall(function() myRoot.CFrame = restoreCFrame end) end ArrestState.TargetRoot = nil ArrestState.HomeCFrame = nil ArrestState.EndTime = 0 end local function ArrestPlayer(targetPlayer) if not targetPlayer or not targetPlayer.Parent then return false end if ArrestState.Running then return false end ArrestState.Running = true local myChar = LocalPlayer.Character local myRoot = myChar and (myChar:FindFirstChild("HumanoidRootPart") or myChar.PrimaryPart) if not myRoot then ArrestState.Running = false return false end local homeCFrame = myRoot.CFrame local toolName = Flags["Arrest/ToolName"] or "Handcuffs" local equipped = EquipToolByName(toolName) if not equipped then Notify("Arrest", "Could not equip " .. toolName .. ". Make sure you're a Guard and have it in your backpack.") ArrestState.Running = false return false end task.wait(0.2) local targetChar, targetRoot = GetCharacter(targetPlayer) if not targetChar or not targetRoot then Notify("Arrest", "Target character not found.") pcall(function() myRoot.CFrame = homeCFrame end) ArrestState.Running = false return false end local behind = GetBehindCFrame(targetRoot) if behind then pcall(function() myRoot.CFrame = behind end) task.wait(0.1) end ArrestState.TargetRoot = targetRoot ArrestState.HomeCFrame = homeCFrame ArrestState.EndTime = tick() + (Flags["Arrest/StickDuration"] or 5.0) ArrestState.ChaserConn = StartChaser(targetRoot) task.spawn(function() while ArrestState.Running do task.wait(0.1) if tick() >= ArrestState.EndTime then if ArrestState.Running then ArrestState.Running = false StopChaser(homeCFrame) Notify("Arrest", "Stick ended. You can click now or press the button again.") end break end end end) Notify("Arrest", string.format("Sticking to %s for %.1fs. Click on them to arrest!", targetPlayer.Name, Flags["Arrest/StickDuration"] or 5.0)) return true end local function StopArrestStick() if not ArrestState.Running then return end ArrestState.Running = false StopChaser(ArrestState.HomeCFrame) Notify("Arrest", "Stopped sticking.") end -- ══════════════════════════════════════════════════════════════════ -- NOTIFICATION -- ══════════════════════════════════════════════════════════════════ local NotifyGui, NotifyContainer local function EnsureNotifyGui() if NotifyGui and NotifyGui.Parent then return end local parent = gethui and gethui() or game:GetService("CoreGui") NotifyGui = Instance.new("ScreenGui") NotifyGui.Name = "PrisonVision_Notify" NotifyGui.DisplayOrder = 1000 NotifyGui.IgnoreGuiInset = true NotifyGui.ResetOnSpawn = false pcall(function() NotifyGui.Parent = parent end) if not NotifyGui.Parent then NotifyGui.Parent = game:GetService("CoreGui") end NotifyContainer = Instance.new("Frame") NotifyContainer.Name = "Container" NotifyContainer.Size = UDim2.new(0, 300, 1, -40) NotifyContainer.Position = UDim2.new(1, -20, 1, -20) NotifyContainer.AnchorPoint = Vector2.new(1, 1) NotifyContainer.BackgroundTransparency = 1 NotifyContainer.Parent = NotifyGui local layout = Instance.new("UIListLayout") layout.HorizontalAlignment = Enum.HorizontalAlignment.Right layout.VerticalAlignment = Enum.VerticalAlignment.Bottom layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 8) layout.Parent = NotifyContainer end function Notify(title, text) EnsureNotifyGui() local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 280, 0, 0) frame.AutomaticSize = Enum.AutomaticSize.Y frame.BackgroundColor3 = THEME.Background frame.BackgroundTransparency = 1 frame.BorderSizePixel = 0 frame.Parent = NotifyContainer local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 8); corner.Parent = frame local stroke = Instance.new("UIStroke") stroke.Color = THEME.Accent; stroke.Thickness = 1; stroke.Transparency = 1 stroke.Parent = frame local pad = Instance.new("UIPadding") pad.PaddingTop = UDim.new(0, 10); pad.PaddingBottom = UDim.new(0, 10) pad.PaddingLeft = UDim.new(0, 12); pad.PaddingRight = UDim.new(0, 12) pad.Parent = frame local titleLbl = Instance.new("TextLabel") titleLbl.Size = UDim2.new(1, 0, 0, 16) titleLbl.BackgroundTransparency = 1 titleLbl.Text = title titleLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) titleLbl.TextSize = 13 titleLbl.TextColor3 = THEME.Accent titleLbl.TextXAlignment = Enum.TextXAlignment.Left titleLbl.TextTransparency = 1 titleLbl.Parent = frame local bodyLbl = Instance.new("TextLabel") bodyLbl.Size = UDim2.new(1, 0, 0, 0) bodyLbl.AutomaticSize = Enum.AutomaticSize.Y bodyLbl.Position = UDim2.new(0, 0, 0, 18) bodyLbl.BackgroundTransparency = 1 bodyLbl.Text = tostring(text or "") bodyLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Normal) bodyLbl.TextSize = 11 bodyLbl.TextColor3 = THEME.Text bodyLbl.TextWrapped = true bodyLbl.TextXAlignment = Enum.TextXAlignment.Left bodyLbl.TextTransparency = 1 bodyLbl.Parent = frame TweenService:Create(frame, TweenInfo.new(0.2), {BackgroundTransparency = 0.05}):Play() TweenService:Create(stroke, TweenInfo.new(0.2), {Transparency = 0.4}):Play() TweenService:Create(titleLbl, TweenInfo.new(0.2), {TextTransparency = 0}):Play() TweenService:Create(bodyLbl, TweenInfo.new(0.2), {TextTransparency = 0}):Play() task.delay(3, function() local t1 = TweenService:Create(frame, TweenInfo.new(0.2), {BackgroundTransparency = 1}) TweenService:Create(stroke, TweenInfo.new(0.2), {Transparency = 1}):Play() TweenService:Create(titleLbl, TweenInfo.new(0.2), {TextTransparency = 1}):Play() TweenService:Create(bodyLbl, TweenInfo.new(0.2), {TextTransparency = 1}):Play() t1:Play() t1.Completed:Connect(function() SafeDestroy(frame) end) end) end -- ══════════════════════════════════════════════════════════════════ -- TELEPORT SYSTEM -- ══════════════════════════════════════════════════════════════════ local TELEPORT_PRESETS = { {name = "Entrance Tower", pos = Vector3.new(510, 122, 2325)}, {name = "Police Car Spawn", pos = Vector3.new(595, 98, 2497)}, {name = "Police Armory", pos = Vector3.new(816, 99, 2237)}, {name = "Rooftop (Escape)", pos = Vector3.new(946, 135, 2201)}, {name = "Yard Tower", pos = Vector3.new(822, 125, 2587)}, {name = "Hammer", pos = Vector3.new(806, 98, 2525)}, {name = "Knife", pos = Vector3.new(707, 97, 2508)}, {name = "Criminal Armory", pos = Vector3.new(-936, 94, 2043)}, {name = "Criminal Car Spawn", pos = Vector3.new(-912, 95, 2160)}, {name = "Criminal Tower Rooftop", pos = Vector3.new(-371, 114, 1992)}, } local function TeleportToPosition(pos) if typeof(pos) ~= "Vector3" then Notify("Teleport", "Invalid position.") return false end local char = LocalPlayer.Character if not char then Notify("Teleport", "Character not found.") return false end local root = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart if not root then Notify("Teleport", "HumanoidRootPart not found.") return false end -- Try a smarter teleport: offset upward if player would clip local offsetY = 3 pcall(function() root.CFrame = CFrame.new(pos + Vector3.new(0, offsetY, 0)) root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero end) Notify("Teleport", string.format("Teleported to (%.0f, %.0f, %.0f)", pos.X, pos.Y, pos.Z)) return true end local function GetCurrentPosition() local char = LocalPlayer.Character if not char then return nil end local root = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart if not root then return nil end return root.Position end -- ══════════════════════════════════════════════════════════════════ -- UI — Main Window -- ══════════════════════════════════════════════════════════════════ local UI = {} local State = { Visible = true, Minimized = false, Tabs = {}, CurrentTab = nil, Updaters = {}, MainFrame = nil, ScreenGui = nil, } local function EnsureMainGui() if State.ScreenGui and State.ScreenGui.Parent then return State.ScreenGui end local parent = gethui and gethui() or game:GetService("CoreGui") local gui = Instance.new("ScreenGui") gui.Name = "PrisonVision_Main" gui.DisplayOrder = 999 gui.IgnoreGuiInset = true gui.ResetOnSpawn = false gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling pcall(function() gui.Parent = parent end) if not gui.Parent then gui.Parent = game:GetService("CoreGui") end State.ScreenGui = gui return gui end function UI.CreateWindow(title) local gui = EnsureMainGui() local main = Instance.new("CanvasGroup") main.Name = "MainFrame" main.Size = UDim2.fromOffset(520, 360) main.Position = UDim2.fromScale(0.5, 0.5) main.AnchorPoint = Vector2.new(0.5, 0.5) main.BackgroundColor3 = THEME.Background main.BorderSizePixel = 0 main.ClipsDescendants = true main.Parent = gui State.MainFrame = main local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 10); corner.Parent = main local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(50, 50, 58); stroke.Thickness = 1 stroke.Parent = main local sidebar = Instance.new("Frame") sidebar.Name = "Sidebar" sidebar.Size = UDim2.new(0, 150, 1, 0) sidebar.BackgroundColor3 = THEME.Sidebar sidebar.BorderSizePixel = 0 sidebar.Parent = main local sbCorner = Instance.new("UICorner") sbCorner.CornerRadius = UDim.new(0, 10); sbCorner.Parent = sidebar local sbFix = Instance.new("Frame") sbFix.Size = UDim2.new(0, 10, 1, 0) sbFix.Position = UDim2.new(1, -10, 0, 0) sbFix.BackgroundColor3 = THEME.Sidebar sbFix.BorderSizePixel = 0 sbFix.Parent = sidebar local titleLbl = Instance.new("TextLabel") titleLbl.Size = UDim2.new(1, -20, 0, 30) titleLbl.Position = UDim2.new(0, 14, 0, 8) titleLbl.BackgroundTransparency = 1 titleLbl.Text = title titleLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.ExtraBold, Enum.FontStyle.Normal) titleLbl.TextSize = 18 titleLbl.TextColor3 = THEME.Accent titleLbl.TextXAlignment = Enum.TextXAlignment.Left titleLbl.Parent = sidebar local verLbl = Instance.new("TextLabel") verLbl.Size = UDim2.new(1, -20, 0, 14) verLbl.Position = UDim2.new(0, 14, 0, 34) verLbl.BackgroundTransparency = 1 verLbl.Text = "v" .. VERSION verLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Medium, Enum.FontStyle.Normal) verLbl.TextSize = 10 verLbl.TextColor3 = THEME.TextDark verLbl.TextXAlignment = Enum.TextXAlignment.Left verLbl.Parent = sidebar local tabContainer = Instance.new("ScrollingFrame") tabContainer.Name = "Tabs" tabContainer.Size = UDim2.new(1, 0, 1, -60) tabContainer.Position = UDim2.new(0, 0, 0, 60) tabContainer.BackgroundTransparency = 1 tabContainer.BorderSizePixel = 0 tabContainer.ScrollBarThickness = 2 tabContainer.CanvasSize = UDim2.new(0, 0, 0, 0) tabContainer.AutomaticCanvasSize = Enum.AutomaticSize.Y tabContainer.Parent = sidebar State.TabContainer = tabContainer local tabLayout = Instance.new("UIListLayout") tabLayout.Padding = UDim.new(0, 4) tabLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center tabLayout.SortOrder = Enum.SortOrder.LayoutOrder tabLayout.Parent = tabContainer local content = Instance.new("Frame") content.Name = "Content" content.Size = UDim2.new(1, -160, 1, -20) content.Position = UDim2.new(0, 155, 0, 10) content.BackgroundTransparency = 1 content.ClipsDescendants = true content.Parent = main State.ContentArea = content local closeBtn = Instance.new("TextButton") closeBtn.Name = "Minimize" closeBtn.Size = UDim2.fromOffset(26, 26) closeBtn.Position = UDim2.new(1, -32, 0, 8) closeBtn.BackgroundColor3 = THEME.Element closeBtn.Text = "–" closeBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) closeBtn.TextSize = 18 closeBtn.TextColor3 = THEME.Text closeBtn.BorderSizePixel = 0 closeBtn.Parent = main local cbCorner = Instance.new("UICorner") cbCorner.CornerRadius = UDim.new(0, 6); cbCorner.Parent = closeBtn local dragging, dragStart, startPos = false, nil, nil local function beginDrag(input) if input.UserInputType ~= Enum.UserInputType.MouseButton1 and input.UserInputType ~= Enum.UserInputType.Touch then return end dragging = true dragStart = input.Position startPos = main.Position end main.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then beginDrag(input) end end) sidebar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then beginDrag(input) end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType ~= Enum.UserInputType.MouseMovement and input.UserInputType ~= Enum.UserInputType.Touch then return end local delta = input.Position - dragStart main.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) local minimized = false local normalSize = main.Size State.ToggleMinimize = function() minimized = not minimized State.Minimized = minimized if minimized then normalSize = main.Size TweenService:Create(main, TweenInfo.new(0.25, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { Size = UDim2.fromOffset(200, 34), }):Play() sidebar.Visible = false content.Visible = false closeBtn.Text = "+" else TweenService:Create(main, TweenInfo.new(0.25, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { Size = normalSize, }):Play() task.wait(0.1) sidebar.Visible = true content.Visible = true closeBtn.Text = "–" end end closeBtn.MouseButton1Click:Connect(State.ToggleMinimize) UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.KeyCode == Enum.KeyCode.CapsLock then State.ToggleMinimize() end end) return UI end function UI.CreateTab(name) if not State.TabContainer then return end local btn = Instance.new("TextButton") btn.Name = name .. "Tab" btn.Size = UDim2.new(1, -16, 0, 32) btn.BackgroundColor3 = THEME.Element btn.BackgroundTransparency = 1 btn.Text = "" btn.BorderSizePixel = 0 btn.AutoButtonColor = false btn.Parent = State.TabContainer local bCorner = Instance.new("UICorner") bCorner.CornerRadius = UDim.new(0, 6); bCorner.Parent = btn local label = Instance.new("TextLabel") label.Size = UDim2.new(1, -16, 1, 0) label.Position = UDim2.new(0, 12, 0, 0) label.BackgroundTransparency = 1 label.Text = name label.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) label.TextSize = 13 label.TextColor3 = THEME.TextDark label.TextXAlignment = Enum.TextXAlignment.Left label.Parent = btn local indicator = Instance.new("Frame") indicator.Size = UDim2.new(0, 3, 0, 14) indicator.Position = UDim2.new(0, 0, 0.5, -7) indicator.BackgroundColor3 = THEME.Accent indicator.BackgroundTransparency = 1 indicator.BorderSizePixel = 0 indicator.Parent = btn local iCorner = Instance.new("UICorner") iCorner.CornerRadius = UDim.new(1, 0); iCorner.Parent = indicator local page = Instance.new("ScrollingFrame") page.Name = name .. "Page" page.Size = UDim2.new(1, 0, 1, 0) page.BackgroundTransparency = 1 page.BorderSizePixel = 0 page.ScrollBarThickness = 2 page.Visible = false page.CanvasSize = UDim2.new(0, 0, 0, 0) page.AutomaticCanvasSize = Enum.AutomaticSize.Y page.Parent = State.ContentArea local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 5) layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = page local pad = Instance.new("UIPadding") pad.PaddingRight = UDim.new(0, 6) pad.Parent = page local function select() for _, t in pairs(State.Tabs) do TweenService:Create(t.Label, TweenInfo.new(0.15), {TextColor3 = THEME.TextDark}):Play() TweenService:Create(t.Indicator, TweenInfo.new(0.15), {BackgroundTransparency = 1}):Play() TweenService:Create(t.Button, TweenInfo.new(0.15), {BackgroundTransparency = 1}):Play() t.Page.Visible = false end TweenService:Create(label, TweenInfo.new(0.15), {TextColor3 = THEME.Text}):Play() TweenService:Create(indicator, TweenInfo.new(0.15), {BackgroundTransparency = 0}):Play() TweenService:Create(btn, TweenInfo.new(0.15), {BackgroundTransparency = 0.5}):Play() page.Visible = true State.CurrentTab = name end btn.MouseButton1Click:Connect(select) table.insert(State.Tabs, { Button = btn, Label = label, Indicator = indicator, Page = page, Select = select, }) if #State.Tabs == 1 then select() end return page end function UI.CreateSection(page, name) local container = Instance.new("Frame") container.Size = UDim2.new(1, 0, 0, 28) container.BackgroundTransparency = 1 container.Parent = page local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 1, 0) lbl.Position = UDim2.new(0, 2, 0, 4) lbl.BackgroundTransparency = 1 lbl.Text = string.upper(name) lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) lbl.TextSize = 10 lbl.TextColor3 = THEME.Accent lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = container end function UI.CreateToggle(page, text, flag, default, callback) local frame = Instance.new("Frame") frame.Size = UDim2.new(1, 0, 0, 38) frame.BackgroundColor3 = THEME.Element frame.BorderSizePixel = 0 frame.Parent = page local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 6); corner.Parent = frame local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -70, 1, 0) lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) lbl.TextSize = 12 lbl.TextColor3 = THEME.Text lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = frame if Flags[flag] == nil then Flags[flag] = default end local switch = Instance.new("Frame") switch.Size = UDim2.fromOffset(44, 22) switch.AnchorPoint = Vector2.new(1, 0.5) switch.Position = UDim2.new(1, -12, 0.5, 0) switch.BackgroundColor3 = Flags[flag] and THEME.Accent or Color3.fromRGB(55, 55, 62) switch.BorderSizePixel = 0 switch.Parent = frame local swCorner = Instance.new("UICorner") swCorner.CornerRadius = UDim.new(1, 0); swCorner.Parent = switch local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(18, 18) knob.AnchorPoint = Vector2.new(0, 0.5) knob.Position = Flags[flag] and UDim2.new(1, -20, 0.5, 0) or UDim2.new(0, 2, 0.5, 0) knob.BackgroundColor3 = Color3.fromRGB(240, 240, 245) knob.BorderSizePixel = 0 knob.Parent = switch local kCorner = Instance.new("UICorner") kCorner.CornerRadius = UDim.new(1, 0); kCorner.Parent = knob local clickArea = Instance.new("TextButton") clickArea.Size = UDim2.new(1, 0, 1, 0) clickArea.BackgroundTransparency = 1 clickArea.Text = "" clickArea.Parent = switch local function updateVisuals(state) TweenService:Create(switch, TweenInfo.new(0.15), { BackgroundColor3 = state and THEME.Accent or Color3.fromRGB(55, 55, 62), }):Play() TweenService:Create(knob, TweenInfo.new(0.15), { Position = state and UDim2.new(1, -20, 0.5, 0) or UDim2.new(0, 2, 0.5, 0), }):Play() end State.Updaters[flag] = function(state) updateVisuals(state) if callback then pcall(callback, state) end end clickArea.MouseButton1Click:Connect(function() Flags[flag] = not Flags[flag] updateVisuals(Flags[flag]) if callback then pcall(callback, Flags[flag]) end end) end function UI.CreateNumericInput(page, text, flag, default, minV, maxV, step, unit, callback, lockable) local frame = Instance.new("Frame") frame.Size = UDim2.new(1, 0, 0, 50) frame.BackgroundColor3 = THEME.Element frame.BorderSizePixel = 0 frame.Parent = page local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 6); corner.Parent = frame local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.55, lockable and -42 or -12, 1, 0) lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) lbl.TextSize = 12 lbl.TextColor3 = THEME.Text lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = frame if lockable then local locked = Flags[flag .. "/Locked"] == true local lockBtn = Instance.new("TextButton") lockBtn.Name = "Lock" lockBtn.Size = UDim2.fromOffset(24, 24) lockBtn.AnchorPoint = Vector2.new(1, 0.5) lockBtn.Position = UDim2.new(0.6, -12, 0.5, 0) lockBtn.BackgroundTransparency = 1 lockBtn.Text = locked and "🔒" or "🔓" lockBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) lockBtn.TextSize = 14 lockBtn.TextColor3 = locked and THEME.Accent or THEME.TextDark lockBtn.Parent = frame State.Updaters[flag .. "/Locked"] = function(state) local l = state == true Flags[flag .. "/Locked"] = l SafeSet(lockBtn, "TextColor3", l and THEME.Accent or THEME.TextDark) SafeSet(lockBtn, "Text", l and "🔒" or "🔓") end lockBtn.MouseButton1Click:Connect(function() Flags[flag .. "/Locked"] = not Flags[flag .. "/Locked"] local l = Flags[flag .. "/Locked"] SafeSet(lockBtn, "TextColor3", l and THEME.Accent or THEME.TextDark) SafeSet(lockBtn, "Text", l and "🔒" or "🔓") end) end local inputFrame = Instance.new("Frame") inputFrame.Size = UDim2.new(0.45, -12, 0, 30) inputFrame.Position = UDim2.new(1, -12, 0.5, 0) inputFrame.AnchorPoint = Vector2.new(1, 0.5) inputFrame.BackgroundColor3 = Color3.fromRGB(48, 48, 55) inputFrame.BorderSizePixel = 0 inputFrame.Parent = frame local ifCorner = Instance.new("UICorner") ifCorner.CornerRadius = UDim.new(0, 6); ifCorner.Parent = inputFrame if Flags[flag] == nil and not flag:match("^Humanoid/") then Flags[flag] = default end local box = Instance.new("TextBox") box.Size = UDim2.new(1, -50, 1, 0) box.Position = UDim2.new(0, 25, 0, 0) box.BackgroundTransparency = 1 box.Text = tostring(Flags[flag] ~= nil and Flags[flag] or default) .. (unit or "") box.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) box.TextSize = 12 box.TextColor3 = THEME.Accent box.ClearTextOnFocus = false box.Parent = inputFrame local function commit(val, isUser) val = math.clamp(tonumber(val) or (Flags[flag] or default), minV, maxV) if step and step > 0 then val = math.floor(val / step + 0.5) * step end Flags[flag] = val box.Text = tostring(val) .. (unit or "") if isUser then if callback then pcall(callback, val) end end end State.Updaters[flag] = function(val) if not box:IsFocused() then val = math.clamp(tonumber(val) or default, minV, maxV) box.Text = tostring(val) .. (unit or "") if callback then pcall(callback, val) end end end box.FocusLost:Connect(function() commit((box.Text:gsub("[^%d%.%-]", "")), true) end) local minus = Instance.new("TextButton") minus.Size = UDim2.new(0, 25, 1, 0) minus.BackgroundTransparency = 1 minus.Text = "−" minus.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) minus.TextSize = 16 minus.TextColor3 = THEME.TextDark minus.Parent = inputFrame minus.MouseButton1Click:Connect(function() commit((Flags[flag] or default) - (step or 1), true) end) local plus = Instance.new("TextButton") plus.Size = UDim2.new(0, 25, 1, 0) plus.Position = UDim2.new(1, -25, 0, 0) plus.BackgroundTransparency = 1 plus.Text = "+" plus.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) plus.TextSize = 16 plus.TextColor3 = THEME.TextDark plus.Parent = inputFrame plus.MouseButton1Click:Connect(function() commit((Flags[flag] or default) + (step or 1), true) end) end function UI.CreateButton(page, text, callback) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 0, 34) btn.BackgroundColor3 = THEME.Accent btn.BackgroundTransparency = 0.15 btn.Text = text btn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) btn.TextSize = 12 btn.TextColor3 = Color3.fromRGB(20, 20, 22) btn.BorderSizePixel = 0 btn.Parent = page local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 6); corner.Parent = btn local stroke = Instance.new("UIStroke") stroke.Color = THEME.Accent; stroke.Thickness = 1 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = btn btn.MouseButton1Click:Connect(function() TweenService:Create(btn, TweenInfo.new(0.08), {Size = UDim2.new(1, -6, 0, 30)}):Play() task.wait(0.06) TweenService:Create(btn, TweenInfo.new(0.08), {Size = UDim2.new(1, 0, 0, 34)}):Play() if callback then pcall(callback) end end) end -- ══════════════════════════════════════════════════════════════════ -- BUILD UI -- ══════════════════════════════════════════════════════════════════ UI.CreateWindow("PrisonVision") -- ── Tab: Aim ───────────────────────────────────────────────────── local aimTab = UI.CreateTab("Aim") UI.CreateSection(aimTab, "Aim Assist") UI.CreateToggle(aimTab, "Enable Aimlock", "Aim/AimLock", Flags["Aim/AimLock"], function(state) Notify("Aim", state and "Aimlock enabled." or "Aimlock disabled.") if not state then ClearAimLockState(true) end end) UI.CreateToggle(aimTab, "Ignore Teammates", "Aim/TeamCheck", Flags["Aim/TeamCheck"]) UI.CreateToggle(aimTab, "Visibility Check (Raycast)", "Aim/VisibilityCheck", Flags["Aim/VisibilityCheck"]) UI.CreateNumericInput(aimTab, "Attraction Strength", "Aim/AttractionStrength", Flags["Aim/AttractionStrength"], 0, 500, 10, "%") UI.CreateNumericInput(aimTab, "FOV Radius", "Aim/FOV/Radius", Flags["Aim/FOV/Radius"], 0, 500, 5, "px") UI.CreateToggle(aimTab, "Show FOV Circle", "Aim/FOV/ShowCircle", Flags["Aim/FOV/ShowCircle"]) UI.CreateSection(aimTab, "Dampening") UI.CreateToggle(aimTab, "Enable Dampening", "Aim/Dampening", Flags["Aim/Dampening"]) UI.CreateNumericInput(aimTab, "Dampening Threshold", "Aim/Dampening/Threshold", Flags["Aim/Dampening/Threshold"], 0, 500, 5, "px") UI.CreateNumericInput(aimTab, "Dampening Min Strength", "Aim/Dampening/Strength", Flags["Aim/Dampening/Strength"], 0, 100, 1, "%") UI.CreateSection(aimTab, "Target Zone Selector") do local TargetArea = Instance.new("Frame") TargetArea.Name = "TargetArea" TargetArea.Size = UDim2.new(1, 0, 0, 220) TargetArea.BackgroundTransparency = 1 TargetArea.Parent = aimTab local PriorityLabel = Instance.new("TextLabel") PriorityLabel.Name = "PriorityLabel" PriorityLabel.Size = UDim2.new(1, 0, 0, 25) PriorityLabel.Position = UDim2.new(0, 0, 0, 0) PriorityLabel.BackgroundTransparency = 1 PriorityLabel.Text = "Selected: Head" PriorityLabel.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) PriorityLabel.TextSize = 14 PriorityLabel.TextColor3 = THEME.Text PriorityLabel.Parent = TargetArea local HumanoidRoot = Instance.new("Frame") HumanoidRoot.Name = "HumanoidRoot" HumanoidRoot.Size = UDim2.fromOffset(100, 180) HumanoidRoot.Position = UDim2.new(0.5, 0, 0.5, 15) HumanoidRoot.AnchorPoint = Vector2.new(0.5, 0.5) HumanoidRoot.BackgroundTransparency = 1 HumanoidRoot.Parent = TargetArea local function UpdatePriorityLabel() local selected = {} for cat, on in pairs(Flags["Aim/TargetGroups"]) do if on then table.insert(selected, cat) end end if #selected == 0 or #selected == 6 then PriorityLabel.Text = "Selected: All body parts" else PriorityLabel.Text = "Selected: " .. table.concat(selected, ", ") end end local function CreatePart(name, size, pos, flagKey) local Part = Instance.new("TextButton") Part.Name = name Part.Size = size Part.Position = pos Part.BackgroundColor3 = Color3.fromRGB(255, 80, 80) Part.BackgroundTransparency = Flags["Aim/TargetGroups"][flagKey] and 0 or 1 Part.BorderSizePixel = 0 Part.Text = "" Part.Parent = HumanoidRoot local PartStroke = Instance.new("UIStroke") PartStroke.Color = Color3.fromRGB(255, 255, 255) PartStroke.Thickness = 1 PartStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border PartStroke.Parent = Part Part.MouseButton1Click:Connect(function() Flags["Aim/TargetGroups"][flagKey] = not Flags["Aim/TargetGroups"][flagKey] Part.BackgroundTransparency = Flags["Aim/TargetGroups"][flagKey] and 0 or 1 UpdatePriorityLabel() end) return Part end local Head = CreatePart("Head", UDim2.fromOffset(30, 30), UDim2.new(0.5, 0, 0, 0), "Head") Head.AnchorPoint = Vector2.new(0.5, 0) local HeadCorner = Instance.new("UICorner", Head) HeadCorner.CornerRadius = UDim.new(1, 0) local Torso = CreatePart("Torso", UDim2.fromOffset(40, 60), UDim2.new(0.5, 0, 0, 35), "Torso") Torso.AnchorPoint = Vector2.new(0.5, 0) local LeftArm = CreatePart("LeftArm", UDim2.fromOffset(20, 60), UDim2.new(0.5, -25, 0, 35), "LeftArm") LeftArm.AnchorPoint = Vector2.new(1, 0) local RightArm = CreatePart("RightArm", UDim2.fromOffset(20, 60), UDim2.new(0.5, 25, 0, 35), "RightArm") RightArm.AnchorPoint = Vector2.new(0, 0) local LeftLeg = CreatePart("LeftLeg", UDim2.fromOffset(18, 70), UDim2.new(0.5, -2, 0, 100), "LeftLeg") LeftLeg.AnchorPoint = Vector2.new(1, 0) local RightLeg = CreatePart("RightLeg", UDim2.fromOffset(18, 70), UDim2.new(0.5, 2, 0, 100), "RightLeg") RightLeg.AnchorPoint = Vector2.new(0, 0) UpdatePriorityLabel() end -- ── Tab: ESP ───────────────────────────────────────────────────── local espTab = UI.CreateTab("ESP") UI.CreateSection(espTab, "ESP") UI.CreateToggle(espTab, "Enable ESP", "ESP/Enabled", Flags["ESP/Enabled"], function(state) Notify("ESP", state and "ESP enabled." or "ESP disabled.") if not state then for _, data in pairs(ESP.Objects) do SafeSet(data.Nametag, "Enabled", false) if data.Highlight then SafeSet(data.Highlight, "Enabled", false) end end end end) UI.CreateToggle(espTab, "Show Username", "ESP/ShowUsername", Flags["ESP/ShowUsername"]) UI.CreateToggle(espTab, "Color By Role", "ESP/ColorByRole", Flags["ESP/ColorByRole"]) UI.CreateToggle(espTab, "Hide Teammates", "ESP/TeamCheck", Flags["ESP/TeamCheck"]) UI.CreateNumericInput(espTab, "Max Distance", "ESP/MaxDistance", Flags["ESP/MaxDistance"], 50, 10000, 50, "m") UI.CreateSection(espTab, "Player Info") UI.CreateToggle(espTab, "Show Health", "ESP/HealthIndicator", Flags["ESP/HealthIndicator"]) UI.CreateToggle(espTab, "Show Distance", "ESP/ShowDistance", Flags["ESP/ShowDistance"]) UI.CreateToggle(espTab, "Show Equipped", "ESP/ShowEquipped", Flags["ESP/ShowEquipped"]) UI.CreateSection(espTab, "Highlight") UI.CreateToggle(espTab, "Enable Highlight", "ESP/HighlightEnabled", Flags["ESP/HighlightEnabled"], function(state) for _, data in pairs(ESP.Objects) do if data.Highlight then SafeSet(data.Highlight, "Enabled", state) end end end) UI.CreateNumericInput(espTab, "Fill Transparency", "ESP/HighlightFillAlpha", Flags["ESP/HighlightFillAlpha"], 0, 1, 0.05, "", function(val) for _, data in pairs(ESP.Objects) do if data.Highlight then SafeSet(data.Highlight, "FillTransparency", val) end end end) UI.CreateNumericInput(espTab, "Outline Transparency", "ESP/HighlightOutlineAlpha", Flags["ESP/HighlightOutlineAlpha"], 0, 1, 0.05, "", function(val) for _, data in pairs(ESP.Objects) do if data.Highlight then SafeSet(data.Highlight, "OutlineTransparency", val) end end end) UI.CreateSection(espTab, "Legend") do local legend = Instance.new("Frame") legend.Size = UDim2.new(1, 0, 0, 120) legend.BackgroundColor3 = THEME.Element legend.BorderSizePixel = 0 legend.Parent = espTab local lCorner = Instance.new("UICorner") lCorner.CornerRadius = UDim.new(0, 6); lCorner.Parent = legend local roles = { {"Guard", ROLE_COLORS.Guard}, {"Inmate", ROLE_COLORS.Inmate}, {"Criminal", ROLE_COLORS.Criminal}, {"Neutral", ROLE_COLORS.Neutral}, } for i, data in ipairs(roles) do local dot = Instance.new("Frame") dot.Size = UDim2.fromOffset(10, 10) dot.Position = UDim2.fromOffset(16, 14 + (i - 1) * 24) dot.BackgroundColor3 = data[2] dot.BorderSizePixel = 0 dot.Parent = legend local dCorner = Instance.new("UICorner") dCorner.CornerRadius = UDim.new(1, 0); dCorner.Parent = dot local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -40, 0, 16) lbl.Position = UDim2.fromOffset(34, 12 + (i - 1) * 24) lbl.BackgroundTransparency = 1 lbl.Text = data[1] lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) lbl.TextSize = 12 lbl.TextColor3 = THEME.Text lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = legend end end -- ── Tab: Humanoid ──────────────────────────────────────────────── local humanoidTab = UI.CreateTab("Humanoid") UI.CreateSection(humanoidTab, "Movement") UI.CreateNumericInput(humanoidTab, "Walk Speed", "Humanoid/WalkSpeed", 16, 0, 500, 1, nil, function(v) local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then pcall(function() hum.WalkSpeed = v end) end end, true) UI.CreateNumericInput(humanoidTab, "Jump Power", "Humanoid/JumpPower", 50, 0, 500, 1, nil, function(v) local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then pcall(function() hum.JumpPower = v end) end end, true) UI.CreateNumericInput(humanoidTab, "Jump Height", "Humanoid/JumpHeight", 7.2, 0, 500, 0.5, nil, function(v) local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then pcall(function() hum.JumpHeight = v end) end end, true) UI.CreateNumericInput(humanoidTab, "Hip Height", "Humanoid/HipHeight", 2, 0, 100, 0.5, nil, function(v) local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then pcall(function() hum.HipHeight = v end) end end, true) UI.CreateSection(humanoidTab, "Health") UI.CreateNumericInput(humanoidTab, "Max Health", "Humanoid/MaxHealth", 100, 0, 2000, 1, nil, function(v) local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then pcall(function() hum.MaxHealth = v end) end end, true) -- ── Tab: Noclip ────────────────────────────────────────────────── local noclipTab = UI.CreateTab("Noclip") UI.CreateSection(noclipTab, "Noclip") UI.CreateToggle(noclipTab, "Enable Noclip", "Noclip/Enabled", Flags["Noclip/Enabled"], function(state) if state then Notify("Noclip", "Noclip enabled — scanning walls...") task.spawn(function() ScanAndBreak() Notify("Noclip", "Done. Broken: " .. tostring(Noclip.BrokenCount)) end) else Notify("Noclip", "Noclip disabled — restoring walls.") RestoreAll() end end) UI.CreateNumericInput(noclipTab, "Radius", "Noclip/Radius", Flags["Noclip/Radius"], 50, 2000, 25, "m") UI.CreateToggle(noclipTab, "Include Anchored (Walls)", "Noclip/IncludeAnchored", Flags["Noclip/IncludeAnchored"]) UI.CreateToggle(noclipTab, "Include Unanchored (Objects)", "Noclip/IncludeUnanchored", Flags["Noclip/IncludeUnanchored"]) UI.CreateSection(noclipTab, "Actions") UI.CreateButton(noclipTab, "Force Rescan Now", function() if Flags["Noclip/Enabled"] then task.spawn(function() ScanAndBreak() Notify("Noclip", "Rescan done. Broken: " .. tostring(Noclip.BrokenCount)) end) else Notify("Noclip", "Enable Noclip first.") end end) UI.CreateButton(noclipTab, "Restore All", function() RestoreAll() Notify("Noclip", "All walls restored.") end) -- ══════════════════════════════════════════════════════════════════ -- TAB: TELEPORT -- ══════════════════════════════════════════════════════════════════ local teleportTab = UI.CreateTab("Teleport") -- ── Preset buttons ── UI.CreateSection(teleportTab, "Preset Locations") local presetList = Instance.new("Frame") presetList.Name = "PresetList" presetList.Size = UDim2.new(1, 0, 0, 0) presetList.AutomaticSize = Enum.AutomaticSize.Y presetList.BackgroundTransparency = 1 presetList.Parent = teleportTab local plLayout = Instance.new("UIListLayout") plLayout.Padding = UDim.new(0, 4) plLayout.SortOrder = Enum.SortOrder.LayoutOrder plLayout.Parent = presetList for i, loc in ipairs(TELEPORT_PRESETS) do local btn = Instance.new("TextButton") btn.Name = "Preset_" .. i btn.Size = UDim2.new(1, 0, 0, 32) btn.BackgroundColor3 = THEME.Element btn.Text = string.format("%s (%.0f, %.0f, %.0f)", loc.name, loc.pos.X, loc.pos.Y, loc.pos.Z) btn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) btn.TextSize = 11 btn.TextColor3 = THEME.Text btn.BorderSizePixel = 0 btn.LayoutOrder = i btn.Parent = presetList local bCorner = Instance.new("UICorner") bCorner.CornerRadius = UDim.new(0, 6); bCorner.Parent = btn local bStroke = Instance.new("UIStroke") bStroke.Color = THEME.Accent; bStroke.Thickness = 1 bStroke.Transparency = 0.7 bStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border bStroke.Parent = btn btn.MouseButton1Click:Connect(function() TeleportToPosition(loc.pos) end) end -- ── Save current location ── UI.CreateSection(teleportTab, "Save Current Location") local saveFrame = Instance.new("Frame") saveFrame.Size = UDim2.new(1, 0, 0, 42) saveFrame.BackgroundColor3 = THEME.Element saveFrame.BorderSizePixel = 0 saveFrame.Parent = teleportTab local sfCorner = Instance.new("UICorner") sfCorner.CornerRadius = UDim.new(0, 6); sfCorner.Parent = saveFrame local saveInput = Instance.new("TextBox") saveInput.Name = "SaveName" saveInput.Size = UDim2.new(1, -110, 0, 30) saveInput.Position = UDim2.new(0, 8, 0, 6) saveInput.BackgroundColor3 = Color3.fromRGB(48, 48, 55) saveInput.BorderSizePixel = 0 saveInput.PlaceholderText = "Location name..." saveInput.Text = "" saveInput.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) saveInput.TextSize = 12 saveInput.TextColor3 = THEME.Text saveInput.ClearTextOnFocus = false saveInput.Parent = saveFrame local siCorner = Instance.new("UICorner") siCorner.CornerRadius = UDim.new(0, 6); siCorner.Parent = saveInput local saveBtn = Instance.new("TextButton") saveBtn.Name = "SaveBtn" saveBtn.Size = UDim2.new(0, 95, 0, 30) saveBtn.Position = UDim2.new(1, -103, 0, 6) saveBtn.BackgroundColor3 = THEME.Success saveBtn.Text = "💾 Save" saveBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) saveBtn.TextSize = 12 saveBtn.TextColor3 = Color3.fromRGB(20, 20, 22) saveBtn.BorderSizePixel = 0 saveBtn.Parent = saveFrame local sbCorner = Instance.new("UICorner") sbCorner.CornerRadius = UDim.new(0, 6); sbCorner.Parent = saveBtn -- Saved locations list UI.CreateSection(teleportTab, "Saved Locations") local savedListFrame = Instance.new("Frame") savedListFrame.Name = "SavedList" savedListFrame.Size = UDim2.new(1, 0, 0, 0) savedListFrame.AutomaticSize = Enum.AutomaticSize.Y savedListFrame.BackgroundTransparency = 1 savedListFrame.Parent = teleportTab local slLayout = Instance.new("UIListLayout") slLayout.Padding = UDim.new(0, 4) slLayout.SortOrder = Enum.SortOrder.LayoutOrder slLayout.Parent = savedListFrame local function RefreshSavedList() for _, ch in ipairs(savedListFrame:GetChildren()) do if not ch:IsA("UIListLayout") then ch:Destroy() end end local count = 0 local sortedNames = {} for name, _ in pairs(SavedLocations) do table.insert(sortedNames, name) end table.sort(sortedNames) for i, name in ipairs(sortedNames) do local posTable = SavedLocations[name] count = count + 1 local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 36) row.BackgroundColor3 = THEME.Element row.BorderSizePixel = 0 row.LayoutOrder = i row.Parent = savedListFrame local rCorner = Instance.new("UICorner") rCorner.CornerRadius = UDim.new(0, 6); rCorner.Parent = row local nameLbl = Instance.new("TextLabel") nameLbl.Size = UDim2.new(1, -130, 1, 0) nameLbl.Position = UDim2.new(0, 10, 0, 0) nameLbl.BackgroundTransparency = 1 nameLbl.Text = name nameLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) nameLbl.TextSize = 12 nameLbl.TextColor3 = THEME.Text nameLbl.TextXAlignment = Enum.TextXAlignment.Left nameLbl.Parent = row local goBtn = Instance.new("TextButton") goBtn.Size = UDim2.new(0, 65, 0, 26) goBtn.Position = UDim2.new(1, -100, 0.5, -13) goBtn.BackgroundColor3 = THEME.Accent goBtn.Text = "GO" goBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) goBtn.TextSize = 11 goBtn.TextColor3 = Color3.fromRGB(20, 20, 22) goBtn.BorderSizePixel = 0 goBtn.Parent = row local gCorner = Instance.new("UICorner") gCorner.CornerRadius = UDim.new(0, 6); gCorner.Parent = goBtn goBtn.MouseButton1Click:Connect(function() local v3 = Vector3.new(posTable.X, posTable.Y, posTable.Z) TeleportToPosition(v3) end) local delBtn = Instance.new("TextButton") delBtn.Size = UDim2.new(0, 26, 0, 26) delBtn.Position = UDim2.new(1, -30, 0.5, -13) delBtn.BackgroundColor3 = Color3.fromRGB(70, 30, 30) delBtn.Text = "✕" delBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) delBtn.TextSize = 13 delBtn.TextColor3 = Color3.fromRGB(230, 100, 100) delBtn.BorderSizePixel = 0 delBtn.Parent = row local dCorner = Instance.new("UICorner") dCorner.CornerRadius = UDim.new(0, 6); dCorner.Parent = delBtn delBtn.MouseButton1Click:Connect(function() SavedLocations[name] = nil SaveLocationsToDisk() RefreshSavedList() Notify("Teleport", "Deleted '" .. name .. "'") end) end if count == 0 then local emptyLbl = Instance.new("TextLabel") emptyLbl.Size = UDim2.new(1, 0, 0, 30) emptyLbl.BackgroundTransparency = 1 emptyLbl.Text = "No saved locations yet." emptyLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Italic) emptyLbl.TextSize = 11 emptyLbl.TextColor3 = THEME.TextDark emptyLbl.LayoutOrder = 1 emptyLbl.Parent = savedListFrame end end saveBtn.MouseButton1Click:Connect(function() local name = saveInput.Text name = tostring(name or ""):gsub("^%s+", ""):gsub("%s+$", "") if name == "" then Notify("Teleport", "Please enter a name.") return end local pos = GetCurrentPosition() if not pos then Notify("Teleport", "Could not read current position.") return end SavedLocations[name] = { X = pos.X, Y = pos.Y, Z = pos.Z } SaveLocationsToDisk() saveInput.Text = "" RefreshSavedList() Notify("Teleport", string.format("Saved '%s'", name)) end) RefreshSavedList() -- ══════════════════════════════════════════════════════════════════ -- TAB: GOTO PLAYERS -- ══════════════════════════════════════════════════════════════════ local gotoPlayersTab = UI.CreateTab("Go-To Players") -- Filter row UI.CreateSection(gotoPlayersTab, "Filter Roles") local filterFrame = Instance.new("Frame") filterFrame.Size = UDim2.new(1, 0, 0, 36) filterFrame.BackgroundColor3 = THEME.Element filterFrame.BorderSizePixel = 0 filterFrame.Parent = gotoPlayersTab local ffCorner = Instance.new("UICorner") ffCorner.CornerRadius = UDim.new(0, 6); ffCorner.Parent = filterFrame local filterLayout = Instance.new("UIListLayout") filterLayout.FillDirection = Enum.FillDirection.Horizontal filterLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center filterLayout.VerticalAlignment = Enum.VerticalAlignment.Center filterLayout.Padding = UDim.new(0, 3) filterLayout.Parent = filterFrame local RoleFilter = { Guard = true, Inmate = true, Criminal = true, Neutral = true, Unknown = true, } local RefreshGotoListRef = nil for _, roleName in ipairs({"Guard", "Inmate", "Criminal", "Neutral", "Unknown"}) do local fBtn = Instance.new("TextButton") fBtn.Size = UDim2.fromOffset(70, 26) fBtn.BackgroundColor3 = ROLE_COLORS[roleName] fBtn.BackgroundTransparency = RoleFilter[roleName] and 0 or 0.7 fBtn.Text = roleName fBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) fBtn.TextSize = 10 fBtn.TextColor3 = Color3.fromRGB(20, 20, 22) fBtn.BorderSizePixel = 0 fBtn.Parent = filterFrame local fCorner = Instance.new("UICorner") fCorner.CornerRadius = UDim.new(0, 4); fCorner.Parent = fBtn fBtn.MouseButton1Click:Connect(function() RoleFilter[roleName] = not RoleFilter[roleName] fBtn.BackgroundTransparency = RoleFilter[roleName] and 0 or 0.7 if RefreshGotoListRef then pcall(RefreshGotoListRef) end end) end -- Player list UI.CreateSection(gotoPlayersTab, "Players") local playersListFrame = Instance.new("Frame") playersListFrame.Name = "PlayersList" playersListFrame.Size = UDim2.new(1, 0, 0, 0) playersListFrame.AutomaticSize = Enum.AutomaticSize.Y playersListFrame.BackgroundTransparency = 1 playersListFrame.Parent = gotoPlayersTab local gplLayout = Instance.new("UIListLayout") gplLayout.Padding = UDim.new(0, 4) gplLayout.SortOrder = Enum.SortOrder.LayoutOrder gplLayout.Parent = playersListFrame local function RefreshGotoPlayers() for _, ch in ipairs(playersListFrame:GetChildren()) do if not ch:IsA("UIListLayout") then ch:Destroy() end end local myRoot = GetMyRoot() local myPos = myRoot and myRoot.Position or Vector3.zero local groups = { Guard = {}, Inmate = {}, Criminal = {}, Neutral = {}, Unknown = {}, } for _, p in ipairs(GetPlayersCache()) do if p ~= LocalPlayer and p.Parent then local char, root = GetCharacter(p) if char and root then local role = DetectRole(p) if not groups[role] then role = "Unknown" end local dist = (root.Position - myPos).Magnitude table.insert(groups[role], {player = p, dist = dist}) end end end local order = 1 for _, roleName in ipairs({"Guard", "Inmate", "Criminal", "Neutral", "Unknown"}) do if RoleFilter[roleName] then local list = groups[roleName] table.sort(list, function(a, b) return a.dist < b.dist end) if #list > 0 then -- Header local header = Instance.new("Frame") header.Size = UDim2.new(1, 0, 0, 22) header.BackgroundTransparency = 1 header.LayoutOrder = order header.Parent = playersListFrame order = order + 1 local hLbl = Instance.new("TextLabel") hLbl.Size = UDim2.new(1, 0, 1, 0) hLbl.Position = UDim2.new(0, 4, 0, 0) hLbl.BackgroundTransparency = 1 hLbl.Text = string.format("%s (%d)", string.upper(roleName), #list) hLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.ExtraBold, Enum.FontStyle.Normal) hLbl.TextSize = 11 hLbl.TextColor3 = ROLE_COLORS[roleName] hLbl.TextXAlignment = Enum.TextXAlignment.Left hLbl.Parent = header for _, entry in ipairs(list) do local p = entry.player local dist = math.floor(entry.dist) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 40) row.BackgroundColor3 = THEME.Element row.BorderSizePixel = 0 row.LayoutOrder = order row.Parent = playersListFrame order = order + 1 local rCorner = Instance.new("UICorner") rCorner.CornerRadius = UDim.new(0, 6); rCorner.Parent = row -- Left color bar local bar = Instance.new("Frame") bar.Size = UDim2.new(0, 3, 1, -8) bar.Position = UDim2.new(0, 4, 0, 4) bar.BackgroundColor3 = ROLE_COLORS[roleName] bar.BorderSizePixel = 0 bar.Parent = row local barCorner = Instance.new("UICorner") barCorner.CornerRadius = UDim.new(1, 0); barCorner.Parent = bar local nameLbl = Instance.new("TextLabel") nameLbl.Size = UDim2.new(1, -110, 0, 18) nameLbl.Position = UDim2.new(0, 14, 0, 3) nameLbl.BackgroundTransparency = 1 nameLbl.Text = p.DisplayName or p.Name nameLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) nameLbl.TextSize = 12 nameLbl.TextColor3 = ROLE_COLORS[roleName] nameLbl.TextXAlignment = Enum.TextXAlignment.Left nameLbl.Parent = row local subLbl = Instance.new("TextLabel") subLbl.Size = UDim2.new(1, -110, 0, 14) subLbl.Position = UDim2.new(0, 14, 0, 22) subLbl.BackgroundTransparency = 1 subLbl.Text = string.format("@%s | %d studs", p.Name, dist) subLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Normal) subLbl.TextSize = 10 subLbl.TextColor3 = THEME.TextDark subLbl.TextXAlignment = Enum.TextXAlignment.Left subLbl.Parent = row local goBtn = Instance.new("TextButton") goBtn.Size = UDim2.new(0, 84, 0, 28) goBtn.Position = UDim2.new(1, -92, 0.5, -14) goBtn.BackgroundColor3 = ROLE_COLORS[roleName] goBtn.Text = "GOTO" goBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.ExtraBold, Enum.FontStyle.Normal) goBtn.TextSize = 11 goBtn.TextColor3 = Color3.fromRGB(20, 20, 22) goBtn.BorderSizePixel = 0 goBtn.Parent = row local gCorner = Instance.new("UICorner") gCorner.CornerRadius = UDim.new(0, 6); gCorner.Parent = goBtn goBtn.MouseButton1Click:Connect(function() local char, root = GetCharacter(p) if char and root then local behindPos = root.Position + Vector3.new(0, 0, 3) TeleportToPosition(behindPos) else Notify("Go-To", "Player has no character.") end end) end end end end -- Empty state local anyVisible = false for _, roleName in ipairs({"Guard", "Inmate", "Criminal", "Neutral", "Unknown"}) do if RoleFilter[roleName] and #groups[roleName] > 0 then anyVisible = true break end end if not anyVisible then local emptyLbl = Instance.new("TextLabel") emptyLbl.Size = UDim2.new(1, 0, 0, 30) emptyLbl.BackgroundTransparency = 1 emptyLbl.Text = "No players match the current filter." emptyLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Italic) emptyLbl.TextSize = 11 emptyLbl.TextColor3 = THEME.TextDark emptyLbl.LayoutOrder = 1 emptyLbl.Parent = playersListFrame end end RefreshGotoListRef = RefreshGotoPlayers -- Refresh when page becomes visible task.spawn(function() while true do task.wait(1.5) if State.CurrentTab == "Go-To Players" then pcall(RefreshGotoPlayers) end end end) RefreshGotoPlayers() -- ══════════════════════════════════════════════════════════════════ -- Tab: Auto-Give -- ══════════════════════════════════════════════════════════════════ local autoTab = UI.CreateTab("Auto-Give") UI.CreateSection(autoTab, "Auto-Give (MP5 + Remington)") UI.CreateToggle(autoTab, "Enable Auto-Give", "AutoGive/Enabled", Flags["AutoGive/Enabled"], function(state) if state then Notify("Auto-Give", "Auto-Give enabled.") task.spawn(function() SpawnTouchGiversInFront() end) else Notify("Auto-Give", "Auto-Give disabled.") end end) UI.CreateButton(autoTab, "Visit TouchGivers Now", function() task.spawn(function() SpawnTouchGiversInFront(true) Notify("Auto-Give", "Visited TouchGivers.") end) end) -- ══════════════════════════════════════════════════════════════════ -- Tab: Arrest -- ══════════════════════════════════════════════════════════════════ local arrestTab = UI.CreateTab("Arrest") local arrestWrapper = Instance.new("Frame") arrestWrapper.Name = "ArrestWrapper" arrestWrapper.Size = UDim2.new(1, 0, 0, 0) arrestWrapper.AutomaticSize = Enum.AutomaticSize.Y arrestWrapper.BackgroundTransparency = 1 arrestWrapper.Parent = arrestTab arrestWrapper.LayoutOrder = 1 local wrapperLayout = Instance.new("UIListLayout") wrapperLayout.Padding = UDim.new(0, 5) wrapperLayout.SortOrder = Enum.SortOrder.LayoutOrder wrapperLayout.Parent = arrestWrapper local function MakeArrestSectionTitle(text, order) local container = Instance.new("Frame") container.Size = UDim2.new(1, 0, 0, 24) container.BackgroundTransparency = 1 container.LayoutOrder = order container.Parent = arrestWrapper local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 1, 0) lbl.Position = UDim2.new(0, 2, 0, 4) lbl.BackgroundTransparency = 1 lbl.Text = string.upper(text) lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) lbl.TextSize = 10 lbl.TextColor3 = THEME.Accent lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = container end local function MakeArrestNumericRow(labelText, flag, default, minV, maxV, step, unit, order) local frame = Instance.new("Frame") frame.Size = UDim2.new(1, 0, 0, 50) frame.BackgroundColor3 = THEME.Element frame.BorderSizePixel = 0 frame.LayoutOrder = order frame.Parent = arrestWrapper local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, 6); c.Parent = frame local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(0.55, -12, 1, 0) lbl.Position = UDim2.new(0, 12, 0, 0) lbl.BackgroundTransparency = 1 lbl.Text = labelText lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) lbl.TextSize = 12 lbl.TextColor3 = THEME.Text lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Parent = frame if Flags[flag] == nil then Flags[flag] = default end local inputFrame = Instance.new("Frame") inputFrame.Size = UDim2.new(0.45, -12, 0, 30) inputFrame.Position = UDim2.new(1, -12, 0.5, 0) inputFrame.AnchorPoint = Vector2.new(1, 0.5) inputFrame.BackgroundColor3 = Color3.fromRGB(48, 48, 55) inputFrame.BorderSizePixel = 0 inputFrame.Parent = frame local ifc = Instance.new("UICorner") ifc.CornerRadius = UDim.new(0, 6); ifc.Parent = inputFrame local box = Instance.new("TextBox") box.Size = UDim2.new(1, -50, 1, 0) box.Position = UDim2.new(0, 25, 0, 0) box.BackgroundTransparency = 1 box.Text = tostring(Flags[flag]) .. (unit or "") box.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) box.TextSize = 12 box.TextColor3 = THEME.Accent box.ClearTextOnFocus = false box.Parent = inputFrame local function commit(val) val = math.clamp(tonumber(val) or Flags[flag], minV, maxV) if step and step > 0 then val = math.floor(val / step + 0.5) * step end Flags[flag] = val box.Text = tostring(val) .. (unit or "") end box.FocusLost:Connect(function() commit((box.Text:gsub("[^%d%.%-]", ""))) end) local minus = Instance.new("TextButton") minus.Size = UDim2.new(0, 25, 1, 0) minus.BackgroundTransparency = 1 minus.Text = "−" minus.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) minus.TextSize = 16 minus.TextColor3 = THEME.TextDark minus.Parent = inputFrame minus.MouseButton1Click:Connect(function() commit(Flags[flag] - (step or 1)) end) local plus = Instance.new("TextButton") plus.Size = UDim2.new(0, 25, 1, 0) plus.Position = UDim2.new(1, -25, 0, 0) plus.BackgroundTransparency = 1 plus.Text = "+" plus.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) plus.TextSize = 16 plus.TextColor3 = THEME.TextDark plus.Parent = inputFrame plus.MouseButton1Click:Connect(function() commit(Flags[flag] + (step or 1)) end) end -- Status banner local arrestStatusFrame = Instance.new("Frame") arrestStatusFrame.Name = "StatusFrame" arrestStatusFrame.Size = UDim2.new(1, 0, 0, 44) arrestStatusFrame.BackgroundColor3 = THEME.Element arrestStatusFrame.BorderSizePixel = 0 arrestStatusFrame.LayoutOrder = 1 arrestStatusFrame.Parent = arrestWrapper local asCorner = Instance.new("UICorner") asCorner.CornerRadius = UDim.new(0, 6); asCorner.Parent = arrestStatusFrame local arrestStatusLbl = Instance.new("TextLabel") arrestStatusLbl.Name = "StatusLabel" arrestStatusLbl.Size = UDim2.new(1, -16, 1, 0) arrestStatusLbl.Position = UDim2.new(0, 8, 0, 0) arrestStatusLbl.BackgroundTransparency = 1 arrestStatusLbl.Text = "Checking role..." arrestStatusLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) arrestStatusLbl.TextSize = 12 arrestStatusLbl.TextColor3 = THEME.Text arrestStatusLbl.TextXAlignment = Enum.TextXAlignment.Left arrestStatusLbl.TextWrapped = true arrestStatusLbl.Parent = arrestStatusFrame MakeArrestSectionTitle("Settings", 2) local enableRow = Instance.new("Frame") enableRow.Size = UDim2.new(1, 0, 0, 38) enableRow.BackgroundColor3 = THEME.Element enableRow.BorderSizePixel = 0 enableRow.LayoutOrder = 3 enableRow.Parent = arrestWrapper local erCorner = Instance.new("UICorner") erCorner.CornerRadius = UDim.new(0, 6); erCorner.Parent = enableRow local enableLabel = Instance.new("TextLabel") enableLabel.Size = UDim2.new(1, -70, 1, 0) enableLabel.Position = UDim2.new(0, 12, 0, 0) enableLabel.BackgroundTransparency = 1 enableLabel.Text = "Enable Arrest" enableLabel.FontFace = Font.fromName("Montserrat", Enum.FontWeight.SemiBold, Enum.FontStyle.Normal) enableLabel.TextSize = 12 enableLabel.TextColor3 = THEME.Text enableLabel.TextXAlignment = Enum.TextXAlignment.Left enableLabel.Parent = enableRow local enableSwitch = Instance.new("Frame") enableSwitch.Size = UDim2.fromOffset(44, 22) enableSwitch.AnchorPoint = Vector2.new(1, 0.5) enableSwitch.Position = UDim2.new(1, -12, 0.5, 0) enableSwitch.BackgroundColor3 = Flags["Arrest/Enabled"] and THEME.Accent or Color3.fromRGB(55, 55, 62) enableSwitch.BorderSizePixel = 0 enableSwitch.Parent = enableRow local esCorner = Instance.new("UICorner") esCorner.CornerRadius = UDim.new(1, 0); esCorner.Parent = enableSwitch local enableKnob = Instance.new("Frame") enableKnob.Size = UDim2.fromOffset(18, 18) enableKnob.AnchorPoint = Vector2.new(0, 0.5) enableKnob.Position = Flags["Arrest/Enabled"] and UDim2.new(1, -20, 0.5, 0) or UDim2.new(0, 2, 0.5, 0) enableKnob.BackgroundColor3 = Color3.fromRGB(240, 240, 245) enableKnob.BorderSizePixel = 0 enableKnob.Parent = enableSwitch local ekCorner = Instance.new("UICorner") ekCorner.CornerRadius = UDim.new(1, 0); ekCorner.Parent = enableKnob local enableClick = Instance.new("TextButton") enableClick.Size = UDim2.new(1, 0, 1, 0) enableClick.BackgroundTransparency = 1 enableClick.Text = "" enableClick.Parent = enableSwitch local function UpdateEnableVisuals(state) TweenService:Create(enableSwitch, TweenInfo.new(0.15), { BackgroundColor3 = state and THEME.Accent or Color3.fromRGB(55, 55, 62), }):Play() TweenService:Create(enableKnob, TweenInfo.new(0.15), { Position = state and UDim2.new(1, -20, 0.5, 0) or UDim2.new(0, 2, 0.5, 0), }):Play() end enableClick.MouseButton1Click:Connect(function() Flags["Arrest/Enabled"] = not Flags["Arrest/Enabled"] UpdateEnableVisuals(Flags["Arrest/Enabled"]) end) MakeArrestNumericRow("Stick Distance (Behind)", "Arrest/StickDistance", 2.2, 0.5, 20.0, 0.5, "studs", 4) MakeArrestNumericRow("Stick Height", "Arrest/StickHeight", 0.0, -5.0, 10.0, 0.5, "studs", 5) MakeArrestNumericRow("Stick Duration", "Arrest/StickDuration", 5.0, 0.5, 60.0, 0.5, "s", 6) MakeArrestSectionTitle("Criminals", 7) local arrestListFrame = Instance.new("Frame") arrestListFrame.Name = "ArrestListFrame" arrestListFrame.Size = UDim2.new(1, 0, 0, 0) arrestListFrame.AutomaticSize = Enum.AutomaticSize.Y arrestListFrame.BackgroundTransparency = 1 arrestListFrame.LayoutOrder = 8 arrestListFrame.Parent = arrestWrapper local alLayout = Instance.new("UIListLayout") alLayout.Padding = UDim.new(0, 4) alLayout.SortOrder = Enum.SortOrder.LayoutOrder alLayout.Parent = arrestListFrame local function ClearArrestList() for _, ch in ipairs(arrestListFrame:GetChildren()) do if not ch:IsA("UIListLayout") then ch:Destroy() end end end local function RefreshArrestList() ClearArrestList() local isGuard = IsLocalGuard() if not isGuard then arrestStatusLbl.Text = "❌ You are not a Guard. Arrest is disabled." arrestStatusLbl.TextColor3 = THEME.Fail local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 0, 30) lbl.BackgroundTransparency = 1 lbl.Text = "Join the Guards team to use this tab." lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Italic) lbl.TextSize = 12 lbl.TextColor3 = THEME.TextDark lbl.LayoutOrder = 1 lbl.Parent = arrestListFrame return end local hasCuffs = false local backpack = LocalPlayer:FindFirstChild("Backpack") local char = LocalPlayer.Character local toolName = Flags["Arrest/ToolName"] or "Handcuffs" if backpack and backpack:FindFirstChild(toolName) then hasCuffs = true end if char and char:FindFirstChild(toolName) then hasCuffs = true end local criminals = GetCriminalsList() if hasCuffs then arrestStatusLbl.Text = string.format("✓ Guard | Handcuffs ready | %d criminal(s)", #criminals) arrestStatusLbl.TextColor3 = THEME.Success else arrestStatusLbl.Text = string.format("⚠ Guard | No Handcuffs in backpack | %d criminal(s)", #criminals) arrestStatusLbl.TextColor3 = Color3.fromRGB(230, 190, 60) end if #criminals == 0 then local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, 0, 0, 30) lbl.BackgroundTransparency = 1 lbl.Text = "No criminals detected." lbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Italic) lbl.TextSize = 12 lbl.TextColor3 = THEME.TextDark lbl.LayoutOrder = 1 lbl.Parent = arrestListFrame return end for i, data in ipairs(criminals) do local p = data.player local dist = math.floor(data.dist) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 44) row.BackgroundColor3 = THEME.Element row.BorderSizePixel = 0 row.LayoutOrder = i row.Parent = arrestListFrame local rCorner = Instance.new("UICorner") rCorner.CornerRadius = UDim.new(0, 6); rCorner.Parent = row local nameLbl = Instance.new("TextLabel") nameLbl.Size = UDim2.new(1, -110, 0, 20) nameLbl.Position = UDim2.new(0, 10, 0, 4) nameLbl.BackgroundTransparency = 1 nameLbl.Text = p.DisplayName or p.Name nameLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) nameLbl.TextSize = 13 nameLbl.TextColor3 = ROLE_COLORS.Criminal nameLbl.TextXAlignment = Enum.TextXAlignment.Left nameLbl.Parent = row local subLbl = Instance.new("TextLabel") subLbl.Size = UDim2.new(1, -110, 0, 16) subLbl.Position = UDim2.new(0, 10, 0, 23) subLbl.BackgroundTransparency = 1 subLbl.Text = string.format("@%s | %d studs", p.Name, dist) subLbl.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Regular, Enum.FontStyle.Normal) subLbl.TextSize = 11 subLbl.TextColor3 = THEME.TextDark subLbl.TextXAlignment = Enum.TextXAlignment.Left subLbl.Parent = row local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 90, 0, 30) btn.Position = UDim2.new(1, -100, 0.5, -15) btn.BackgroundColor3 = Color3.fromRGB(180, 60, 60) btn.Text = "STICK" btn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.ExtraBold, Enum.FontStyle.Normal) btn.TextSize = 12 btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.BorderSizePixel = 0 btn.Parent = row local bCorner = Instance.new("UICorner") bCorner.CornerRadius = UDim.new(0, 6); bCorner.Parent = btn btn.MouseButton1Click:Connect(function() if not Flags["Arrest/Enabled"] then Notify("Arrest", "Arrest is disabled. Enable it in the Arrest tab.") return end if not IsLocalGuard() then Notify("Arrest", "You must be a Guard to arrest.") return end if ArrestState.Running then StopArrestStick() end task.spawn(function() ArrestPlayer(p) end) end) end end local stopArrestBtn = Instance.new("TextButton") stopArrestBtn.Size = UDim2.new(1, 0, 0, 34) stopArrestBtn.BackgroundColor3 = Color3.fromRGB(70, 30, 30) stopArrestBtn.Text = "■ Stop Sticking" stopArrestBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) stopArrestBtn.TextSize = 12 stopArrestBtn.TextColor3 = Color3.fromRGB(230, 100, 100) stopArrestBtn.BorderSizePixel = 0 stopArrestBtn.LayoutOrder = 9 stopArrestBtn.Parent = arrestWrapper local sabCorner = Instance.new("UICorner") sabCorner.CornerRadius = UDim.new(0, 6); sabCorner.Parent = stopArrestBtn stopArrestBtn.MouseButton1Click:Connect(function() StopArrestStick() end) local refreshArrestBtn = Instance.new("TextButton") refreshArrestBtn.Size = UDim2.new(1, 0, 0, 34) refreshArrestBtn.BackgroundColor3 = THEME.Accent refreshArrestBtn.BackgroundTransparency = 0.15 refreshArrestBtn.Text = "↻ Refresh Criminal List" refreshArrestBtn.FontFace = Font.fromName("Montserrat", Enum.FontWeight.Bold, Enum.FontStyle.Normal) refreshArrestBtn.TextSize = 12 refreshArrestBtn.TextColor3 = Color3.fromRGB(20, 20, 22) refreshArrestBtn.BorderSizePixel = 0 refreshArrestBtn.LayoutOrder = 10 refreshArrestBtn.Parent = arrestWrapper local rabCorner = Instance.new("UICorner") rabCorner.CornerRadius = UDim.new(0, 6); rabCorner.Parent = refreshArrestBtn local rabStroke = Instance.new("UIStroke") rabStroke.Color = THEME.Accent; rabStroke.Thickness = 1 rabStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border rabStroke.Parent = refreshArrestBtn refreshArrestBtn.MouseButton1Click:Connect(function() RefreshArrestList() end) task.spawn(function() while true do task.wait(1.5) if State.CurrentTab == "Arrest" then pcall(RefreshArrestList) end end end) -- ══════════════════════════════════════════════════════════════════ -- PLAYER LIFECYCLE -- ══════════════════════════════════════════════════════════════════ Players.PlayerAdded:Connect(function(player) UpdatePlayerCache() end) Players.PlayerRemoving:Connect(function(player) UpdatePlayerCache() RemoveNametag(player) CharCache[player] = nil if AimState.LastAimTarget == player then ClearAimLockState(false) end end) UpdatePlayerCache() local function OnLocalCharacterAdded(character) task.wait(0.5) CaptureHumanoidSettings() task.wait(0.3) ApplySavedHumanoidSettings() if Flags["AutoGive/Enabled"] then task.spawn(function() SpawnTouchGiversInFront() end) end task.wait(0.5) pcall(RefreshArrestList) end LocalPlayer.CharacterAdded:Connect(OnLocalCharacterAdded) if LocalPlayer.Character then task.spawn(function() task.wait(1) CaptureHumanoidSettings() task.wait(0.3) ApplySavedHumanoidSettings() if Flags["AutoGive/Enabled"] then SpawnTouchGiversInFront() end task.wait(0.5) pcall(RefreshArrestList) end) end -- ══════════════════════════════════════════════════════════════════ -- MAIN LOOPS -- ══════════════════════════════════════════════════════════════════ local lastESPUpdate = 0 local ESP_UPDATE_INTERVAL = 0.1 local lastNoclipScan = 0 local NOCLIP_SCAN_INTERVAL = 0.75 local lastNoclipEnforce = 0 local NOCLIP_ENFORCE_INTERVAL = 0.2 local lastCharCachePrune = 0 local CHAR_CACHE_PRUNE_INTERVAL = 5.0 local lastHumanoidEnforce = 0 local HUMANOID_ENFORCE_INTERVAL = 0.1 local function PruneCharCache() local now = os.clock() if (now - lastCharCachePrune) < CHAR_CACHE_PRUNE_INTERVAL then return end lastCharCachePrune = now local playerMap = {} for i = 1, #cachedPlayersList do playerMap[cachedPlayersList[i]] = true end for player, cache in pairs(CharCache) do if not playerMap[player] or not player.Parent then if AimState.LastAimTarget == player then ClearAimLockState(false) end cache.Char = nil cache.Root = nil cache.Humanoid = nil cache.Head = nil CharCache[player] = nil elseif cache.Char and not cache.Char.Parent then if AimState.LastAimTarget == player then ClearAimLockState(false) end cache.Char = nil cache.Root = nil cache.Humanoid = nil cache.Head = nil end end end RunService.Heartbeat:Connect(function() local now = tick() if now - lastESPUpdate >= ESP_UPDATE_INTERVAL then lastESPUpdate = now if Flags["ESP/Enabled"] then RefreshESP() end end if Flags["Noclip/Enabled"] then if now - lastNoclipScan >= NOCLIP_SCAN_INTERVAL then lastNoclipScan = now ScanAndBreak() end if now - lastNoclipEnforce >= NOCLIP_ENFORCE_INTERVAL then lastNoclipEnforce = now EnforceNoclip() end end if now - lastHumanoidEnforce >= HUMANOID_ENFORCE_INTERVAL then lastHumanoidEnforce = now ApplyHumanoidSettings() end PruneCharCache() end) RunService.RenderStepped:Connect(UpdateAim) -- ══════════════════════════════════════════════════════════════════ -- CLEANUP -- ══════════════════════════════════════════════════════════════════ function PrisonVision_Unload() if ArrestState.Running then StopArrestStick() end RestoreAll() ClearAimLockState(true) for p, _ in pairs(ESP.Objects) do RemoveNametag(p) end if ESP.Folder then SafeDestroy(ESP.Folder) end if NotifyGui then SafeDestroy(NotifyGui) end if FovCircleGui then SafeDestroy(FovCircleGui) end if State.ScreenGui then SafeDestroy(State.ScreenGui) end table.clear(CharCache) table.clear(CandidateList) print("[PrisonVision] Unloaded.") end _G.PrisonVision_Unload = PrisonVision_Unload -- ══════════════════════════════════════════════════════════════════ -- READY -- ══════════════════════════════════════════════════════════════════ print(string.format("[PrisonVision v%s] Loaded successfully.", VERSION)) print("[PrisonVision] Press CapsLock to minimize/restore.") print("[PrisonVision] Unload: _G.PrisonVision_Unload()") Notify("PrisonVision", "Loaded! Aim, ESP, Noclip, Teleport, Go-To, Auto-Give, Humanoid, Arrest ready.")