Datastore not working as intended

So I made a script which creates bool values based on the amount of weapons on a folder using for loops, and saves it to a datastore. However when one of the bool values gets updated to “true” value, It loads it on every other bool values that shouldnt have a “true” value. It only gets set to “true” when they have already bought the weapon.
Here’s the script:

local SVersion = DS:GetDataStore("SaveTest1")

game.Players.PlayerAdded:Connect(function(player)
	local SStorage = game:GetService("ServerStorage")
	local WeapFold = SStorage:WaitForChild("Swords")
	
	local WeaponSaves = Instance.new("Folder", player)
	WeaponSaves.Name = 'WeaponSaves'

	for i,Weaps in pairs(WeapFold:GetChildren()) do
		local BoolValue = Instance.new("BoolValue", WeaponSaves)
		BoolValue.Name = Weaps.Name	
		BoolValue.Value = SVersion:GetAsync(player.UserId) or false --The values loads the "True" value from one bool to every other values which ruins the data saving.
	
	end	
end)

--Once player leaves, save their owned weapon values to true and move it to a table.

game.Players.PlayerRemoving:Connect(function(plr)

	
	local Data1 = {}
	local SavesFolder = plr:FindFirstChild("WeaponSaves")
	for i,Values in pairs(SavesFolder:GetChildren()) do
		table.insert(Data1, Values.Value)
		
		local success,response = pcall(function()
			SVersion:SetAsync(plr.UserId, Data1)
		end)

		if success then		
		else
			warn(response)
		end
	end
end)

Here is the photo where the player bought weapon 4, It turned the value to “True”
The datasave should only save the “True” Value for weapon 4 but for some reason when the player loads again, other values also get their values to “True” even if they haven’t bought that weapon yet.
image

Picture of all the values getting turned to “True” even if they haven’t bought it yet, The result of Weapon 4’s “True” Value getting loaded to every other values.
image