Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

What's wrong with my multiple value datastore?

Asked by 3 years ago

Here's my datastore meant to save levels and skillpoints for my game, but it doesn't save. What's wrong with it?

local DataStoreService = game:GetService("DataStoreService")

local playerData = DataStoreService:GetDataStore("PlayerData")

local function onPlayerJoin(player)
    local leaderstats = Instance.new('Folder')
    leaderstats.Name = 'leaderstats'
    leaderstats.Parent = player

    local Level = Instance.new('IntValue')
    Level.Name = 'Level'
    Level.Parent = leaderstats

    local Exp = Instance.new('IntValue')
    Exp.Name = 'Exp'
    Exp.Parent = leaderstats


    local HP = Instance.new('IntValue')
    HP.Name = 'Hp'
    HP.Parent = leaderstats

    local ST = Instance.new('IntValue')
    ST.Name = 'StrengthPoints'
    ST.Parent = leaderstats


    local DP = Instance.new('IntValue')
    DP.Name = 'DodgePoints'
    DP.Parent = leaderstats


    local SkillPoints = Instance.new('IntValue')
    SkillPoints.Name = 'SkillPoints'
    SkillPoints.Parent = leaderstats

    local playerUserId = 'Player_'..player.UserId
    local data = playerData:GetAsync(playerUserId)
    if data then
        SkillPoints.Value = data["SkillPoints"]
        DP.Value = data["DodgePoints"]
        ST.Value = data["StrengthPoints"]
        HP.Value = data["Hp"]
        Exp.Value = data["Exp"]
        Level.Value = data["Level"]
    else
        SkillPoints.Value = 0
        DP.Value = 0
        ST.Value = 0
        HP.Value = 0
        Exp.Value = 0
        Level.Value = 1
        if Level.Value == 0 then
            Level.Value = 1
        end
    end
end

local function create_table(player)
    local player_stats = {}
    for _, stat in pairs(player.leaderstats:GetChildren()) do
        player_stats[stat.Name] = stat.Value
    end
    return player_stats
end

local function onPlayerExit(player)
    local player_stats = create_table(player)
    local success, err = pcall(function()
        local playerUserId = 'Player_'..player.UserId
        playerData:SetAsync(playerUserId, player_stats)
    end)

    if not success then
        warn('Couldnt save data')
    end
end
game.Players.PlayerAdded:Connect(onPlayerJoin)
game.Players.PlayerRemoving:Connect(onPlayerExit)

Answer this question