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!