Changing the BodyColors of a character from the server will not always replicate to the Client. If BodyColors are altered after they have replicated to the client they will change to the nearest BrickColor instead of the proper Color3 value.
This script demonstrates the issue:
function setUpCharacter(character)
wait(2)
local bodyColors = character:FindFirstChild("Body Colors")
local skinToneColor3 = Color3.new(0, 0, 0)
bodyColors.HeadColor3 = skinToneColor3
bodyColors.LeftArmColor3 = skinToneColor3
bodyColors.RightArmColor3 = skinToneColor3
bodyColors.LeftLegColor3 = skinToneColor3
bodyColors.RightLegColor3 = skinToneColor3
bodyColors.TorsoColor3 = skinToneColor3
end
function OnPlayerAdded(player)
if player.Character and player.Character.Parent ~= nil then
setUpCharacter(player.Character)
end
player.CharacterAdded:Connect(function(character)
if character.Parent == nil then
character.AncestryChanged:wait()
end
setUpCharacter(character)
end)
end