local oldGui = game:GetService("CoreGui"):FindFirstChild("InventoryTrackerGui") if oldGui then oldGui:Destroy() end local Players = game:GetService("Players") local CoreGui = game:GetService("CoreGui") 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 local currentMode = "Data" local activeTargetPlayer = nil local liveConnections = {} local playerTitleConnections = {} local rainbowElements = {} local shakingFrames = {} 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, 5) PlayerLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() PlayerScroll.CanvasSize = UDim2.new(0, 0, 0, PlayerLayout.AbsoluteContentSize.Y) end) 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, -130, 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 SearchBar = Instance.new("TextBox") SearchBar.Name = "SearchBar" SearchBar.Parent = DetailFrame SearchBar.Size = UDim2.new(1, -10, 0, 25) SearchBar.Position = UDim2.new(0, 5, 0, 35) SearchBar.BackgroundColor3 = Color3.fromRGB(255, 255, 255) SearchBar.BackgroundColor3 = Color3.fromRGB(25, 25, 25) SearchBar.BorderSizePixel = 0 SearchBar.Font = Enum.Font.SourceSans SearchBar.PlaceholderText = "Search item or slot name..." SearchBar.Text = "" SearchBar.TextColor3 = Color3.fromRGB(255, 255, 255) SearchBar.PlaceholderColor3 = Color3.fromRGB(120, 120, 120) SearchBar.TextSize = 14 SearchBar.TextXAlignment = Enum.TextXAlignment.Left styleCorner(SearchBar, 4) local UIPadding = Instance.new("UIPadding") UIPadding.PaddingLeft = UDim.new(0, 8) UIPadding.Parent = SearchBar local ItemScroll = Instance.new("ScrollingFrame") ItemScroll.Parent = DetailFrame ItemScroll.BackgroundTransparency = 1 ItemScroll.Position = UDim2.new(0, 5, 0, 65) ItemScroll.Size = UDim2.new(1, -10, 1, -70) ItemScroll.CanvasSize = UDim2.new(0, 0, 0, 0) ItemScroll.ScrollBarThickness = 4 local ItemLayout = Instance.new("UIListLayout") ItemLayout.Parent = ItemScroll ItemLayout.SortOrder = Enum.SortOrder.LayoutOrder 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) local SwitchBtn = Instance.new("TextButton") SwitchBtn.Parent = DetailFrame SwitchBtn.Position = UDim2.new(1, -115, 0, 6) SwitchBtn.Size = UDim2.new(0, 85, 0, 22) SwitchBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) SwitchBtn.Font = Enum.Font.SourceSansBold SwitchBtn.Text = "SWITCH MODE" SwitchBtn.TextColor3 = Color3.fromRGB(255, 255, 255) SwitchBtn.TextSize = 11 styleCorner(SwitchBtn, 4) local function isFiltered(itemName) if string.find(itemName, "Tool") then return true end 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(rowFrame, valueLabel, imagesList, value) local num = tonumber(value) or 0 valueLabel.TextStrokeTransparency = 1 rainbowElements[valueLabel] = nil shakingFrames[rowFrame] = nil for _, img in ipairs(imagesList) do rainbowElements[img] = nil end rowFrame.BackgroundColor3 = Color3.fromRGB(45, 45, 45) if num >= 10000000 then rainbowElements[valueLabel] = "Text" shakingFrames[rowFrame] = true for _, img in ipairs(imagesList) do rainbowElements[img] = "Image" end elseif num < 10 then valueLabel.TextColor3 = Color3.fromRGB(0, 255, 100) elseif num >= 10 and num < 100 then valueLabel.TextColor3 = Color3.fromRGB(255, 220, 0) elseif num >= 100 and num < 1000 then valueLabel.TextColor3 = Color3.fromRGB(255, 50, 50) elseif num >= 1000 and num < 10000 then valueLabel.TextColor3 = Color3.fromRGB(180, 50, 255) elseif num >= 10000 and num < 100000 then valueLabel.TextColor3 = Color3.fromRGB(255, 120, 0) valueLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) valueLabel.TextStrokeTransparency = 0 elseif num >= 100000 and num < 1000000 then valueLabel.TextColor3 = Color3.fromRGB(0, 0, 0) valueLabel.TextStrokeColor3 = Color3.fromRGB(255, 255, 255) valueLabel.TextStrokeTransparency = 0 else rainbowElements[valueLabel] = "Text" end end task.spawn(function() local rng = Random.new() while task.wait() do local hue = (tick() % 1.5) / 1.5 local rainbowColor = Color3.fromHSV(hue, 0.85, 1) for element, mode in pairs(rainbowElements) do if element and element.Parent then if mode == "Text" then element.TextColor3 = rainbowColor elseif mode == "Image" then element.ImageColor3 = rainbowColor end end end for frame, isActive in pairs(shakingFrames) do if frame and frame.Parent then local offsetX = rng:NextNumber(-1.5, 1.5) local offsetY = rng:NextNumber(-1.5, 1.5) frame.Position = UDim2.new(0, offsetX, 0, offsetY) end end end end) local function updatePlayerDataDisplays(player, titleLabel, countLabel) rainbowElements[titleLabel] = nil titleLabel.TextStrokeTransparency = 1 local dataFolder = player:FindFirstChild("Data") if not dataFolder then countLabel.Text = "[Items: 0]" titleLabel.Text = "[No Data]" titleLabel.TextColor3 = Color3.fromRGB(150, 150, 150) return end local totalItems = 0 for _, child in ipairs(dataFolder:GetChildren()) do if child:IsA("ValueBase") and not string.find(string.lower(child.Name), "gold") then totalItems = totalItems + (tonumber(child.Value) or 0) end end countLabel.Text = string.format("[Items: %s]", string.format("%.0f", totalItems):reverse():gsub("(%d%d%d)","%1,"):reverse():gsub("^,","")) if totalItems < 100 then titleLabel.Text = "Starter" titleLabel.TextColor3 = Color3.fromRGB(160, 160, 160) elseif totalItems >= 100 and totalItems < 1000 then titleLabel.Text = "Little Pro" titleLabel.TextColor3 = Color3.fromRGB(0, 230, 100) elseif totalItems >= 1000 and totalItems < 5000 then titleLabel.Text = "Pro" titleLabel.TextColor3 = Color3.fromRGB(255, 230, 0) elseif totalItems >= 5000 and totalItems < 20000 then titleLabel.Text = "Very Pro" titleLabel.TextColor3 = Color3.fromRGB(255, 50, 50) elseif totalItems >= 20000 and totalItems < 100000 then titleLabel.Text = "Serious Pro" titleLabel.TextColor3 = Color3.fromRGB(170, 50, 255) elseif totalItems >= 100000 and totalItems < 1000000 then titleLabel.Text = "OG" titleLabel.TextColor3 = Color3.fromRGB(255, 120, 0) titleLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) titleLabel.TextStrokeTransparency = 0 elseif totalItems >= 1000000 and totalItems < 10000000 then titleLabel.Text = "Hacker" titleLabel.TextColor3 = Color3.fromRGB(0, 255, 100) titleLabel.TextStrokeColor3 = Color3.fromRGB(255, 255, 255) titleLabel.TextStrokeTransparency = 0 elseif totalItems >= 10000000 then titleLabel.Text = "GOD" rainbowElements[titleLabel] = "Text" end end local function setupRankTracking(player, titleLabel, countLabel) if playerTitleConnections[player.Name] then for _, c in ipairs(playerTitleConnections[player.Name]) do c:Disconnect() end end playerTitleConnections[player.Name] = {} local function watchDataFolder() local dataFolder = player:FindFirstChild("Data") if dataFolder then local function hookItems() updatePlayerDataDisplays(player, titleLabel, countLabel) for _, item in ipairs(dataFolder:GetChildren()) do if item:IsA("ValueBase") then local ev = item.Changed:Connect(function() updatePlayerDataDisplays(player, titleLabel, countLabel) end) table.insert(playerTitleConnections[player.Name], ev) end end end hookItems() local chAdded = dataFolder.ChildAdded:Connect(function() task.wait(0.1) hookItems() end) table.insert(playerTitleConnections[player.Name], chAdded) end end watchDataFolder() local folderAdded = player.ChildAdded:Connect(function(child) if child.Name == "Data" then watchDataFolder() end end) table.insert(playerTitleConnections[player.Name], folderAdded) end local function clearInventoryConnections() for _, connection in ipairs(liveConnections) do connection:Disconnect() end liveConnections = {} for frame, _ in pairs(shakingFrames) do shakingFrames[frame] = nil end for _, child in ipairs(ItemScroll:GetChildren()) do if child:IsA("Frame") then child:Destroy() end end end local function filterVisibleItems() local searchText = string.lower(SearchBar.Text) for _, child in ipairs(ItemScroll:GetChildren()) do if child:IsA("Frame") then local targetNameLabel = child:FindFirstChild("ItemNameLabel") if targetNameLabel then local labelText = string.lower(targetNameLabel.Text) if string.find(labelText, searchText) then child.Visible = true else child.Visible = false end end end end end SearchBar:GetPropertyChangedSignal("Text"):Connect(filterVisibleItems) CloseBtn.MouseButton1Click:Connect(function() DetailFrame.Visible = false clearInventoryConnections() activeTargetPlayer = nil SearchBar.Text = "" end) local function loadPlayerDataDisplay(targetPlayer) clearInventoryConnections() activeTargetPlayer = targetPlayer DetailFrame.Visible = true if currentMode == "Data" then UserLabel.Text = targetPlayer.Name .. "'s Data" local dataFolder = targetPlayer:WaitForChild("Data", 5) if not dataFolder then return end local function renderItemRow(item) if not item:IsA("ValueBase") then return end if isFiltered(item.Name) then return end local ContainerFrame = Instance.new("Frame") ContainerFrame.Name = item.Name ContainerFrame.Parent = ItemScroll ContainerFrame.Size = UDim2.new(1, 0, 0, 32) ContainerFrame.BackgroundTransparency = 1 local RowFrame = Instance.new("Frame") RowFrame.Name = "RowFrame" RowFrame.Parent = ContainerFrame RowFrame.Size = UDim2.new(1, 0, 1, 0) 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.Name = "ItemNameLabel" 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 local monitoredImages = {ButtonDecal, TypeDecal} updateLabelStyle(RowFrame, ValueLabel, monitoredImages, item.Value) local changeEvent = item.Changed:Connect(function(newValue) ValueLabel.Text = tostring(newValue) updateLabelStyle(RowFrame, ValueLabel, monitoredImages, newValue) end) table.insert(liveConnections, changeEvent) local searchText = string.lower(SearchBar.Text) if searchText ~= "" and not string.find(string.lower(item.Name), searchText) then ContainerFrame.Visible = false end 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) elseif currentMode == "OtherData" then UserLabel.Text = targetPlayer.Name .. "'s Slots" local otherDataFolder = targetPlayer:WaitForChild("OtherData", 5) if not otherDataFolder then return end local function renderSlotRow(item) if not string.match(item.Name, "^NameOfSlot%d*$") then return end local numStr = string.match(item.Name, "%d+$") local numValue = numStr and tonumber(numStr) or 1 local ContainerFrame = Instance.new("Frame") ContainerFrame.Name = item.Name ContainerFrame.Parent = ItemScroll ContainerFrame.Size = UDim2.new(1, 0, 0, 32) ContainerFrame.BackgroundTransparency = 1 ContainerFrame.LayoutOrder = numValue local RowFrame = Instance.new("Frame") RowFrame.Name = "RowFrame" RowFrame.Parent = ContainerFrame RowFrame.Size = UDim2.new(1, 0, 1, 0) RowFrame.BackgroundColor3 = Color3.fromRGB(45, 45, 45) styleCorner(RowFrame, 4) local dynamicDisplayName = "Slot Name" if numValue > 1 then dynamicDisplayName = "Slot Name " .. tostring(numValue) end local NameLabel = Instance.new("TextLabel") NameLabel.Name = "ItemNameLabel" NameLabel.Parent = RowFrame NameLabel.Size = UDim2.new(0.5, 0, 1, 0) NameLabel.Position = UDim2.new(0, 10, 0, 0) NameLabel.BackgroundTransparency = 1 NameLabel.Font = Enum.Font.SourceSans NameLabel.Text = dynamicDisplayName 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.5, -10, 1, 0) ValueLabel.Position = UDim2.new(0.5, 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(RowFrame, ValueLabel, {}, item.Value) local changeEvent = item.Changed:Connect(function(newValue) ValueLabel.Text = tostring(newValue) updateLabelStyle(RowFrame, ValueLabel, {}, newValue) end) table.insert(liveConnections, changeEvent) local searchText = string.lower(SearchBar.Text) if searchText ~= "" and not string.find(string.lower(dynamicDisplayName), searchText) then ContainerFrame.Visible = false end end for _, item in ipairs(otherDataFolder:GetChildren()) do renderSlotRow(item) end local childAddedEvent = otherDataFolder.ChildAdded:Connect(function(newItem) renderSlotRow(newItem) end) table.insert(liveConnections, childAddedEvent) end end SwitchBtn.MouseButton1Click:Connect(function() if currentMode == "Data" then currentMode = "OtherData" else currentMode = "Data" end if activeTargetPlayer then loadPlayerDataDisplay(activeTargetPlayer) end end) local function addPlayerButton(player) if PlayerScroll:FindFirstChild(player.Name) then return end local Container = Instance.new("Frame") Container.Name = player.Name Container.Parent = PlayerScroll Container.Size = UDim2.new(1, 0, 0, 52) Container.BackgroundColor3 = Color3.fromRGB(45, 45, 45) styleCorner(Container, 4) local Btn = Instance.new("TextButton") Btn.Size = UDim2.new(1, 0, 1, 0) Btn.BackgroundTransparency = 1 Btn.Text = "" Btn.Parent = Container local CountLabel = Instance.new("TextLabel") CountLabel.Parent = Container CountLabel.Size = UDim2.new(1, -10, 0, 15) CountLabel.Position = UDim2.new(0, 8, 0, 4) CountLabel.BackgroundTransparency = 1 CountLabel.Font = Enum.Font.SourceSansBold CountLabel.Text = "[Items: Calculating...]" CountLabel.TextColor3 = Color3.fromRGB(180, 180, 180) CountLabel.TextSize = 11 CountLabel.TextXAlignment = Enum.TextXAlignment.Left local NameLabel = Instance.new("TextLabel") NameLabel.Parent = Container NameLabel.Size = UDim2.new(1, -10, 0, 16) NameLabel.Position = UDim2.new(0, 8, 0, 18) NameLabel.BackgroundTransparency = 1 NameLabel.Font = Enum.Font.SourceSansBold NameLabel.Text = player.Name NameLabel.TextColor3 = Color3.fromRGB(255, 255, 255) NameLabel.TextSize = 13 NameLabel.TextXAlignment = Enum.TextXAlignment.Left local TitleLabel = Instance.new("TextLabel") TitleLabel.Name = "RankTitle" TitleLabel.Parent = Container TitleLabel.Size = UDim2.new(1, -10, 0, 15) TitleLabel.Position = UDim2.new(0, 8, 0, 33) TitleLabel.BackgroundTransparency = 1 TitleLabel.Font = Enum.Font.SourceSansBold TitleLabel.Text = "Calculating..." TitleLabel.TextColor3 = Color3.fromRGB(150, 150, 150) TitleLabel.TextSize = 12 TitleLabel.TextXAlignment = Enum.TextXAlignment.Left Btn.MouseButton1Click:Connect(function() loadPlayerDataDisplay(player) end) setupRankTracking(player, TitleLabel, CountLabel) end local function removePlayerButton(player) local Frame = PlayerScroll:FindFirstChild(player.Name) if Frame then Frame:Destroy() end if playerTitleConnections[player.Name] then for _, c in ipairs(playerTitleConnections[player.Name]) do c:Disconnect() end playerTitleConnections[player.Name] = nil end if activeTargetPlayer == player then DetailFrame.Visible = false clearInventoryConnections() activeTargetPlayer = nil SearchBar.Text = "" end end for _, p in ipairs(Players:GetPlayers()) do addPlayerButton(p) end Players.PlayerAdded:Connect(addPlayerButton) Players.PlayerRemoving:Connect(removePlayerButton)