Data loss issues. NEED HELP, URGENT

My game is having massive data loss issues, so I have decided to transfer over to profile store, any help is appreciated.

lobby join code:

local playerFolder = storeFolder:FindFirstChild(player.Name)
	local newData = hs:JSONDecode(data)
	if not playerFolder then
		local folder = defaultFolder:Clone(); folder.Name = player.Name; folder.Parent = storeFolder
		playerFolder = folder
	end
	
	local bestNight = BestNightService:GetAsync(player.UserId) or 0
	local TopDonated = TopDonatedService:GetAsync(player.UserId) or 0
	
	local FazCoins = Instance.new("NumberValue")
	FazCoins.Name = "FazCoins"
	FazCoins.Parent = playerFolder
	FazCoins.Value = newData.FazCoins or 0
	
	local EquippedClass = Instance.new("StringValue")
	EquippedClass.Name = "EquippedClass"
	EquippedClass.Parent = playerFolder
	EquippedClass.Value = newData.EquippedClass or "None"
	
	player:SetAttribute("EquippedClass", newData.EquippedClass or "None")
	player:SetAttribute("FazCoins",  newData.FazCoins or 0)
	player:SetAttribute("BestNight", bestNight)
	player:SetAttribute("Donated", TopDonated)

Lobby leave code:

local playerFolder = storeFolder:FindFirstChild(player.Name):: Folder
	if not playerFolder then
		local folder = defaultFolder:Clone(); folder.Name = player.Name; folder.Parent = storeFolder
		playerFolder = folder
	end
	local dataList = {
		["OwnedClasses"] = {},
		["EquippedClass"] = "None",
		["FazCoins"] = 0,
	}
	
	local FazCoins = if playerFolder:FindFirstChild("FazCoins") then playerFolder.FazCoins.Value else 0
	local EquippedClass = if player:GetAttribute("EquippedClass") then player:GetAttribute("EquippedClass") else "None"
	local BestNight = if playerFolder:FindFirstChild("BestNight") then playerFolder.BestNight.Value else 0
	local OwnedClasses = if playerFolder:FindFirstChild("OwnedClasses") then playerFolder.OwnedClasses:GetChildren() else {}
	
	if playerFolder:FindFirstChild("EventFolder") then
		local TimeSinceLastClaim = if playerFolder.EventFolder:FindFirstChild("TimeSinceLastClaim") then playerFolder.EventFolder.TimeSinceLastClaim.Value else 0
		local DayCount = if playerFolder.EventFolder:FindFirstChild("DayCount") then playerFolder.EventFolder.DayCount.Value else 0
		local LastRoundPlayed = if playerFolder.EventFolder:FindFirstChild("LastRoundPlayed") then playerFolder.EventFolder.LastRoundPlayed.Value else 0
	
		dataList.Event.TimeSinceLastClaim = TimeSinceLastClaim
		dataList.Event.DayCount = DayCount
		dataList.Event.LastRoundPlayed = LastRoundPlayed
	end
	
	dataList.FazCoins = FazCoins
	dataList.EquippedClass = EquippedClass
	
	for _, Child in OwnedClasses do
		table.insert(dataList.OwnedClasses,Child.Name)
	end

	dataList = hs:JSONEncode(dataList)
	ds:SetAsync(player.userId,dataList)
	TopDonatedService:SetAsync(player.userId,player:GetAttribute("Donated") or 0)
	
	return dataList,playerFolder

In game join code:

local TeleportData = JoinData.TeleportData
	local PlayerData = DataStoreService:GetAsync(Player.UserId)
	local TopDonated = TopDonatedService:GetAsync(Player.UserId) or 0
	PlayerData = if PlayerData then HttpService:JSONDecode(PlayerData) else Player:Kick("Unable to find data: Kicked to prevent data loss.")

if PlayerData.EquippedClass then
		PlayerData.EquippedClass = EquippedClass
	end
	
	
	local DataFazCoins = if PlayerData then PlayerData.FazCoins else 0
	
	if DataFazCoins == nil then
		DataFazCoins = 0
	end
	
	
	Player:SetAttribute("Class", EquippedClass)
	Player:SetAttribute("Cash", workspace:GetAttribute("Game_MoneyEarnedOnSurvival"))
	Player:SetAttribute("Donated", TopDonated)
	Player:SetAttribute("FazCoins", DataFazCoins)
	Player:SetAttribute("Shop", false)
	
	PlayerStoredData[Player] = PlayerData

In game leave code:

local PlayerData = PlayerStoredData[Player]
	
	if PlayerData == nil then
		warn("FAILED TO FIND "..Player.Name.."'s DATA. NOT SAVING DATA TO PREVENT DATA LOSS")
		return
	end
	
	local Save = true
	
	if PlayerData == {} then
		Save = false
	end
	
	local FazCoins = Player:GetAttribute("FazCoins")
	local BestNight = BestNightService:GetAsync(Player.UserId) or 0
	
	if PlayerData and PlayerData.FazCoins then
		PlayerData.FazCoins = FazCoins
	end
	
	if Save == true then
		PlayerData = HttpService:JSONEncode(PlayerData)
		DataStoreService:SetAsync(Player.userId, PlayerData)
	end
	
	if BestNight < workspace:GetAttribute("DayCount") then
		BestNightService:SetAsync(Player.UserId, workspace:GetAttribute("DayCount"))
	end
	
	TopDonatedService:SetAsync(Player.UserId, Player:GetAttribute("Donated"))

PLEASE HELP

any tips in profile store would be highly appreciated!

1 Like