Why isn’t my Hair Color not being loaded correctly?
I use identical logic to save the Skin Color and that works fine, but when I save Hair Color, it gives me the proper value to save, but it loads as the default.
Does anyone know how to solve this?
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local playerDataStore = DataStoreService:GetDataStore("PlayerDataStore")
local defaultIsFemale = false
local defaultSkinColor = Color3.fromRGB(255, 212, 177)
local defaultHairNumber = 1
local defaultHairColor = Color3.fromRGB(255, 255, 255)
local defaultBodySize = 1
local function color3ToTable(color)
return {color.R, color.G, color.B}
end
local function tableToColor3(tbl)
return Color3.new(tbl[1], tbl[2], tbl[3])
end
local function savePlayerData(player)
local character = player.Character
if character then
local data = {
IsFemale = character.Customization.IsFemale.Value or defaultIsFemale,
SkinColor = color3ToTable(character.Customization.SkinColor.Value or defaultSkinColor),
HairNumber = character.Customization.HairNumber.Value or defaultHairNumber,
HairColor = color3ToTable(character.Customization.HairColor.Value or defaultHairColor),
BodySize = character.Customization.BodySize.Value or defaultBodySize
}
local success, err = pcall(function()
print("Saved IsFemale as: " .. tostring(data.IsFemale))
print("Saved SkinColor as: " .. table.concat(data.SkinColor, ", "))
print("Saved HairNumber as: " .. tostring(data.HairNumber))
print("Saved HairColor as: " .. table.concat(data.HairColor, ", "))
print("Saved BodySize as: " .. tostring(data.BodySize))
playerDataStore:SetAsync(player.UserId, data)
end)
if not success then
warn("Failed to save data for player", player.Name, ":", err)
end
end
end
local function loadPlayerData(player)
local success, data = pcall(function()
return playerDataStore:GetAsync(player.UserId)
end)
if success and data then
local isFemale = data.IsFemale or defaultIsFemale
local skinColor = data.SkinColor and tableToColor3(data.SkinColor) or defaultSkinColor
local hairNumber = data.HairNumber or defaultHairNumber
local hairColor = data.HairColor and tableToColor3(data.HairColor) or defaultHairColor
local bodySize = data.BodySize or defaultBodySize
print("Found and loaded data for Player: " .. player.Name)
return isFemale, skinColor, hairNumber, hairColor, bodySize
else
print("Using Defaults for Player:", player.Name)
return defaultIsFemale, defaultSkinColor, defaultHairNumber, defaultHairColor, defaultBodySize
end
end
local function changePlayerAppearance(character, isFemale, skinColor, hairNumber, hairColor, bodySize)
local player = Players:GetPlayerFromCharacter(character)
character.Customization.IsFemale.Value = isFemale
character.Customization.SkinColor.Value = skinColor
character.Customization.HairNumber.Value = hairNumber
character.Customization.HairColor.Value = hairColor
character.Customization.BodySize.Value = bodySize
end
local function onPlayerAdded(player)
local function onCharacterAdded(character)
character:WaitForChild("Humanoid")
local isFemale, skinColor, hairNumber, hairColor, bodySize = loadPlayerData(player)
changePlayerAppearance(character, isFemale, skinColor, hairNumber, hairColor, bodySize)
end
player.CharacterAppearanceLoaded:Connect(onCharacterAdded)
player.CharacterAdded:Connect(onCharacterAdded)
spawn(function()
while player.Parent do
wait(1)
savePlayerData(player)
end
end)
end
local function onPlayerRemoving(player)
savePlayerData(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoving)
for _, player in ipairs(Players:GetPlayers()) do
onPlayerAdded(player)
end