Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Skin color data store not updating?

Asked by 5 years ago

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)

Answer this question