I do not really understand the saving system. I tried different things to make it save a leaderstat, but it did not work. The output say error because the leaderstat did not save. At the bottom of the script, I tried PlayerStatManager:ChangeStat() because I thought it would save the player's leaderstat. What do I do to save the player's leaderstat? I tried many different things, but it did not work, so I need your help. Thanks!

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)
	sessionData[player][statName] = sessionData[player][statName]
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)

while true do
	for _, player in pairs(game.Players:GetPlayers()) do
		PlayerStatManager:ChangeStat(player, player.leaderstats.Level.Value)
	end
	wait(64)
end