Is there a way to make a Catalog frame with its items for the Avatar Editor in Game No Shop?
Wow nice good work keep it up!
It’s finally here! The 2 year wait was definitely worth it. However I don’t know if this is intentional, but the player’s DisplayName
appears at the center of a game whenever the AvatarEditorService:PromptCreateOutfit()
or AvatarEditorService:PromptSaveAvatar()
methods are used. In the screenshot below, I’m using the AvatarEditorService:PromptSaveAvatar()
method.
With all of that said, nice addition as always Roblox! This will help many developers make functional avatar editors!
Thanks for your report, we will fix this issue.
Hello - great update! Really looking forward to all of the possibilities this will lead to.
I have been experimenting with the AvatarEditorService:GetInventory()
method, and found it to produce unreliable results about 5-10% of the time. Using the following code in a LocalScript, I have received different results:
local AvatarEditorService = game:GetService("AvatarEditorService")
local assetTypes = {
Enum.AvatarAssetType.BackAccessory,
Enum.AvatarAssetType.ShoulderAccessory,
Enum.AvatarAssetType.WaistAccessory,
Enum.AvatarAssetType.Hat,
Enum.AvatarAssetType.HairAccessory,
Enum.AvatarAssetType.FaceAccessory,
Enum.AvatarAssetType.NeckAccessory,
Enum.AvatarAssetType.FrontAccessory,
}
AvatarEditorService:PromptAllowInventoryReadAccess() -- get access to inventory
local promptResult = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()
if promptResult == Enum.AvatarPromptResult.Success then
local startTime = os.clock()
local pages = AvatarEditorService:GetInventory(assetTypes) -- get pages object
local inventory = {} -- table of all AssetIds
local function iterate(page) -- recursive func to iterate through pages object
for _, asset in pairs(page) do
table.insert(inventory, asset.AssetId)
end
if not pages.IsFinished then
pages:AdvanceToNextPageAsync()
iterate(pages:GetCurrentPage()) -- recurse with next page
end
end
iterate(pages:GetCurrentPage())
print(#inventory.. " accessories in your inventory; found in ".. (math.round((os.clock() - startTime) * 100) / 100).. " seconds")
end
Result #1: The expected result
This is the result that prints majority of the time, and is the correct result.
Result #2: The random result
Sometimes, this result prints randomly, with the accessories number ranging from 100-300. This is the incorrect result, and I’m not sure why its printing this.
Result #3: The error
Lastly, this will error randomly when I call the pages:AdvanceToNextPageAsync()
method. I am also not sure why this is occurring.
Is this a bug (if so, I can move this reply to a bug report), or an issue with my code? Any help would be appreciated, thank you!
Edit: I have moved this to a bug report as others have also been experiencing this, and there appears to be an issue with the page cursors.
Found a small bug: if you call PromptSaveAvatar()
or PromptCreateOutfit()
and then quickly close the prompt window before the character preview loads, there’ll be an error about AnimationClipProvider.
I am pretty sure some developers like them have already had early access to the feature during the beta testing, which seems a little unfair to all the new developers trying to come up.
Thanks for the report, I will fix this issue.
Is there any timeline you can give on this?
My thoughts exactly. Mobile players sometimes have a hard time getting IDs.
This is actually really cool! Glad to see new innovative features being added to the Roblox engine.
This feature making me excited! Can’t wait to see games like Plz Donate be benefited.
We are hoping to release that by the end of the year.
Found a weird issue with creating outfits:
So if you create an outfit with PromptCreateOutfit()
, and the name you input gets blocked by the text filter, then PromptCreateOutfitCompleted
will fire with Enum.AvatarPromptResult.Failed
and Enum.CreateOutfitFailure.InvalidName
.
However, the outfit still gets created, just with a default name instead (something like “Outfit 32”).
Is this meant to happen? Why does it still fire with Enum.AvatarPromptResult.Failed
when the creation didn’t actually fail? I feel like it shouldn’t be creating an outfit at all here…
EDIT: Seems like this is fixed now. It doesn’t create an outfit anymore.
I’m most excited for the catalog related functionality of this API. I’m hoping that it is designed to work well with HumanoidDescription instances, especially now that layered clothing is live. The current workflow for applying an accessory to a character requires getting Accessory info with MarketplaceService:GetProductInfo()
then using some hacky regex patterns to turn a AssetTypeId number into a AccessoryType enum so it can be applied using HumanoidDescription:SetAccessories()
. It would be awesome if AvatarEditorService:GetItemDetails()
included the AccessoryType in the returned dictionary to make applying it to a HumanoidDescription easier for developers.
It appears that the AvatarEditorService:ConformToAvatarRules()
method was not released. It throws a lacking permissions error when attempting to use. Currently permission level for the method is 5 according to Studio output.
There’s limited applicability for this feature but still usefull nonetheless.
This service appears to be down? After joining the demo place, accepting access to my inventory, equipping a new back accessory, and saving my avatar, :PromptSaveAvatarCompleted
never returns and my avatar never updates. I’m also unable to further equip any new accessories.
Another bug I’ve encountered: it appears :GetOutfits()
does not respect the given OutfitSource
param. Passing in Enum.OutfitSource.Created
shows all outfits, even purchased ones. And Enum.OutfitSource.Purchased
shows the same. Thanks!
Thanks for the report. The outfits issue seems to be an issue we are also experiencing on the web and is being looked into. I will see what the issue is with the demo place.