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)