This is my first time doing a product info script and I was just wondering if there is anything I can touch up!
P.S - I dont store playerdata inside of Players but instead in a folder in ReplicatedStorage just in case if anyone was wondering
-- services
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- constants
local PLAYER_DATA = ReplicatedStorage.PlayerData
local PRODUCTS_IDS = {
[1187687288] = {
Amount = 1000,
Repeat = true,
Class = "Cash",
},
}
local PASS_EVENTS = {
[188768734288] = function(player: Player)
warn("this is a test!")
end,
}
-- functions
function product_Receipt(receiptInfo)
local purchased = false
local product_Class = PRODUCTS_IDS[receiptInfo.ProductId].Class
local product_Repeat = PRODUCTS_IDS[receiptInfo.ProductId].Repeat
local product_Amount = PRODUCTS_IDS[receiptInfo.ProductId].Amount
local success,error = pcall(function()
purchased = not MarketplaceService:UserOwnsGamePassAsync(receiptInfo.PlayerId,receiptInfo.ProductId) and true or product_Repeat and true
end)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then -- player left the game
return Enum.ProductPurchaseDecision.NotProcessedYet
end
if success and purchased then
if product_Repeat then
if PLAYER_DATA:FindFirstChild(player.Name) then
local PlayerData = PLAYER_DATA[player.Name]
PlayerData.Currency[product_Class].Value += product_Amount
return Enum.ProductPurchaseDecision.PurchaseGranted
end
else
local success,error = pcall(function()
PASS_EVENTS[receiptInfo.ProductId]()
end)
if success then
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end
end
return Enum.ProductPurchaseDecision.NotProcessedYet
end
-- initalize
MarketplaceService.ProcessReceipt = product_Receipt