Q1: Any Layered Accessory added into the player should be in the AccessoryBlob property of HumanoidDescription?
According to this AccessoryTypes table:
Q2: Hats, Hair and all the Accessories that I thought were rigid, may be a layered accessory too?
Q3: Whats the meaning of that Value number and how should be used? which seems its not related with the AssetType
Q4: So its possible that a Layered Hair exist? so when adding it to the player and when modifying their HumanoidDescription I should add that Layered Hair into AccessoryBlob instead of HairAccessory property?
Q5: I found this post that suggest that by AddingAccessories into the Character the HumanoidDescription.AccessoryBlob would update, thats is not correct, right? Cause when I add an accessory I see that HumanoidDescription never updates, so I’m editing the HumanoidDescription based on the accessory that the player is choosing to wear by script.
Q6: All the LayeredAccessories has a WrapLayer inside the Handle? Then a straight-forward way to identify if an accessory its a Layered one or not, could be checking if it has a WrapLayer in it or not?
I still have some doubts about this.
These two answers are contradictory:
Does all Layered Accessories goes under AccessoryBlob? 1 - Yes, as long as you are retrieving the latest version of that character’s humanoid description.
And
If a Hair is a LayeredAccessory goes under Blob? 4 - No, you should use the HairAccessory property for all hairs.
Because if a Hair is a Layered Accessory, then it should be placed in AccessoryBlob I guess. I don’t know if Layered Hairs exist… But if any exist it contains a WrapLayer, so ALL LayeredAccessories should be in the AccessoryBlob except for LayeredHairs?
Does GetAppliedDescription() reads any Accessory that I added by Humanoid:AddAccessory() ?
I think that is faster to AddAccessory() first then modify the HumanoidDescription property adding the new ID. In that way the whole character appearance is not reloading again. I could be wrong, cause maybe the accessories are in somekind of cache when using ApplyDescription and compares which one is new in order to add it. Honestly idk.
From what I understand hairs, layered or not, are still treated like normal hairs when it comes to humanoid descriptions. Now, they might be present in accessory blob as well, however that I do not know. You could try importing someone with layered hair into your game and checking it out for yourself.
Yes, it should.
I suppose it just really depends on whichever method you prefer using. Apply description would only be slower for accessories that haven’t been loaded previously. (But it’s usually not very noticable.)
This becomes a complicated task… cause now I don’t know if I should add the hair on both properties or only one… Plus all other accessory categories as Shoulders and well… all of them. If those are Layered should be added on Blob and in its proper property too?
That was my first thought, but how do I find a Layered Hair?
Thank you so much!! Yes indeed has a WrapLayer. But I still dont know if having a WrapLayer means that the asset is a LayeredAccessories, I guess it does.
Could you tell me how you find it so I can find and test all other accessory types?
The accessories are applied correctly into the character model of the player, BUT, I need that the HumanoidDescription reflects exactly what is being added cause Im saving it onto the main roblox avatar of the player by using PromptSaveAvatar(), which requires a HumanoidDescription. Then this is a shop, you bought an item, you wear it inside game, and you choose to save your current character as the default one for your roblox account.
So I need that the HumanoidDescription be exactly as it should be in order to save it.
Everytime I AddAccessory() into the Humanoid charactermodel. The humanoidDesc is not updating, so Im updating it manually
You suggested it a few posts ago, and I tried it, just to check if it actually reflects what the characterModel.Humanoid is wearing and its not. It only reflects what the HumanoidDescription has, if I add any accessory by using AddAccessory(), that item is not considered inside the Description, so, GetAppliedDescription() doesnt contains what I added by AddAccessory. Or maybe Im doing something wrong… but I dont think so, test it:
I insist that I could be doing something wrong. This is just a quick snippet to test what I’m saying that AppliedDescription is only the original desc that player has upon join, the desc is not updated when using AddAccessory()
local InS = game:GetService("InsertService")
game.Players.PlayerAdded:Connect(function(PLY)
local CHAR = PLY.Character or PLY.CharacterAdded:Wait()
local HUM = CHAR:WaitForChild("Humanoid")
task.wait(8) -- a dumb wait just to avoid any possible issue
local accss = InS:LoadAsset(14618893506):FindFirstChildOfClass("Accessory") -- load the LayeredHair accessory
HUM:AddAccessory(accss) -- add accessory
task.wait()
local DESC = HUM:GetAppliedDescription() -- get applied desc
DESC.Name = "AppliedOne"
DESC.Parent = workspace -- parent to workspace to read it
warn("the desc got from GetAppliedDescription:", DESC)
print("the desc in hum:", HUM:FindFirstChildOfClass("HumanoidDescription"))
end)
If that’s the case then I think you’re best bet is to only modify the humanoid description, including using the related methods for humanoid descriptions that I mentioned earlier. And then using apply description.
If after all that, and accessory blob is still not updating, then I would ignore the property all together. It’s completely possible that prompt to save the avatar doesn’t even use the property.
Nope, sorry my problem is not that the Blob is not updating, cause Im updating manually by using all the methods you suggested, thats already covered.
My main issue is that Im doing it manually so I have to decide if any Layered Accessory should be inside the Blob or not. As we already talked about this about hairs, which “probably” should be in Blob or not, probably in HairAccessory or not. Along with all other Rigids that seems that could be Layereds… pff…
Sadly, not. The Blob is the only property that holds all Layered Accessories, then if I dont edit the HumanoidDesc properly theres a chance that the stuff that the player’s avatar is wearing is not getting updated into their main roblox account, which totally breaks the goal of the system.
Btw, thank you so much for your help and patience. I hope not being a pain in the peach :3
Thats actually promising, you did infer it from that table which states that the “rigids” could rigids or layereds, and the other ones are indeed layereds?
I think that too, the first approach I did was that, until reading that rigids could be layered’s…
So do you think I could be fine if I dont add any of the “rigids” into blob?
Well after some tests I found that nope, any LayeredAccessory including Hair actually goes inside the Blob. If you add any LayeredHair into the HairAccessory property of HumanoidDescription and then ApplyDescription() it will be deleted from HairAccessory and the Blob JSON table will be updated with that Hair as [{"AssetId":9244111257,"Order":1,"AccessoryType":"Hair"}]
So all LayeredAccessories no matter which category are, goes inside the Blob. But, the most easy way to add a “pseudo-rigid/layered” as a Hair into the Blob, is by setting it into the normal CategoryAccessory in the HumanoidDescription and ApplyDescription(), which will wipe out the Accessory field and will be added automatically into the Blob JSON table.
So, 2 possible approaches to handle any pseudo-rigid/layered, adding it into the right category and letting the engine to solve the JSON format, or directly add a new table into the Blob table. All other real-layered accessories should be in the Blob