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

Trouble with updating Async table data?

Asked by
z_lm 9
3 years ago

I've been making a script where you can daily get a "Golden Ticket," and redeem it somewhere else, with also having some Chips. I can't, for the love of my life, figure out what's wrong with this. It's just having trouble saving, it gets the values if you don't have data, but you should have some when you rejoin. Any help?

local DataStoreService = game:GetService('DataStoreService')
local playerData = DataStoreService:GetDataStore('PlayerData')
local hourWait = 24
local function onPlayerJoin(player)
    local leaderstats = Instance.new('Folder')
    leaderstats.Name = 'leaderstats'
    leaderstats.Parent = player

    local chips = Instance.new("IntValue")
    chips.Name = 'Chips'
    chips.Parent = leaderstats

    local ticket = Instance.new('IntValue')
    ticket.Name = 'Tickets'
    ticket.Parent = leaderstats
    local timeNow = os.time()

    local playerUserId = 'Player_'..player.UserId
    local data = playerData:GetAsync(playerUserId)
    if data then
        ticket.Value = data['Tickets']
        chips.Value = data['Chips']
        local timeSinceLastClaim = timeNow - data
        if (timeSinceLastClaim / 3600) >= hourWait then
            --Eligible for reward :)
            game.ReplicatedStorage.ShowDailyReward:FireClient(player, hourWait)
            local connection
            connection = game.ReplicatedStorage.ClaimDailyReward.OnServerEvent:Connect(function(triggeringplayer)
                if triggeringplayer == player then
                    print("Reward Claimed")
                    player.leaderstats.GoldenChip.Value = player.leaderstats.GoldenChip.Value + 1
                    playerData:SetAsync(playerUserId,os.time())
                    connection:Disconnect()
                end
            end)
        else 
            print("Player is uneligible currently.")
        end
    else
        local playerUserId = 'Player_'..player.UserId
        ticket.Value = 0
        chips.Value = 1000
        game.ReplicatedStorage.ShowDailyReward:FireClient(player, hourWait)
        connection = game.ReplicatedStorage.ClaimDailyReward.OnServerEvent:Connect(function(triggeringplayer)
            if triggeringplayer == player then
                print("Reward Claimed")
                player.leaderstats.GoldenChip.Value = player.leaderstats.GoldenChip.Value + 1
                playerData:SetAsync(playerUserId,os.time())
                connection:Disconnect()
    end
        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
        local playerUserId = 'Player_'..player.UserId
        pcall(function()
            local timeVal = os.time()
            playerData:SetAsync(playerUserId)
        end)
        print("Saved because you are a new player!")
    end
end

game.Players.PlayerAdded:Connect(onPlayerJoin)
game.Players.PlayerRemoving:Connect(onPlayerExit)

Answer this question