I assume this is an intended engine feature but the Docs does not make it clear.
One possible use-case for this (which is how I found out about this bug) is if you are using Custom Rigs, for example I myself is trying to use a Skinned R15 Rig and then load the player description after, a way to get around this is by using CharacterAdded instead, which worked because It wasn’t Accessory sensitive, but it helps a lot if it were more clear in the docs so people can save some headache troubleshooting.
Additional Note: I was also using an Open source customization gui and guns OpenCSOM - Roblox
But found that it relied on CharacterAppearanceLoaded somewhere in the Guns Server Script, so it kinda took a while to find the root cause because it breaks with my specific setup, I had to modify it a little.
Looking at the issue at hand with a broader perspective and much more experience this time around, I think the behavior of this event is actually perfectly valid.
This is just an assumption, but “CharacterAppearance” to me refers to the player’s customized look.
As a developer, when you override the player’s customized look with your own definition in your game, there is no character appearance for Roblox to load.
I assume that Roblox can’t guarantee the event’s validity in the scenario that a developer overrode a player’s looks, because developer implementations can vary widely, meaning they’d probably just have to fire it the moment the custom character is inserted, which would make the event pretty meaningless… (Player.CharacterAdded)
Hence I instead suggest the following:
The official documentation for Player.CharacterAppearanceLoaded should be updated to mention its cease of function with the use of custom characters.
You implement your own character loading pipeline. This could be as simple as:
Requesting a character from the client.
Then have the server prepare the character for you and assign it to Player.Character.
The client listens to Player.CharacterAdded or alternatively, the call from pt.1 is a RemoteFunction that yields with a return value of type Model.
What you said is true, however I think this is still likely a bug though because Player:HasAppearanceLoaded() returns true for custom StarterCharacters. It’s just not so consistent if you get what I mean, if :HasAppearanceLoaded works perfectly fine, why doesn’t the event work too?
I’ll probably try opening a PR on the docs and see what they think about, Thanks! I’ll leave this open though.
Yeah you’re right, that does sound like an inconsistency.
In that case I feel they should definitely re-evaluate the intended behavior and update the docs accordingly.