Is this data store missing anything? Also how do I save a leaderstat? Do I use PlayerStatManager:ChangeStat(player)?
local PlayerStatManager = {} local DataStoreService = game:GetService("DataStoreService") local playerData = DataStoreService:GetDataStore("PlayerData") local AUTOSAVE_INTERVAL = 64 local DATASTORE_RETRIES = 3 local sessionData = {} function PlayerStatManager:ChangeStat(player, statName, changeValue) sessionData[player][statName] = sessionData[player][statName] + changeValue end local function dataStoreRetry(dataStoreFunction) local tries = 0 local success = true local data = nil repeat tries = tries + 1 success = pcall(function() data = dataStoreFunction() end) if not success then wait(1) end until tries == DATASTORE_RETRIES or success if not success then error() end return success, data end local function getPlayerData(player) return dataStoreRetry(function() return playerData:GetAsync(player.UserId) end) end local function savePlayerData(player) if sessionData[player] then return dataStoreRetry(function() return playerData:SetAsync(player.UserId, sessionData[player]) end) end end local function setupPlayerData(player) local success, data = getPlayerData(player) if not success then sessionData[player] = false else if not data then sessionData[player] = {Level = 1} savePlayerData(player) else sessionData[player] = data end end end local function autosave() while wait(AUTOSAVE_INTERVAL) do for player, data in pairs(sessionData) do savePlayerData(player) end end end game.Players.PlayerAdded:connect(setupPlayerData) game.Players.PlayerRemoving:connect(function(player) savePlayerData(player) sessionData[player] = nil end) spawn(autosave) game.Players.PlayerAdded:connect(function(player) local leaderstats = Instance.new("Model", player) leaderstats.Name = "leaderstats" local experiencePoints = Instance.new("IntValue", player) experiencePoints.Name = "ExperiencePoints" local score = Instance.new("IntValue", leaderstats) score.Name = "Score" local level = Instance.new("IntValue", leaderstats) level.Name = "Level" level.Value = 1 end)