How do I insert a package with the new "Bundles" asset type?

Hey there,

With Rthro being introduced, every package has been converted to a bundle. I need to know how to insert these bundles into studio using InsertService. I created the plugin Custom NPC Maker and it uses InsertService to import a package based on the developers input of it’s ID from the website. I have noticed with the bundles update, the IDs are new and under the asset type of “Bundle”, but there is no Bundle asset type in the API.

This renders my plugin unusable for the most part if developers can no longer access package IDs. Does anyone know a way around this? Along with adding support for Rthro to be imported, it would be great to know how I can import these bundles into studio.

How the importing works:
I extract the base model of either the R6 or R15 rig from Roblox’s inventory. I then get the AssetIds of the package from AssetService, and import them using InsertService. I then have logic that applies these body parts to the base model, then parent the model to workspace.

3 Likes

See: GetAssetIdsForPackage() for bundles?

4 Likes

Ah, didn’t see this. Thank you, hopefully it ships fast. :crossed_fingers:

Hi, to build on this, I use an the AssetIds of Accessories, Gear, Packages, etc. to generate thumbnails to show in peoples’ inventories. The catalog used to send you to the assetId link and then redirect to the “bundle” link, so I could just right click and get the AssetId that way. This seems to have been eliminated from the website as well in a recent update. Is there any other way to get the actual AssetId of a package or are they no longer stored this way? (and if they’re not, how can I fetch a package’s thumbnail?)

1 Like
local bundleDetails = game:GetService('AssetService'):GetBundleDetailsAsync(id)

I made a plugin that can be used to import a bundle’s assets, and apply them to a character. Feel free to use the plugin, or take a peek at the code to see how I use the GetBundleDetailsAsync API.

53 Likes

Thanks. I actually didn’t see your reply to my post until after I figured it out, but I saw your plugin on another devforum post and downloaded it and used your code to fix my problem. :+1:

2 Likes

Thanks for the plugin, very helpful!
Thanks for the plugin, very helpful!
Thanks for the plugin, very helpful!

21 Likes

This plugin have some issues when encounters with 6d motors, vector3value, wrap target and etc.

I think humanoid description is the best way right now.
AS stand for assets service
PL stand for Players

function LoadBundle(ID)
	local Bundle = AS:GetBundleDetailsAsync(ID)
	local OutfitID
	for i, v in pairs(Bundle.Items) do
		if not string.match(v.Name, "Head") and v.Type == "UserOutfit" then
			OutfitID = v.Id
		end
	end
	local Description = PL:GetHumanoidDescriptionFromOutfitId(OutfitID)
	local Rig = PL:CreateHumanoidModelFromDescription(Description)
	Rig.Parent = workspace
	return Rig
end

This should be marked as the answer