Hey. I'm trying to make a leaderboard that saves when the player quits (and load) using DataStores. It works with 1 value, but when i try to put the table with 4 value into the data store it doesnt load up when i join.

Script in ServerScriptService:

local DataStoreService=game:GetService("DataStoreService")
local DataStore=DataStoreService:GetDataStore("Player_Data")

game.Players.PlayerAdded:connect(function(Player)

    local PlayerData;

    local Stats=Instance.new('Model')
    Stats.Name="leaderstats"

    local Cash=Instance.new('IntValue',Stats)
    Cash.Name="Cash"

    local Points=Instance.new('IntValue',Stats)
    Points.Name="Points"

    local Ammo=Instance.new('IntValue',Stats)
    Ammo.Name="Ammo"

    local Damage=Instance.new('IntValue',Stats)
    Damage.Name="Damage"

    Stats.Parent=Player

    local CanSave=Instance.new('BoolValue',Player)
    CanSave.Name="CanSaveData"
    CanSave.Value=true

    local DataFetchSuccess,ErrorMessage=pcall(function()
    PlayerData=DataStore:GetAsync(tostring(Player.UserId))
    end)

    if DataFetchSuccess then

        if PlayerData~=nil then
            Player.leaderstats.Cash.Value=PlayerData[1] or 0
            Player.leaderstats.Points.Value=PlayerData[2] or 0
            Player.leaderstats.Ammo.Value=PlayerData[3] or 0
            Player.leaderstats.Cash.Value=PlayerData[4] or 0
        else
            Player.leaderstats.Cash.Value=100
            Player.leaderstats.Points.Value=19
            Player.leaderstats.Ammo.Value=5
            Player.leaderstats.Cash.Value=10
        end

    else

        Player.CanSaveData.Value=false
        Player:Kick("Your data failed to load! Please rejoin.") 

    end

    end)

game.Players.PlayerRemoving:connect(function(Player)

    if Player.CanSaveData.Value==false then return end

    local PlayerData={
        Player.leaderstats.Cash.Value,
        Player.leaderstats.Points.Value,
        Player.leaderstats.Ammo.Value,
        Player.leaderstats.Damage.Value
    }

    local DataWriteSuccess,ErrorMessage=pcall(function()
        DataStore:SetAsync(tostring(Player.UserId),{
            Player.leaderstats.Cash.Value,
            Player.leaderstats.Points.Value,
            Player.leaderstats.Ammo.Value,
            Player.leaderstats.Damage.Value
        })
    end)    

    if not DataWriteSuccess then

        local Retry_Count=0

        while Retry_Count<6 do
            wait(60)
            local Succeded,Error=pcall(function()
                DataStore:SetAsync(tostring(Player.UserId),{
                    Player.leaderstats.Cash.Value,
                    Player.leaderstats.Points.Value,
                    Player.leaderstats.Ammo.Value,
                    Player.leaderstats.Damage.Value
                })
            end)
            if Succeded then break end
            Retry_Count=Retry_Count+1
        end

    end

end)

Any help would be appreciated. Thanks

1 comment

0

As you have stated in your previous question, this is not your script, attempts should be of own work.