Hello guys I'm new to script and I'm facing an error. I made a script that saves the bool values from the player's folder (which is called "ownership"). Now my problem is that sometimes when I rejoin it saves the previous bool values that the new ones. For instance, I have 3 bool values, first called "first", second called "second" and third called "third".

1st play test: I set the first = true, second = false, third = false (when the player leaves; the script saves these values and when he rejoins he will have these values)

2st play test: I set the first = false, second = true, third = false

3st play test: I joined the game and have the values that correspond to the 1st play test

if you have any idea please let me know. The error occurs randomly

here is the script:

local titlefolder = game:GetService("ReplicatedStorage"):FindFirstChild("Titles") -- the folder that contains the values

local datastore = game:GetService("DataStoreService")

local savedata = datastore:GetDataStore("SaveTitles")


game.Players.PlayerAdded:Connect(function(plr)
	wait(.5)
	
	local data
	
	local ownership = plr:WaitForChild("ownership") -- the values that the player has

	local success,errormessage = pcall(function()
		data = savedata:GetAsync(plr.UserId)
	end)
	
	if data ~= nil then
		if success then
			for i,v in pairs (data) do
				if ownership:FindFirstChild(i) == nil and titlefolder:FindFirstChild(i) then
					local clone = titlefolder:FindFirstChild(i):Clone()
					clone.Parent = ownership
					clone.Value = v
				end
			end
		end
	end
end)

game:BindToClose(function()
	for i, plr in pairs(game.Players:GetPlayers()) do
		plr:Kick() -- Apparently so that it fires the PlayerRemoving function?
	end
end)

game.Players.PlayerRemoving:Connect(function(plr)
	wait(1)
	local itemsowned = {}
	local ownership = plr:WaitForChild("ownership")
	
	for i,v in pairs (ownership:GetChildren()) do -- from the player's folder
		itemsowned[v.Name] = v.Value -- (im making a dictionary)
	end
	
	for i,v in pairs (itemsowned) do
		print(i.." = "..tostring(v))
	end
	local success,errormessage = pcall(function()
		savedata:SetAsync(plr.UserId, itemsowned)
	end)
	
	if success then
		print("Titles successfully saved")
	else
		warn(errormessage)
	end
end)