So i've made a dev product that let's you skip a level for robux and it worked perfectly at first but now if i try to use it a few times in a row it starts skipping at first 2 levels at a time then 3 and so on but i have no clue why it's doing that. It's suppose to add +1 to stage number at the leaderboard and teleport the player to the next checkpoint, also after i die once i can't press the button anymore it doesn't respond with no errors in the output,i'd appreciate any input

Thanks for your time

local MarketplaceService = game:GetService("MarketplaceService")
local ds = game:GetService("DataStoreService"):GetDataStore("PurchaseHistory")
local productId = 50041340

MarketplaceService.ProcessReceipt = function(receiptInfo) 
 
	for i, player in ipairs(game.Players:GetChildren()) do
		if player.userId == receiptInfo.PlayerId then
 
			if receiptInfo.ProductId == productId then
				print 'y'
 
				local stats = player:WaitForChild("leaderstats")
				player.leaderstats.Stage.Value = player.leaderstats.Stage.Value + 1
				local stage = game.Workspace:WaitForChild(stats.Stage.Value)				
				wait(1)
				print '2'
				player.Character.Humanoid.Torso.CFrame = stage.CFrame + Vector3.new(0,3,0)
				print '3'
			end
		end
	end	
 
	local playerProductKey = "player_" .. receiptInfo.PlayerId .. "_purchase_" .. receiptInfo.ProductId
	ds:IncrementAsync(playerProductKey, 1)	
 
	return Enum.ProductPurchaseDecision.PurchaseGranted		
end