local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local PANEL_W = 320 local PANEL_H = 420 local ENTRY_HEIGHT = 56 local RECENT_IGNORE_SECONDS = 2 local lastSeen = {} local entriesCount = 0 local screenGui = Instance.new("ScreenGui") screenGui.Name = "BoomboxTrackerGui" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui local panel = Instance.new("Frame") panel.Name = "MainPanel" panel.Size = UDim2.new(0, PANEL_W, 0, PANEL_H) panel.Position = UDim2.new(0.7, 0, 0.15, 0) panel.AnchorPoint = Vector2.new(0,0) panel.BackgroundColor3 = Color3.fromRGB(20, 20, 20) panel.BorderSizePixel = 0 panel.Parent = screenGui local panelRound = Instance.new("UICorner", panel) panelRound.CornerRadius = UDim.new(0, 14) local header = Instance.new("Frame", panel) header.Size = UDim2.new(1, 0, 0, 50) header.BackgroundColor3 = Color3.fromRGB(28, 28, 28) header.BorderSizePixel = 0 local headerRound = Instance.new("UICorner", header) headerRound.CornerRadius = UDim.new(0, 12) local title = Instance.new("TextLabel", header) title.Size = UDim2.new(1, -100, 1, 0) title.Position = UDim2.new(0, 12, 0, 0) title.BackgroundTransparency = 1 title.Text = "Boombox Tracker" title.TextColor3 = Color3.fromRGB(230,230,230) title.TextSize = 18 title.Font = Enum.Font.GothamBold title.TextXAlignment = Enum.TextXAlignment.Left local function makeHeaderButton(name, text, posOffset) local b = Instance.new("TextButton", header) b.Name = name b.Size = UDim2.new(0, 56, 0, 34) b.Position = UDim2.new(1, -posOffset, 0.5, -17) b.BackgroundColor3 = Color3.fromRGB(55,55,55) b.TextColor3 = Color3.fromRGB(240,240,240) b.Font = Enum.Font.Gotham b.TextSize = 14 b.Text = text local r = Instance.new("UICorner", b) r.CornerRadius = UDim.new(0,8) return b end local btnClose = makeHeaderButton("CloseBtn", "✕", 12) local btnClear = makeHeaderButton("ClearBtn", "Clear", 74) local btnCopyAll = makeHeaderButton("CopyAllBtn", "Copy All", 136) local btnToggle = makeHeaderButton("ToggleBtn", "Hide", 198) local content = Instance.new("Frame", panel) content.Position = UDim2.new(0, 0, 0, 50) content.Size = UDim2.new(1, 0, 1, -50) content.BackgroundTransparency = 1 local scroll = Instance.new("ScrollingFrame", content) scroll.Name = "List" scroll.Size = UDim2.new(1, -12, 1, -12) scroll.Position = UDim2.new(0, 6, 0, 6) scroll.CanvasSize = UDim2.new(0, 0, 0, 0) scroll.ScrollBarThickness = 8 scroll.BackgroundTransparency = 1 scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y local listLayout = Instance.new("UIListLayout", scroll) listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Padding = UDim.new(0, 8) local padding = Instance.new("UIPadding", scroll) padding.PaddingTop = UDim.new(0, 4) padding.PaddingBottom = UDim.new(0, 8) local toast = Instance.new("TextLabel", panel) toast.Size = UDim2.new(1, -24, 0, 28) toast.Position = UDim2.new(0, 12, 1, -36) toast.BackgroundTransparency = 1 toast.Text = "" toast.TextColor3 = Color3.fromRGB(255,255,255) toast.Font = Enum.Font.Gotham toast.TextSize = 14 local toastTask local function showToast(text, timeSec) timeSec = timeSec or 1.2 toast.Text = text toast.BackgroundTransparency = 0.6 toast.BackgroundColor3 = Color3.fromRGB(10,10,10) toast.TextColor3 = Color3.fromRGB(240,240,240) if toastTask then task.cancel(toastTask) end toastTask = task.spawn(function() wait(timeSec) toast.BackgroundTransparency = 1 toast.Text = "" end) end local credit = Instance.new("TextLabel", screenGui) credit.Size = UDim2.new(0, 220, 0, 24) credit.AnchorPoint = Vector2.new(0.5, 1) credit.Position = UDim2.new(0.5, 0, 1, -6) credit.BackgroundTransparency = 1 credit.Text = "script created by ScriptBox" credit.TextColor3 = Color3.fromRGB(180,180,180) credit.TextSize = 14 credit.Font = Enum.Font.Gotham local function showManualCopyModal(textToShow) local existing = screenGui:FindFirstChild("ManualCopyModal") if existing then existing:Destroy() end local modal = Instance.new("Frame", screenGui) modal.Name = "ManualCopyModal" modal.AnchorPoint = Vector2.new(0.5,0.5) modal.Position = UDim2.new(0.5, 0, 0.5, 0) modal.Size = UDim2.new(0, 300, 0, 160) modal.BackgroundColor3 = Color3.fromRGB(18,18,18) modal.BorderSizePixel = 0 Instance.new("UICorner", modal).CornerRadius = UDim.new(0,12) local label = Instance.new("TextLabel", modal) label.Size = UDim2.new(1, -24, 0, 42) label.Position = UDim2.new(0, 12, 0, 12) label.BackgroundTransparency = 1 label.Text = "Tap & hold the box to Copy" label.TextColor3 = Color3.fromRGB(240,240,240) label.Font = Enum.Font.Gotham label.TextSize = 14 local box = Instance.new("TextBox", modal) box.Size = UDim2.new(1, -24, 0, 56) box.Position = UDim2.new(0, 12, 0, 62) box.Text = textToShow box.ClearTextOnFocus = false box.Font = Enum.Font.Gotham box.TextSize = 16 box.TextColor3 = Color3.fromRGB(20,20,20) box.BackgroundColor3 = Color3.fromRGB(240,240,240) box.Selectable = true box.TextEditable = false Instance.new("UICorner", box).CornerRadius = UDim.new(0,8) local closeBtn = Instance.new("TextButton", modal) closeBtn.Size = UDim2.new(0, 54, 0, 36) closeBtn.Position = UDim2.new(1, -66, 1, -46) closeBtn.Text = "Close" closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 14 closeBtn.BackgroundColor3 = Color3.fromRGB(80,80,80) Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0,8) closeBtn.MouseButton1Click:Connect(function() modal:Destroy() end) end local function createEntry(soundId, ownerName, soundName) entriesCount = entriesCount + 1 local entryFrame = Instance.new("Frame") entryFrame.Size = UDim2.new(1, -8, 0, ENTRY_HEIGHT) entryFrame.BackgroundColor3 = Color3.fromRGB(36,36,36) entryFrame.BorderSizePixel = 0 entryFrame.Parent = scroll Instance.new("UICorner", entryFrame).CornerRadius = UDim.new(0,10) local left = Instance.new("Frame", entryFrame) left.Size = UDim2.new(0.7, -8, 1, 0) left.Position = UDim2.new(0, 8, 0, 0) left.BackgroundTransparency = 1 local titleLabel = Instance.new("TextLabel", left) titleLabel.Size = UDim2.new(1, 0, 0.6, 0) titleLabel.Position = UDim2.new(0, 0, 0, 6) titleLabel.BackgroundTransparency = 1 titleLabel.Text = (ownerName or "Unknown") .. " — " .. (soundName or "") titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.TextSize = 14 titleLabel.Font = Enum.Font.GothamBold titleLabel.TextColor3 = Color3.fromRGB(240,240,240) local idLabel = Instance.new("TextLabel", left) idLabel.Size = UDim2.new(1, 0, 0.4, 0) idLabel.Position = UDim2.new(0, 0, 0.6, -6) idLabel.BackgroundTransparency = 1 idLabel.Text = tostring(soundId) idLabel.TextXAlignment = Enum.TextXAlignment.Left idLabel.TextSize = 13 idLabel.Font = Enum.Font.Gotham idLabel.TextColor3 = Color3.fromRGB(200,200,200) local copyBtn = Instance.new("TextButton", entryFrame) copyBtn.Size = UDim2.new(0.28, -12, 0.78, 0) copyBtn.Position = UDim2.new(0.72, 6, 0.11, 0) copyBtn.Text = "Copy" copyBtn.Font = Enum.Font.GothamBold copyBtn.TextSize = 14 copyBtn.TextColor3 = Color3.fromRGB(255,255,255) copyBtn.BackgroundColor3 = Color3.fromRGB(70,130,180) Instance.new("UICorner", copyBtn).CornerRadius = UDim.new(0,10) copyBtn.MouseButton1Click:Connect(function() local numericId = tostring(soundId):match("%d+") or tostring(soundId) local ok = pcall(function() if setclipboard then setclipboard(numericId) else error("no_setclipboard") end end) if ok then showToast("Copied ID: " .. numericId) else showManualCopyModal(numericId) end end) end btnClear.MouseButton1Click:Connect(function() for _,v in pairs(scroll:GetChildren()) do if v:IsA("Frame") then v:Destroy() end end lastSeen = {} entriesCount = 0 scroll.CanvasSize = UDim2.new(0,0,0,0) showToast("Cleared") end) btnClose.MouseButton1Click:Connect(function() screenGui.Enabled = false end) btnCopyAll.MouseButton1Click:Connect(function() local ids = {} for _,v in pairs(scroll:GetChildren()) do if v:IsA("Frame") then for _,ch in pairs(v:GetDescendants()) do if ch:IsA("TextLabel") and ch.Text:match("%d+") and not ch.Name:match("Title") then local num = ch.Text:match("%d+") if num then table.insert(ids, num) end break end end end end if #ids == 0 then showToast("No IDs to copy") return end local all = table.concat(ids, "\n") local ok = pcall(function() if setclipboard then setclipboard(all) else error("no_setclipboard") end end) if ok then showToast("Copied all IDs") else showManualCopyModal(all) end end) local panelVisible = true btnToggle.MouseButton1Click:Connect(function() panelVisible = not panelVisible content.Visible = panelVisible scroll.Visible = panelVisible btnToggle.Text = panelVisible and "Hide" or "Show" end) local dragging = false local dragInput, dragStart, startPos local function update(input) local delta = input.Position - dragStart panel.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end panel.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = panel.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) panel.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) local function findBoomboxOwner(sound) local cur = sound for i = 1, 6 do if not cur then break end if cur:IsA("Tool") then if cur.Name:lower():find("boom") then local char = cur.Parent if char and char:IsA("Model") then local p = Players:GetPlayerFromCharacter(char) if p then return p, cur end end return nil, cur end end cur = cur.Parent end return nil, nil end local function handlePotentialSound(sound) if not sound or not sound:IsA("Sound") then return end if not sound.SoundId or sound.SoundId == "" then return end local function tryAdd() local owner, source = findBoomboxOwner(sound) if not (owner or (source and tostring(source):lower():find("boom"))) then return end local ownerName = owner and owner.Name or (source and source.Name) or "Unknown" local key = tostring(sound.SoundId) .. "|" .. tostring(ownerName) local now = os.time() if lastSeen[key] and (now - lastSeen[key] < RECENT_IGNORE_SECONDS) then return end lastSeen[key] = now createEntry(sound.SoundId, ownerName, sound.Name) end if sound.IsPlaying then tryAdd() else local conn conn = sound:GetPropertyChangedSignal("IsPlaying"):Connect(function() if sound.IsPlaying then tryAdd() conn:Disconnect() end end) end end for _,v in pairs(workspace:GetDescendants()) do if v:IsA("Sound") and v.SoundId ~= "" then task.delay(0.05, function() handlePotentialSound(v) end) end end workspace.DescendantAdded:Connect(function(desc) if desc:IsA("Sound") then task.delay(0.05, function() pcall(function() handlePotentialSound(desc) end) end) end end) showToast("Boombox Tracker Active", 1.4)