Hey, I've been trying to fix this script but I'm not sure what's wrong since there is no error.

Any tips on how to find problems in scripts?

The prompt works but the function doesn't

My code:

local MarketplaceService = game:GetService("MarketplaceService")

MarketplaceService.ProcessReceipt = function(receiptInfo)
local players = game.Players:GetPlayers()

local currency = "Stage"

local done = 0

for i=1,#players do
    if players[i].userId == receiptInfo.PlayerId then
        if receiptInfo.ProductId == 976013381 or 976013480 or 976016228 or 976018199 and done == 0 then 
            done = 1
            players[i].leaderstats[currency].Value = players[i].leaderstats[currency].Value + 1
            players[i].Character.Humanoid.Health = 0
            done = 0
        end
    end
end

return Enum.ProductPurchaseDecision.PurchaseGranted
end