I want to detect a bundle on a player’s avatar and have it respond back with the sale price. The only problem is, despite AvatarEditorService being able to get the sale price of a bundle, there seems to be no way of seeing which specific bundles a player is wearing. If anyone could help me with this that would be amazing thanks!
Hi, there is no direct way to get a bundle from a player. Because if you change one part of the bundle, it still counts as a bundle. What exactly are you trying to accomplish so that I can think more about how to accomplish this?
I am trying to get the total value of a players avatar some limitations to that were I couldn’t find a way to get bundles and I did assume there was no way but i wanted to see if anyone had a work around or not.
Yeah there isn’t really a definitive way of getting a players bundle because of the fact that you can mix-and-match body parts or items included in the bundle.
The best you can do is make an estimate from the body part IDs.
Hey, if you just want to see how much the outfit is worth and exactly what the player is wearing, you can use this server script that analyzes the player’s outfit and calculates the price. At the same time you get a table with all the details of the asset. If you want to process this further. Furthermore all clothes in the table with 0 R$ will be ignored.
local Players = game:GetService("Players")
-- Get a SharedTable from the HumanoidDescription from a Player Instance
local function getHumanoidTable(player : Player) : SharedTable
local humanoidDescription = player.Character.Humanoid:GetAppliedDescription()
local HumanTabel = {}
if humanoidDescription then
local Face = table.insert(HumanTabel,humanoidDescription.Face) or 0
local GShirt = table.insert(HumanTabel,humanoidDescription.GraphicTShirt) or 0
local Shirt = table.insert(HumanTabel,humanoidDescription.Shirt) or 0
local Pants = table.insert(HumanTabel,humanoidDescription.Pants) or 0
local Head = table.insert(HumanTabel,humanoidDescription.Head) or 0
local BackAccessory = table.insert(HumanTabel,humanoidDescription.BackAccessory) or 0
local FaceAccessory = table.insert(HumanTabel,humanoidDescription.FaceAccessory) or 0
local FrontAccessory = table.insert(HumanTabel,humanoidDescription.FrontAccessory) or 0
local HairAccessory = table.insert(HumanTabel,humanoidDescription.HairAccessory) or 0
local HatAccessory = table.insert(HumanTabel,humanoidDescription.HatAccessory) or 0
local NeckAccessory = table.insert(HumanTabel,humanoidDescription.NeckAccessory) or 0
local ShouldersAccessory = table.insert(HumanTabel,humanoidDescription.ShouldersAccessory) or 0
local WaistAccessory = table.insert(HumanTabel,humanoidDescription.WaistAccessory) or 0
local humanoid = player.Character and player.Character:FindFirstChild("Humanoid")
if humanoid then
humanoid:ApplyDescription(humanoidDescription)
end
return HumanTabel
end
end
-- Get the OutfitValue and a SharedTable with all Items and Prices
local function calculateOutfitValue(player : Player)
local userId = player.UserId
local Numbers = {} -- storage for the numbers from a string.
local HumanTabel = getHumanoidTable(player)
local AssetTabel = {}
local TotalPrice = 0
if HumanTabel then
for _, cloth in pairs(HumanTabel) do
if string.find(cloth, ",") then -- If we have more then one Item
Numbers = string.split(cloth, ",")
for i, number in ipairs(Numbers) do
local MS = game:GetService("MarketplaceService")
local AssetId = number
local Asset = MS:GetProductInfo(AssetId)
if Asset.PriceInRobux == 0 then continue end
TotalPrice += Asset.PriceInRobux
AssetTabel[Asset.Name] = Asset
end
Numbers = nil
else
if tonumber(cloth) == 0 or tonumber(cloth) == nil then continue end
local MS = game:GetService("MarketplaceService")
local AssetId = cloth
local Asset = MS:GetProductInfo(AssetId)
if Asset.PriceInRobux == 0 then continue end
TotalPrice += Asset.PriceInRobux
AssetTabel[Asset.Name] = Asset
end
end
return TotalPrice, AssetTabel
else
warn("We dont found a Humanoid Description")
end
end
Players.PlayerAdded:Connect(function(Plr : Player)
Plr.CharacterAdded:Connect(function()
local Price, AllItems = calculateOutfitValue(Plr)
warn("Price : ", Price)
warn("AllItems : ", AllItems)
end)
end)
**Output : **
Price : 175
AllItems : {
["SCHWARZER GOTISCHER SCHÄDEL-DOMINUS"] = ▼ {
["AssetId"] = 134922871567882,
["AssetTypeId"] = 8,
["CanBeSoldInThisGame"] = true,
["CollectibleItemId"] = "f5758ac1-bed9-49f6-8923-ded9f28fccdf",
["CollectibleProductId"] = "b6788aee-603f-4adf-bc84-1cbc0c34db7e",
["CollectiblesItemDetails"] = ▶ {...},
["ContentRatingTypeId"] = 0,
["Created"] = "2025-02-06T22:27:24.187Z",
["Creator"] = ▶ {...},
["Description"] = "Für mehr tolle Hüte wie diese, tritt unserer Gruppe bei!
https://www.roblox.com/catalog?Category=1&CreatorName=Bestselling+UGC&CreatorType=Group&salesTypeFilter=1
Metall, Chromherzen, y2k, Mode, Kreuz, Grunge, Emo, Ringe, Zubehör, dunkel, feurig, gefroren, Korblox, Dominus, Hörner, Vampir",
["IconImageAssetId"] = 0,
["IsForSale"] = true,
["IsLimited"] = false,
["IsLimitedUnique"] = true,
["IsNew"] = false,
["IsPublicDomain"] = false,
["MinimumMembershipLevel"] = 0,
["Name"] = "SCHWARZER GOTISCHER SCHÄDEL-DOMINUS",
["PriceInRobux"] = 175,
["ProductId"] = 2838160033,
["ProductType"] = "Collectible Item",
["Remaining"] = 0,
["SaleLocation"] = ▶ {...},
["Sales"] = 0,
["TargetId"] = 134922871567882,
["Updated"] = "2025-02-08T00:22:16.53Z"
}
}
Forgive me if I misunderstood but I know how to get avatar item sale prices its when it comes to UGC bundles if they are wearing one limb of it will just be offsale and not actually count as the bundle. We have manually added value for things like headless and korblox but for ugc bundles we need an automatic method.