-- HEISTBLOX INSPECTOR AIO v0.5 -- WindUI 1.6.66 -- Roblox Studio diagnostic edition local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") -- CONFIGURATION local Config = { PlayerESP = true, LootESP = true, WeaponInfo = true, RoleDetection = true, ShowDistance = true, Criminals = true, Police = true, Civilians = true, Unknown = true, RefreshRate = 1, MaxDistance = 1000, } local Colors = { Criminal = Color3.fromRGB(255, 50, 50), Police = Color3.fromRGB(0, 150, 255), Civilian = Color3.fromRGB(200, 200, 200), Unknown = Color3.fromRGB(255, 255, 255), Loot = Color3.fromRGB(255, 200, 50), } local RoleRGB = { ["255,50,50"] = "Criminal", ["0,150,255"] = "Police", ["200,200,200"] = "Civilian", } local RenderedPlayers = {} local RenderedLoot = {} local Stats = { Players = 0, Loot = 0, Refreshes = 0, } -- WINDUI local WindUI = loadstring(game:HttpGet( "https://github.com/Footagesus/WindUI/releases/download/1.6.66/main.lua" ))() local Window = WindUI:CreateWindow({ Title = "HEISTBLOX | Inspector", Author = "AIO v0.5", Icon = "shield", Folder = "HeistbloxInspector", Theme = "Dark", Size = UDim2.fromOffset(700, 500), MinSize = Vector2.new(550, 400), Resizable = true, ToggleKey = Enum.KeyCode.RightShift, }) local Dashboard = Window:Tab({ Title = "Dashboard", Icon = "layout-dashboard", }) local PlayersTab = Window:Tab({ Title = "Players", Icon = "users", }) local LootTab = Window:Tab({ Title = "Loot", Icon = "package", }) local SettingsTab = Window:Tab({ Title = "Settings", Icon = "settings", }) -- DETECTION local function getRole(character) local highlight = character and character:FindFirstChild("SpectatorHighlight") if not highlight or not highlight:IsA("Highlight") then return "Unknown" end local color = highlight.FillColor local key = string.format("%d,%d,%d", math.round(color.R * 255), math.round(color.G * 255), math.round(color.B * 255) ) return RoleRGB[key] or "Unknown" end local function getWeapons(player) local weapons = {} local function inspect(container) if not container then return end for _, item in ipairs(container:GetChildren()) do if item:IsA("Tool") then table.insert(weapons, item.Name) end end end inspect(player.Character) inspect(player:FindFirstChildOfClass("Backpack")) return #weapons > 0 and table.concat(weapons, ", ") or "Unarmed" end local function getDistance(character) local root = character and character:FindFirstChild("HumanoidRootPart") local localRoot = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if not root or not localRoot then return nil end return math.floor((root.Position - localRoot.Position).Magnitude) end -- PLAYER RENDERER local function removePlayer(player) local data = RenderedPlayers[player] if data then data.Billboard:Destroy() data.Highlight:Destroy() RenderedPlayers[player] = nil end end local function createPlayer(player) if player == LocalPlayer then return end local character = player.Character local root = character and character:FindFirstChild("HumanoidRootPart") if not root then return end removePlayer(player) local billboard = Instance.new("BillboardGui") billboard.Name = "InspectorPlayerLabel" billboard.Adornee = root billboard.Size = UDim2.fromOffset(230, 65) billboard.StudsOffset = Vector3.new(0, 3.5, 0) billboard.AlwaysOnTop = true billboard.MaxDistance = Config.MaxDistance local label = Instance.new("TextLabel") label.Size = UDim2.fromScale(1, 1) label.BackgroundTransparency = 1 label.TextStrokeTransparency = 0.2 label.Font = Enum.Font.GothamBold label.TextSize = 13 label.Parent = billboard local highlight = Instance.new("Highlight") highlight.Adornee = character highlight.DepthMode = Enum.HighlightDepthMode.Occluded highlight.Parent = character billboard.Parent = PlayerGui RenderedPlayers[player] = { Billboard = billboard, Highlight = highlight, Label = label, Character = character, } end -- LOOT RENDERER local function removeLoot(item) local data = RenderedLoot[item] if data then data.Billboard:Destroy() data.Highlight:Destroy() RenderedLoot[item] = nil end end local function createLoot(item) if not item:IsA("Model") and not item:IsA("BasePart") then return end local part = item:IsA("Model") and (item.PrimaryPart or item:FindFirstChildWhichIsA("BasePart")) or item if not part then return end local billboard = Instance.new("BillboardGui") billboard.Name = "InspectorLootLabel" billboard.Adornee = part billboard.Size = UDim2.fromOffset(180, 35) billboard.StudsOffset = Vector3.new(0, 2, 0) billboard.AlwaysOnTop = true billboard.MaxDistance = Config.MaxDistance local label = Instance.new("TextLabel") label.Size = UDim2.fromScale(1, 1) label.BackgroundTransparency = 1 label.Text = item.Name label.TextColor3 = Colors.Loot label.TextStrokeTransparency = 0.2 label.Font = Enum.Font.GothamBold label.TextSize = 12 label.Parent = billboard local highlight = Instance.new("Highlight") highlight.Adornee = item highlight.DepthMode = Enum.HighlightDepthMode.Occluded highlight.FillColor = Colors.Loot highlight.OutlineColor = Colors.Loot highlight.Parent = item billboard.Parent = PlayerGui RenderedLoot[item] = { Billboard = billboard, Highlight = highlight, } end -- UPDATE ENGINE local function update() Stats.Refreshes += 1 Stats.Players = 0 Stats.Loot = 0 for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then local character = player.Character local root = character and character:FindFirstChild("HumanoidRootPart") if root then Stats.Players += 1 local data = RenderedPlayers[player] if not data or data.Character ~= character then createPlayer(player) data = RenderedPlayers[player] end if data then local role = Config.RoleDetection and getRole(character) or "Unknown" local allowed = (role == "Criminal" and Config.Criminals) or (role == "Police" and Config.Police) or (role == "Civilian" and Config.Civilians) or (role == "Unknown" and Config.Unknown) local distance = getDistance(character) local inRange = not distance or distance <= Config.MaxDistance local color = Colors[role] or Colors.Unknown local text = player.DisplayName .. "\n" .. role if Config.WeaponInfo then text ..= "\n" .. getWeapons(player) end if Config.ShowDistance and distance then text ..= " | " .. distance .. " studs" end data.Label.Text = text data.Label.TextColor3 = color data.Billboard.Enabled = Config.PlayerESP and allowed and inRange data.Highlight.Enabled = Config.PlayerESP and allowed and inRange data.Highlight.FillColor = color data.Highlight.OutlineColor = color end else removePlayer(player) end end end local map = Workspace:FindFirstChild("ActiveMap") local folder = map and map:FindFirstChild("Loot") if folder then for _, item in ipairs(folder:GetChildren()) do if item:IsA("Model") or item:IsA("BasePart") then Stats.Loot += 1 if not RenderedLoot[item] then createLoot(item) end end end end for item in pairs(RenderedLoot) do if not item.Parent then removeLoot(item) else local data = RenderedLoot[item] data.Billboard.Enabled = Config.LootESP data.Highlight.Enabled = Config.LootESP end end end -- DASHBOARD GUI Dashboard:Section({ Title = "System Status", Box = true, }) local DashboardParagraph = Dashboard:Paragraph({ Title = "Inspector Status", Desc = "Initializing...", }) Dashboard:Button({ Title = "Refresh All", Icon = "refresh-cw", Callback = function() update() end, }) -- PLAYER GUI PlayersTab:Section({ Title = "Player ESP", Box = true, }) PlayersTab:Toggle({ Title = "Enable Player ESP", Value = true, Callback = function(v) Config.PlayerESP = v update() end, }) PlayersTab:Toggle({ Title = "Criminals", Value = true, Callback = function(v) Config.Criminals = v update() end, }) PlayersTab:Toggle({ Title = "Police", Value = true, Callback = function(v) Config.Police = v update() end, }) PlayersTab:Toggle({ Title = "Civilians", Value = true, Callback = function(v) Config.Civilians = v update() end, }) PlayersTab:Toggle({ Title = "Show Weapons", Value = true, Callback = function(v) Config.WeaponInfo = v update() end, }) PlayersTab:Toggle({ Title = "Show Distance", Value = true, Callback = function(v) Config.ShowDistance = v update() end, }) -- LOOT GUI LootTab:Section({ Title = "Loot ESP", Box = true, }) LootTab:Toggle({ Title = "Enable Loot ESP", Value = true, Callback = function(v) Config.LootESP = v update() end, }) -- SETTINGS GUI SettingsTab:Section({ Title = "General Settings", Box = true, }) SettingsTab:Slider({ Title = "Refresh Rate", Value = { Min = 1, Max = 5, Default = 1, }, Callback = function(v) Config.RefreshRate = v end, }) SettingsTab:Slider({ Title = "Maximum Distance", Value = { Min = 100, Max = 2000, Default = 1000, }, Callback = function(v) Config.MaxDistance = v update() end, }) SettingsTab:Toggle({ Title = "Automatic Updates", Value = true, Callback = function(v) Config.AutoRefresh = v end, }) -- PLAYER LIFECYCLE Players.PlayerRemoving:Connect(function(player) removePlayer(player) end) Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function() task.wait(1) update() end) end) -- MAIN LOOP task.spawn(function() while Window do if Config.AutoRefresh then update() DashboardParagraph:SetDesc(string.format( "Status: Running\nPlayers: %d\nLoot: %d\nRefreshes: %d", Stats.Players, Stats.Loot, Stats.Refreshes )) end task.wait(Config.RefreshRate) end end) update() WindUI:Notify({ Title = "HEISTBLOX Inspector", Content = "AIO v0.5 initialized successfully.", Duration = 4, })