• Discuss all the things!

    171 Topics
    638 Posts

    Hi brainCloud team,

    We are considering using shared / multi-use Redemption Codes for operational rewards.

    The main issue is not code distribution itself, but recovery when reward fulfillment fails.

    Our desired flow is:

    User redeems shared Redemption Code
    → reward fulfillment is attempted
    → if reward fulfillment succeeds, user should not receive it again
    → if reward fulfillment fails, we need a way to retry or recover
    We would like to know whether Redemption Code is intended to be used as the source of truth for this kind of reward claim / recovery state.

    Questions:

    For a shared / multi-use Redemption Code, if a specific user already redeemed the code, can that user’s redeemed state be reset or deleted through any supported API or operator flow?

    If reward fulfillment fails after redemption, is there a BrainCloud-side retry or recovery mechanism that allows the same user to receive the reward later?

    Can customRedemptionInfo or fulfillment status be updated and used as a persistent per-user record of reward fulfillment success / failure?

    If the only reset method is marking a user as a tester and deleting the redeemed record manually in the portal, is that intended only for testing and not for production operations?

    For production operational rewards, would BrainCloud recommend:

    shared Redemption Code + Fulfillment Script retry,
    single-use personal codes per user,
    a Custom Entity / external claim ledger,
    or another pattern?
    Our concern is this case:

    RedeemCode succeeds
    → reward fulfillment fails
    → the user cannot redeem the same shared code again
    → we need an auditable retry/recovery path
    We want to understand whether Redemption Code can own this recovery state, or whether we should manage claim status separately outside of Redemption Code.

    Thanks.

  • Suggestions for improvements, new features, etc.

    44 Topics
    147 Posts

    @noah I wish to be careful to deliver the feature as you need it. Could I ask you more questions about Prerequisites?

    Let's return to the mockup for ITEMS. I am showing a Deluxe Hat Rack.

    5e5eb964-36b5-425a-be04-65266c665238-image.png

    In this mockup, setting a Prerequisite only means: "Does the player possess these items in their inventory?"

    In the illustrated case, if the player has John's Hat and Mark's Hat in their inventory, then they can successfully attempt a purchase of this item.
    It will cost them 1,234,234 COINS and 5,345 Credits to receive the item.

    In this example, after paying the COINS and Credits to receive the Deluxe Hat Rack, the player still has John's Hat and Mark's Hat in their inventory at the end of the transaction.

    So could you verify that when you said, "We had only one step in mind. Consuming items I own while purchasing items" did you mean:

    A) prerequisites are not consumed when making an item purchase
    OR
    B) that you are seeking a system where ITEMS can be included in the List Price of an ITEM?

    I have a follow-up question: When the client calls Service ItemCatalog, Operation: GetCatalogItemsPage, would it be your preference that:
    Items with prerequisites that the player does not posses should be:
    A) Not returned
    B) Returned with an attribute, like "CannotBuy"
    C) Returned normally?
    (Because in a case where the player does not meet the prerequisites they will not be able to successfully purchase the item.)
    Could you provide some guidance here.

    Thank you for your help and advice,
    John

  • Questions specific to particular APIs, libraries, etc.

    64 Topics
    267 Posts

    Added the additional details to 13660

  • General cloud code discussions...

    35 Topics
    149 Posts

    Q1: The removed player is completely excluded from reward calculation, so if the deletion happens before the job runs, that player is never iterated over and receives no rank or rewards.
    Q2: Yes, the modified score will be used. The job always reads live state. Note that whether the score actually gets modified depends on the leaderboard type (e.g., for the LOW_VALUE type, only updates if the new score is less than the existing)
    Q3: No backfilling, the next joiner goes to the latest instance, not the freed spot in ^2. No loop over earlier instances (^1, ^2) ever happens. The next joiner goes to ^3 (or ^4 if ^3 is full). The freed spot in ^2 stays empty permanently.

  • brainCloud's online learning tutorials and examples.

    3 Topics
    3 Posts

    brainCloud developers have just release several playable builds of our famous examples! See our cool features in action. Find them at https://getbraincloud.com/demos for Windows, Mac, online and mobile.

brainCloud 5 is alive!

brainCloud 5 features Portal-X (our next-gen portal), Integrated Forums (you found them), our new Bootcamp training videos, and more!

Join the discussion here!

brainCloud Bootcamp!
brainCloud's new video learning portal is now online! Go check out brainCloud BootCamp!

Need to report a defect?
Use the chat widget from the Design Portal - or send an email to support at getbraincloud.com. Thanks!