Loading custom appearances on a Character

What’s the most resource efficient and fastest way of loading a custom appearance on a player’s character the moment they spawn in? Preferably utilizing the :ApplyDescription() function

1 Like

Are you just trying to set clothes or something? Because you can do that in the Avatar settings. If you are trying to make a custom character then make it, rename it to StarterCharacter and put it in StarterPlayer

This is what I have been using for my own game for the past half a year and it has never failed me so yeah. This isnt the most efficient way and you can get the appearance id before the character loads but I dont think it would update the character is you change it on the website

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
    player.CharacterAdded:Connect(function(char)
        local Humanoid = char:WaitForChild("Humanoid")
        local AppearanceId = Players:GetHumanoidDescriptionFromUserId(player.UserId)
        Humanoid:ApplyDescription(AppearanceId)
    end)
end)

If you were instead looking for the appearance of a pre-existing character, then you can replace the appearance id variable with

local AppearanceId = {Path to the humanoid of the character}:GetAppliedDescription()

Any other questions id be happy to help!

1 Like

Clothes, skin color, face and accessories (not those from the catalog)

From my experience, loading a custom HumanoidDescription immediately after CharacterAdded has a 50/50 chance of sometimes applying the description and sometimes not, even with LoadCharacterAppearance and CharacterAutoLoads set to false

The parts that make up the things that are the HumanoidDescription themselves take time to load.
You just need a small pause.. task.wait(0.33) should do it. I just go with a real pause to be sure, and used that here too.. This strips off all Accessories (leaving hair) and adds a shirt and pants (with a tint).

-->SeverScript@ServerScriptService
game.Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)task.wait(3)
		local dfp,dfs=character:WaitForChild("Pants"),character:WaitForChild("Shirt")
		dfp.PantsTemplate="rbxassetid://12345678";dfp.Color3=Color3.fromRGB(176,208,255)
		dfs.ShirtTemplate="rbxassetid://12345678";dfs.Color3=Color3.fromRGB(176,208,255)
		for _,a in pairs(character:GetChildren())do if a:IsA("Accessory")then
				if a.AccessoryType ~=Enum.AccessoryType.Hair and
					a.AccessoryType~=Enum.AccessoryType.Eyelash and
					a.AccessoryType~=Enum.AccessoryType.Eyebrow then
					a:Destroy()end end
		end
	end)
end)

frost just needs: char:WaitForChild(“Humanoid”) task.wait(0.33)

Yeah I had this issue, try putting this before the Hunanoid:load apperance

repeat task.wait() until Char.Parent == game.Workspace

In short terms, sometimes the character loaded event fires before the character is parented to the workspace, which is required for the apply description to work. So if you would prefer to use a different method that would wait for that it would be all good (im not on my pc so I cant double check it will work)

1 Like