This script is in ServerScriptService (not local script). Before I released the game it tested perfectly. After a month and a lot of people playing, I now have some players telling me their leaderstats reset to zero when rejoining the game. I have no clue whats wrong?
Please help, I would be so very thankful.
Thanks so much! Tobycats
DataStore = game:GetService("DataStoreService"):GetDataStore("StatsService")
game.Players.PlayerAdded:connect(function(player)
repeat wait() until player:FindFirstChild("leaderstats")
repeat wait() until player.leaderstats:FindFirstChild("Rank")
repeat wait() until player.leaderstats:FindFirstChild("XP")
repeat wait() until player.leaderstats:FindFirstChild("Kills")
local PlrsRank = DataStore:GetAsync(player.Name .. "_Rank")
local PlrsXP = DataStore:GetAsync(player.Name .. "_XP")
local PlrsKills = DataStore:GetAsync(player.Name .. "_Kills")
if PlrsRank ~= nil then
player.leaderstats.Rank.Value = PlrsRank
player.leaderstats.XP.Value = PlrsXP
player.leaderstats.Kills.Value = PlrsKills
end
end)
game.Players.PlayerRemoving:connect(function(player)
if player:FindFirstChild("leaderstats") then
if player.leaderstats:FindFirstChild("Rank") then
DataStore:SetAsync(player.Name .. "_Rank", player.leaderstats.Rank.Value)
end
if player.leaderstats:FindFirstChild("XP") then
DataStore:SetAsync(player.Name .. "_XP", player.leaderstats.XP.Value)
end
if player.leaderstats:FindFirstChild("Kills") then
DataStore:SetAsync(player.Name .. "_Kills", player.leaderstats.Kills.Value)
end
end
end)`

1 comment
A general rule of thumb is to use :SetAsync() for immutable variables or data that once set - will never change. :UpdateAsync() is for mutable variables - variables that change frequently or can change.