My datastore for my skin colors that I want to be changed throughout a GUI seems to be working, but it has a few issues. One issue is that when the Finish button is clicked in the GUI, it fires a RemoteEvent serverside, and in that script on the server event, it changes a string value's value in the player, which is the player's skin color, but the DataStore doesn't seem to recognize or doesn't seem to be updating.
My datastore script:
local DataStore = game:GetService("DataStoreService"):GetDataStore("CharacterGUI")
local function saveSkin(plr)
local key = "plr-"..plr.UserId
local folder = Instance.new("Folder")
folder.Parent = plr
folder.Name = "SkinData"
local skinc = Instance.new("StringValue")
skinc.Parent = folder
skinc.Name = "SkinColor"
local CharDataFunc = pcall(function()
CharData = DataStore:GetAsync(key)
end)
if CharData then
skinc.Value = CharData[1]
print("Data found")
print(skinc.Value)
for i,v in pairs (CharData) do
print(v)
end
local skincolor = CharData[1]
for i, v in pairs (CharData) do
local char = plr.Character
for b, c in pairs (char:GetChildren()) do
if c.ClassName == "Part" then
print("Color changing")
c.BrickColor = BrickColor.new(CharData[1])
print(c.BrickColor)
end
end
end
elseif not CharData then
local skincolors = {"Brown","Light orange"}
skinc.Value = skincolors[1]
DataStore:SetAsync(key,skincolors)
print(skinc.Value)
print("Data not existant")
end
end
game.Players.PlayerAdded:Connect(function(plr)
saveSkin(plr)
local key = "plr-"..plr.UserId
plr.SkinData.SkinColor.Changed:Connect(function()
DataStore:GetAsync(key)
print(DataStore:GetAsync(key))
end)
local char = plr.Character
local plrinplrs = game.Players:FindFirstChild(plr.Name)
if plrinplrs ~= nil then
game.Players[plr.Name].CanLoadCharacterAppearance = false
game.Players[plr.Name]:ClearCharacterAppearance()
end
plr.Character.Humanoid.Died:Connect(function()
plr:LoadCharacter()
local char = plr.Character
local skindata = DataStore:GetAsync(key)
for i, v in pairs (char:GetChildren()) do
if v.ClassName == "Part" then
print("Color changing while dead")
v.BrickColor = BrickColor.new(skindata[1])
print(v.BrickColor)
end
end
end)
end)
My script that occurs when the Finish button is clicked:
local DataStore = game:GetService("DataStoreService"):GetDataStore("CharacterGUI")
script.Parent.OnServerEvent:Connect(function(plr,skincolorval)
local skinc = plr.SkinData.SkinColor
skinc.Value = skincolorval
local key = "plr-"..plr.UserId
DataStore:SetAsync(key,{skinc.Value})
DataStore:GetAsync(key)
local dg = DataStore:GetAsync(key)
for d, a in pairs (dg) do
if d == 1 then
print("1")
print(a) end
for k, c in pairs (plr.Character:GetChildren()) do
if c:IsA("BasePart") then
c.BrickColor = BrickColor.new(dg[1])
print("finish button color")
print(c.BrickColor)
end
end
end
end)
