Add Per-Player Shop Visibility Criteria

As a Roblox developer, it is currently too hard to control what products are visible in the shop to specific players. I use developer products for my game, and since they can be rebought, players could accidentally buy products they have already purchased because there is no way to hide products based on custom criteria.

If Roblox is able to address this issue, it would improve my development experience because I could prevent accidental duplicate purchases and display shop items based on custom criteria like purchase history.

1 Like

Why wouldn’t gamepasses suffice here?

1 Like

I was expecting someone to ask this and I was debating on adding it in my original post but I thought I’d leave it out until someone asked to avoid clutter. Originally we used dev products over game passes to avoid our game passes being bought in other games but Roblox changed this. There is nothing stopping me from using game passes but I have built a habit of avoiding them.

I prefer to use developer products because if players buy game passes on the website I would need to check every game pass when the player joins which wouldn’t be bad if we only had a small number of game passes like we do now. I believe we have plans to add more game passes which could become a problem later if we have to check hundreds (exaggeration) of potential game passes every time. While there does not seem to be a limit of how many game passes can be created, there does appear to be an undocumented limit of how many game passes can remain on sale, back in my day it was 12 then raised to 15 and I have heard it is now 50.

I would rather use ProcessReceipt which fires upon purchase, it is easier to handle a purchase which is done in-game instead of waiting for the player to join and checking everything they do not own including game passes that are no longer available just for them to not own most of them which would be a waste of resources especially since the rate limits are already quite ungenerous.

There are valid use cases outside of my stubbornness such as games which have one time purchases intended to be purchased under specific conditions like starter packs which are usually bought within 24 hours of first playing. They avoid using game passes to make sure they are not bought at any time. Using dev products can guarantee that users cannot buy something on a specific day or between a specific time period. What if a product was only supposed to be purchased under specific conditions and you didn’t want users just buying it through the website? One example I can think of is Pillow Fight Simulator which has hundreds of shop items costing robux which are not game passes.

tldr: I would prefer one ProcessReceipt handler over calling UserOwnsGamePassAsync 300 times for every player that joins (limit is 60 per minute per player) and adding extra logic for PromptGamePassPurchaseFinished… maybe I’m just lazy?