any feedback / optimizations
local GamePassManager = {}
local Market = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Cache table for storing game pass ownership
local gamePassCache = {}
-- Function to check game pass ownership with caching
function GamePassManager.hasGamePass(player, gamePassId)
if not player or not player:IsA("Player") then return false end
-- Check if the result is already cached
if gamePassCache[player.UserId] and gamePassCache[player.UserId][gamePassId] ~= nil then
return gamePassCache[player.UserId][gamePassId]
end
-- Fetch from API and store result
local success, hasPass = pcall(function()
return Market:UserOwnsGamePassAsync(player.UserId, gamePassId)
end)
if success then
-- Store in cache
gamePassCache[player.UserId] = gamePassCache[player.UserId] or {}
gamePassCache[player.UserId][gamePassId] = hasPass
return hasPass
else
warn("Failed to check GamePass ownership for", player.UserId, "GamePass:", gamePassId)
return false
end
end
-- Event to update cache when a player buys a game pass
Market.PromptGamePassPurchaseFinished:Connect(function(playerId, gamePassId, wasPurchased)
if wasPurchased then
if gamePassCache[playerId] then
gamePassCache[playerId][gamePassId] = true
end
end
end)
-- Clear cache when a player leaves (optional, for memory management)
Players.PlayerRemoving:Connect(function(player)
gamePassCache[player.UserId] = nil
end)
return GamePassManager