-- Services local Players = game:GetService("Players") local CoreGui = game:GetService("CoreGui") -- Main GUI Container local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "InventoryTrackerGui" ScreenGui.Parent = CoreGui ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling local function styleCorner(parent, radius) local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, radius or 6) corner.Parent = parent end -- ========================================== -- LAYER 1: PLAYER LIST FRAME -- ========================================== local ListFrame = Instance.new("Frame") ListFrame.Name = "ListFrame" ListFrame.Parent = ScreenGui ListFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) ListFrame.Position = UDim2.new(0.05, 0, 0.3, 0) ListFrame.Size = UDim2.new(0, 200, 0, 320) ListFrame.Active = true ListFrame.Draggable = true styleCorner(ListFrame, 8) local ListTitle = Instance.new("TextLabel") ListTitle.Parent = ListFrame ListTitle.Size = UDim2.new(1, 0, 0, 35) ListTitle.BackgroundTransparency = 1 ListTitle.Font = Enum.Font.SourceSansBold ListTitle.Text = "PLAYER LIST" ListTitle.TextColor3 = Color3.fromRGB(240, 240, 240) ListTitle.TextSize = 16 local PlayerScroll = Instance.new("ScrollingFrame") PlayerScroll.Parent = ListFrame PlayerScroll.BackgroundTransparency = 1 PlayerScroll.Position = UDim2.new(0, 5, 0, 40) PlayerScroll.Size = UDim2.new(1, -10, 1, -45) PlayerScroll.CanvasSize = UDim2.new(0, 0, 0, 0) PlayerScroll.ScrollBarThickness = 4 local PlayerLayout = Instance.new("UIListLayout") PlayerLayout.Parent = PlayerScroll PlayerLayout.SortOrder = Enum.SortOrder.Name PlayerLayout.Padding = UDim.new(0, 4) PlayerLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() PlayerScroll.CanvasSize = UDim2.new(0, 0, 0, PlayerLayout.AbsoluteContentSize.Y) end) -- ========================================== -- LAYER 2: DETAILED INVENTORY FRAME -- ========================================== local DetailFrame = Instance.new("Frame") DetailFrame.Name = "DetailFrame" DetailFrame.Parent = ScreenGui DetailFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35) DetailFrame.Position = UDim2.new(0.05, 210, 0.3, 0) DetailFrame.Size = UDim2.new(0, 290, 0, 320) DetailFrame.Visible = false DetailFrame.Active = true DetailFrame.Draggable = true styleCorner(DetailFrame, 8) local UserLabel = Instance.new("TextLabel") UserLabel.Parent = DetailFrame UserLabel.Size = UDim2.new(1, -40, 0, 35) UserLabel.Position = UDim2.new(0, 10, 0, 0) UserLabel.BackgroundTransparency = 1 UserLabel.Font = Enum.Font.SourceSansBold UserLabel.Text = "Username's Data" UserLabel.TextColor3 = Color3.fromRGB(255, 255, 255) UserLabel.TextSize = 15 UserLabel.TextXAlignment = Enum.TextXAlignment.Left local ItemScroll = Instance.new("ScrollingFrame") ItemScroll.Parent = DetailFrame ItemScroll.BackgroundTransparency = 1 ItemScroll.Position = UDim2.new(0, 5, 0, 40) ItemScroll.Size = UDim2.new(1, -10, 1, -45) ItemScroll.CanvasSize = UDim2.new(0, 0, 0, 0) ItemScroll.ScrollBarThickness = 4 local ItemLayout = Instance.new("UIListLayout") ItemLayout.Parent = ItemScroll ItemLayout.SortOrder = Enum.SortOrder.Name ItemLayout.Padding = UDim.new(0, 4) ItemLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() ItemScroll.CanvasSize = UDim2.new(0, 0, 0, ItemLayout.AbsoluteContentSize.Y) end) local CloseBtn = Instance.new("TextButton") CloseBtn.Parent = DetailFrame CloseBtn.Position = UDim2.new(1, -25, 0, 8) CloseBtn.Size = UDim2.new(0, 18, 0, 18) CloseBtn.BackgroundColor3 = Color3.fromRGB(150, 50, 50) CloseBtn.Font = Enum.Font.SourceSansBold CloseBtn.Text = "X" CloseBtn.TextColor3 = Color3.fromRGB(255, 255, 255) CloseBtn.TextSize = 11 styleCorner(CloseBtn, 9) -- ========================================== -- DYNAMIC COLOR ENGINE & ASSET LOOKUP LOGIC -- ========================================== local rainbowLabels = {} local function isFiltered(itemName) -- 1. Filters out any item if it contains the word "Tool" if string.find(itemName, "Tool") then return true end -- 2. Filters out directional mesh variant labels local badSuffixes = {"XY", "XZ", "YZ", "X", "Y", "Z"} for _, suffix in ipairs(badSuffixes) do if string.sub(itemName, -string.len(suffix)) == suffix then return true end end return false end local function getInventoryTemplateData(itemName) local localPlayer = Players.LocalPlayer if not localPlayer then return "", "" end local playerGui = localPlayer:FindFirstChildOfClass("PlayerGui") if playerGui then local blocksFrame = playerGui:FindFirstChild("BuildGui") and playerGui.BuildGui:FindFirstChild("InventoryFrame") and playerGui.BuildGui.InventoryFrame:FindFirstChild("ScrollingFrame") and playerGui.BuildGui.InventoryFrame.ScrollingFrame:FindFirstChild("BlocksFrame") if blocksFrame then local visualTemplate = blocksFrame:FindFirstChild(itemName) if visualTemplate then local typeIconId = "" local frameImageId = "" if visualTemplate:FindFirstChild("TypeIcon") and visualTemplate.TypeIcon:IsA("ImageLabel") then typeIconId = visualTemplate.TypeIcon.Image end if visualTemplate:IsA("ImageButton") then frameImageId = visualTemplate.Image end return typeIconId, frameImageId end end end return "", "" end local function updateLabelStyle(label, value) local num = tonumber(value) or 0 label.TextStrokeTransparency = 1 rainbowLabels[label] = false if num < 10 then label.TextColor3 = Color3.fromRGB(0, 255, 100) elseif num >= 10 and num < 100 then label.TextColor3 = Color3.fromRGB(255, 220, 0) elseif num >= 100 and num < 1000 then label.TextColor3 = Color3.fromRGB(255, 50, 50) elseif num >= 1000 and num < 10000 then label.TextColor3 = Color3.fromRGB(180, 50, 255) elseif num >= 10000 and num < 100000 then label.TextColor3 = Color3.fromRGB(255, 120, 0) label.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) label.TextStrokeTransparency = 0 elseif num >= 100000 and num < 1000000 then label.TextColor3 = Color3.fromRGB(0, 0, 0) label.TextStrokeColor3 = Color3.fromRGB(255, 255, 255) label.TextStrokeTransparency = 0 else rainbowLabels[label] = true end end task.spawn(function() while task.wait() do local hue = (tick() % 4) / 4 local rainbowColor = Color3.fromHSV(hue, 0.8, 1) for label, isActive in pairs(rainbowLabels) do if isActive then label.TextColor3 = rainbowColor end end end end) -- ========================================== -- CORE DATA TRACKING ENGINE -- ========================================== local activeTargetPlayer = nil local liveConnections = {} local function clearInventoryConnections() for _, connection in ipairs(liveConnections) do connection:Disconnect() end liveConnections = {} rainbowLabels = {} for _, child in ipairs(ItemScroll:GetChildren()) do if child:IsA("Frame") then child:Destroy() end end end CloseBtn.MouseButton1Click:Connect(function() DetailFrame.Visible = false clearInventoryConnections() activeTargetPlayer = nil end) local function loadPlayerInventory(targetPlayer) clearInventoryConnections() activeTargetPlayer = targetPlayer UserLabel.Text = targetPlayer.Name .. "'s Data" DetailFrame.Visible = true local dataFolder = targetPlayer:WaitForChild("Data", 5) if not dataFolder then return end local function renderItemRow(item) if not item:IsA("ValueBase") then return end -- Run filtering configuration lookups! Completely skip items containing "Tool" if isFiltered(item.Name) then return end local RowFrame = Instance.new("Frame") RowFrame.Name = item.Name RowFrame.Parent = ItemScroll RowFrame.Size = UDim2.new(1, 0, 0, 32) RowFrame.BackgroundColor3 = Color3.fromRGB(45, 45, 45) styleCorner(RowFrame, 4) local typeIconAsset, frameButtonAsset = getInventoryTemplateData(item.Name) local ButtonDecal = Instance.new("ImageLabel") ButtonDecal.Parent = RowFrame ButtonDecal.Size = UDim2.new(0, 24, 0, 24) ButtonDecal.Position = UDim2.new(0, 6, 0, 4) ButtonDecal.BackgroundTransparency = 1 ButtonDecal.Image = frameButtonAsset ~= "" and frameButtonAsset or "rbxassetid://12328114032" local TypeDecal = Instance.new("ImageLabel") TypeDecal.Parent = RowFrame TypeDecal.Size = UDim2.new(0, 24, 0, 24) TypeDecal.Position = UDim2.new(0, 34, 0, 4) TypeDecal.BackgroundTransparency = 1 TypeDecal.Image = typeIconAsset ~= "" and typeIconAsset or "rbxassetid://12328114032" local NameLabel = Instance.new("TextLabel") NameLabel.Parent = RowFrame NameLabel.Size = UDim2.new(0.5, -65, 1, 0) NameLabel.Position = UDim2.new(0, 65, 0, 0) NameLabel.BackgroundTransparency = 1 NameLabel.Font = Enum.Font.SourceSans NameLabel.Text = item.Name NameLabel.TextColor3 = Color3.fromRGB(220, 220, 220) NameLabel.TextSize = 14 NameLabel.TextXAlignment = Enum.TextXAlignment.Left local ValueLabel = Instance.new("TextLabel") ValueLabel.Parent = RowFrame ValueLabel.Size = UDim2.new(0.4, -10, 1, 0) ValueLabel.Position = UDim2.new(0.6, 0, 0, 0) ValueLabel.BackgroundTransparency = 1 ValueLabel.Font = Enum.Font.SourceSansBold ValueLabel.Text = tostring(item.Value) ValueLabel.TextSize = 14 ValueLabel.TextXAlignment = Enum.TextXAlignment.Right updateLabelStyle(ValueLabel, item.Value) local changeEvent = item.Changed:Connect(function(newValue) ValueLabel.Text = tostring(newValue) updateLabelStyle(ValueLabel, newValue) end) table.insert(liveConnections, changeEvent) end for _, item in ipairs(dataFolder:GetChildren()) do renderItemRow(item) end local childAddedEvent = dataFolder.ChildAdded:Connect(function(newItem) renderItemRow(newItem) end) table.insert(liveConnections, childAddedEvent) end -- ========================================== -- PLAYER MANAGEMENT SYSTEM -- ========================================== local function addPlayerButton(player) if PlayerScroll:FindFirstChild(player.Name) then return end local Btn = Instance.new("TextButton") Btn.Name = player.Name Btn.Parent = PlayerScroll Btn.Size = UDim2.new(1, 0, 0, 30) Btn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) Btn.Font = Enum.Font.SourceSans Btn.Text = player.Name Btn.TextColor3 = Color3.fromRGB(255, 255, 255) Btn.TextSize = 14 styleCorner(Btn, 4) Btn.MouseButton1Click:Connect(function() loadPlayerInventory(player) end) end local function removePlayerButton(player) local Btn = PlayerScroll:FindFirstChild(player.Name) if Btn then Btn:Destroy() end if activeTargetPlayer == player then DetailFrame.Visible = false clearInventoryConnections() activeTargetPlayer = nil end end for _, p in ipairs(Players:GetPlayers()) do addPlayerButton(p) end Players.PlayerAdded:Connect(addPlayerButton) Players.PlayerRemoving:Connect(removePlayerButton)