Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Data Store Not Saving Data?

I've got a boolvalue data store and its not saving its data

local dsService = game:GetService("DataStoreService")
local ds = dsService:GetDataStore("Skins")
local ds2 = dsService:GetDataStore("Equipped")

-- Player Joined Function
game.Players.PlayerAdded:Connect(function(plr)
    local folder = Instance.new("Folder", plr)
	folder.Name = "skins"

	-- Bussiness Man
    local skin1 = Instance.new("BoolValue", folder)
    skin1.Name = "Bussiness Man"
    skin1.Value = ds:GetAsync(plr.UserId) or false
    skin1.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin1.Value)
    end)

	-- Old Man
	local skin2 = Instance.new("BoolValue", folder)
    skin2.Name = "Old Man"
    skin2.Value = ds:GetAsync(plr.UserId) or false
    skin2.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin2.Value)
    end)

	-- Athlete
	local skin3 = Instance.new("BoolValue", folder)
    skin3.Name = "Athlete"
    skin3.Value = ds:GetAsync(plr.UserId) or false
    skin3.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin3.Value)
    end)

	-- Mom
	local skin4 = Instance.new("BoolValue", folder)
    skin4.Name = "Mom"
    skin4.Value = ds:GetAsync(plr.UserId) or false
    skin4.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin4.Value)
    end)

	-- Cop
	local skin5 = Instance.new("BoolValue", folder)
    skin5.Name = "Cop"
    skin5.Value = ds:GetAsync(plr.UserId) or false
    skin5.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin5.Value)
    end)





	local folder2 = Instance.new("Folder", folder)
	folder2.Name = "equipped"
	
	-- Noob
    local skin0equip = Instance.new("BoolValue", folder2)
    skin0equip.Name = "Noob Equipped"
    skin0equip.Value = ds2:GetAsync(plr.UserId) or false
    skin0equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin0equip.Value)
    end)

	-- Bussiness Man
    local skin1equip = Instance.new("BoolValue", folder2)
    skin1equip.Name = "Bussiness Man Equipped"
    skin1equip.Value = ds2:GetAsync(plr.UserId) or false
    skin1equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin1equip.Value)
    end)

	-- Old Man
	local skin2equip = Instance.new("BoolValue", folder2)
    skin2equip.Name = "Old Man Equipped"
    skin2equip.Value = ds2:GetAsync(plr.UserId) or false
    skin2equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin2equip.Value)
    end)

	-- Athlete
	local skin3equip = Instance.new("BoolValue", folder2)
    skin3equip.Name = "Athlete Equipped"
    skin3equip.Value = ds2:GetAsync(plr.UserId) or false
    skin3equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin3equip.Value)
    end)

	-- Mom
	local skin4equip = Instance.new("BoolValue", folder2)
    skin4equip.Name = "Mom Equipped"
    skin4equip.Value = ds2:GetAsync(plr.UserId) or false
    skin4equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin4equip.Value)
    end)

	-- Cop
	local skin5equip = Instance.new("BoolValue", folder2)
    skin5equip.Name = "Cop Equipped"
    skin5equip.Value = ds2:GetAsync(plr.UserId) or false
    skin5equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin5equip.Value)
    end)
end)
 
-- Player Leaved Function
game.Players.PlayerRemoving:Connect(function(plr)
    ds:SetAsync(plr.UserId, plr.skins["Bussiness Man"].Value) 
	ds:SetAsync(plr.UserId, plr.skins["Old Man"].Value)
	ds:SetAsync(plr.UserId, plr.skins["Athlete"].Value)
	ds:SetAsync(plr.UserId, plr.skins["Mom"].Value)
	ds:SetAsync(plr.UserId, plr.skins["Cop"].Value)

	ds2:SetAsync(plr.UserId, plr.skins.equipped["Noob Equipped"].Value)
	ds2:SetAsync(plr.UserId, plr.skins.equipped["Bussiness Man Equipped"].Value) 
	ds2:SetAsync(plr.UserId, plr.skins.equipped["Old Man Equipped"].Value)
	ds2:SetAsync(plr.UserId, plr.skins.equipped["Athlete Equipped"].Value)
	ds2:SetAsync(plr.UserId, plr.skins.equipped["Mom Equipped"].Value)
	ds2:SetAsync(plr.UserId, plr.skins.equipped["Cop Equipped"].Value)
end)

1 answer

I think it's because you're using the same key each time you save different data. Add something unique to each key. Otherwise, each data will overwrite one another. You also don't need a PlayerRemoving event to save data when they leave because you already are saving their data whenever it changes.

local dsService = game:GetService("DataStoreService")
local ds = dsService:GetDataStore("Skins")
local ds2 = dsService:GetDataStore("Equipped")

-- Player Joined Function
game.Players.PlayerAdded:Connect(function(plr)
    local folder = Instance.new("Folder", plr)
    folder.Name = "skins"

    -- Bussiness Man
    local skin1 = Instance.new("BoolValue", folder)
    skin1.Name = "Bussiness Man"
    skin1.Value = ds:GetAsync(plr.UserId) or false
    skin1.Changed:Connect(function()
        ds:SetAsync("skin1: "..plr.UserId, skin1.Value) -- You see that I turned this key into a string and added to it to make it different from the other keys. If there is no other data being saved to this same key, this data will not be overwrited. Now do the same to the other keys (you can have whatever text you want in the strings but you should do whatever is simple and easy to understand).
    end)

    -- Old Man
    local skin2 = Instance.new("BoolValue", folder)
    skin2.Name = "Old Man"
    skin2.Value = ds:GetAsync(plr.UserId) or false
    skin2.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin2.Value)
    end)

    -- Athlete
    local skin3 = Instance.new("BoolValue", folder)
    skin3.Name = "Athlete"
    skin3.Value = ds:GetAsync(plr.UserId) or false
    skin3.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin3.Value)
    end)

    -- Mom
    local skin4 = Instance.new("BoolValue", folder)
    skin4.Name = "Mom"
    skin4.Value = ds:GetAsync(plr.UserId) or false
    skin4.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin4.Value)
    end)

    -- Cop
    local skin5 = Instance.new("BoolValue", folder)
    skin5.Name = "Cop"
    skin5.Value = ds:GetAsync(plr.UserId) or false
    skin5.Changed:Connect(function()
        ds:SetAsync(plr.UserId, skin5.Value)
    end)





    local folder2 = Instance.new("Folder", folder)
    folder2.Name = "equipped"

    -- Noob
    local skin0equip = Instance.new("BoolValue", folder2)
    skin0equip.Name = "Noob Equipped"
    skin0equip.Value = ds2:GetAsync(plr.UserId) or false
    skin0equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin0equip.Value)
    end)

    -- Bussiness Man
    local skin1equip = Instance.new("BoolValue", folder2)
    skin1equip.Name = "Bussiness Man Equipped"
    skin1equip.Value = ds2:GetAsync(plr.UserId) or false
    skin1equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin1equip.Value)
    end)

    -- Old Man
    local skin2equip = Instance.new("BoolValue", folder2)
    skin2equip.Name = "Old Man Equipped"
    skin2equip.Value = ds2:GetAsync(plr.UserId) or false
    skin2equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin2equip.Value)
    end)

    -- Athlete
    local skin3equip = Instance.new("BoolValue", folder2)
    skin3equip.Name = "Athlete Equipped"
    skin3equip.Value = ds2:GetAsync(plr.UserId) or false
    skin3equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin3equip.Value)
    end)

    -- Mom
    local skin4equip = Instance.new("BoolValue", folder2)
    skin4equip.Name = "Mom Equipped"
    skin4equip.Value = ds2:GetAsync(plr.UserId) or false
    skin4equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin4equip.Value)
    end)

    -- Cop
    local skin5equip = Instance.new("BoolValue", folder2)
    skin5equip.Name = "Cop Equipped"
    skin5equip.Value = ds2:GetAsync(plr.UserId) or false
    skin5equip.Changed:Connect(function()
        ds2:SetAsync(plr.UserId, skin5equip.Value)
    end)
end)

This discussion is preserved as it was. New answers, comments, and votes are closed.