Player:HasAppearanceLoaded() issues

HasAppearanceLoaded_Repro.rbxl

Regardless of FilteringEnabled/CharacterAutoLoads:

  • In studio, CharacterAppearanceId < 1 will never return
  • Start server/Online, the client will not return regardless

These are obvious problems, being that Start Server only uses guests (Id < 1), and that the client is unexpected behavior.

I donā€™t think the first item is a bug, the HasAppearanceLoaded method will only return true if the character appearance was loaded successfully, a negative id means the appearance will not load. I donā€™t think this will actually effect guests when not using CharacterAppearanceId.

The second issue should be fixed, this is caused by the server loading the appearance and the client not keeping track that the appearance has been loaded when the CharacterAppearanceLoaded signal fires.

This is still an issue, CharacterAppearanceLoaded does not fire on the client and :HasAppearanceLoaded() never becomes true client-side.

CharacterAppearanceLoaded Doesnā€™t Replicate To Client.rbxl (12.8 KB)

Code

Server

local PlayerS = game:GetService('Players')

PlayerS.PlayerAdded:Connect(function(plr)
	plr.CharacterAppearanceLoaded:Connect(function(Cha)
		print('CharacterAppearanceLoaded ',Cha:GetFullName(),plr:HasAppearanceLoaded())
	end)
end)

Client

local PlayerS = game:GetService('Players')
	local plr = PlayerS.LocalPlayer


while not plr:HasAppearanceLoaded() do print('Not Loaded') wait(1) end

This is still an issue. The code above never stops printing ā€˜Not Loadedā€™, but on the Server it prints ā€œCharacterAppearanceLoaded RuizuKun_Dev trueā€.

Iā€™m checking if the Playerā€™s Character Appearance has loaded or not on the client so the LocalScript knows when then Appearance is ready.

If itā€™s not going to be fix it should be mentioned on the Wiki


Sorry I didnā€™t meant to reply to you buildthomas , I was replying to the OP

1 Like

Iā€™m having issues with CharacterAppearanceLoaded not firing on the client. Will this be fixed soon?

2 Likes

For this poor dude HasAppearenceLoaded never returns true, since heā€™s the only one of many that it does return true for them, I do think hasappearenceloaded still has some issues, anyone has same experiences? (in the picture i printed the players name in a loop until it will return true)

1 Like

OPā€™s issue is fixed, and testing 1525559632ā€™s current avatar seems fine too. Do you know of any current issues?

1 Like

This problem might be a device thing rather than an avatar thing, donā€™t know, I just know that for some people like that guy the event would never trigger. I abandoned that method a while ago

1 Like

In my case, I wanted to use it to know when all the parts for a character have loaded on the client, however, it only seems to work on the server.

When on the server, I can loop, and it will return true when the characterā€™s parts are all loaded, however on the client it returns true IMMEDIATELY, even when parts are not ready.

I was using a Player:ClearCharacterAppearance() to test.
On the client, it only removes some of the characters assets, unless I put a wait, for like 5 seconds. On the server it will not require a wait, but rather fire when ready.

Server Script

game.Players.PlayerAdded:Connect(function(player)
	while not player:HasAppearanceLoaded() do 
		print("waiting server")	
		wait() 
	end
	print("loaded server")
	player.Character.ChildRemoved:Connect(function(child)
		print(child.ClassName, 'removed from character')
	end)

	player:ClearCharacterAppearance()
end)

This gives outputā€¦
15:20:00.849 :arrow_forward: waiting server (x11) - Server - Script:3
15:20:03.078 loaded server - Server - Script:6
15:20:03.078 Pants removed from character - Server - Script:8
15:20:03.078 BodyColors removed from character - Server - Script:8
15:20:03.078 :arrow_forward: Accessory removed from character (x3) - Server - Script:8

Client Script -without wait-

while not game.Players.LocalPlayer:HasAppearanceLoaded() do
print("waiting client")
wait()
end
print("loaded client")

game.Players.LocalPlayer.Character.ChildRemoved:Connect(function(child)
print(child.ClassName, 'removed from character')
end)

game.Players.LocalPlayer:ClearCharacterAppearance()

Outputsā€¦
15:21:56.123 loaded client - Client - LocalScript:5
15:21:56.123 Pants removed from character - Client - LocalScript:7
15:21:56.124 BodyColors removed from character - Client - LocalScript:7

Client Script WITH the wait

wait(5)

game.Players.LocalPlayer.Character.ChildRemoved:Connect(function(child)
	print(child.ClassName, 'removed from character')
end)

game.Players.LocalPlayer:ClearCharacterAppearance()

output for this isā€¦
15:27:53.761 Pants removed from character - Client - LocalScript:4
15:27:53.761 BodyColors removed from character - Client - LocalScript:4
15:27:53.761 :arrow_forward: Accessory removed from character (x3) - Client - LocalScript:4

So you can see the HasAppearanceLoaded is returning true on the client before things have loaded.