GS2-Showcase SDK for Game Engine API Reference
Model
EzShowcase
Showcase
Showcase can be used to define products for display.
Additionally, the sales period for products on Showcase can be set.
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128 chars | Showcase name Showcase-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| metadata | string | ~ 2048 chars | Metadata Arbitrary values can be set in the metadata. Since they do not affect GS2’s behavior, they can be used to store information used in the game. | |||
| displayItems | List<EzDisplayItem> | [] | 1 ~ 1000 items | List of Display Items The list of items displayed on this showcase. Each display item can be either a single sales item or a sales item group. Items with an expired or inactive sales period event are automatically filtered out when the showcase is retrieved. | ||
| salesPeriodEventId | string | ~ 1024 chars | GS2-Schedule event GRN
with sales periods for Showcase Controls the overall sales period of this showcase. When specified, the entire showcase is only available during the associated GS2-Schedule event period. If the event is not active, the showcase returns empty. |
EzDisplayItem
Displayed Item
An item displayed on a showcase. Can reference either a single sales item or a sales item group. Each display item can have its own sales period controlled by a GS2-Schedule event, independently of the showcase-level sales period.
| Type | Condition | Required | Default | Value Limits | Description | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| displayItemId | string | ✓ | UUID | ~ 128 chars | Displayed Item ID Maintains a unique name for displayed products. If omitted, the system automatically assigns a name in UUID (Universally Unique Identifier) format. | |||||||
| type | String Enum enum { “salesItem”, “salesItemGroup” } | ✓ | Type The type of item displayed. A “salesItem” is a single product with fixed price and rewards. A “salesItemGroup” contains multiple sales items evaluated in order, used for step-up pricing or limited purchase discounts.
| |||||||||
| salesItem | EzSalesItem | {type} == “salesItem” | ✓* | Sales Item * Required if type is “salesItem” | ||||||||
| salesItemGroup | EzSalesItemGroup | {type} == “salesItemGroup” | ✓* | Sales Item Group * Required if type is “salesItemGroup” |
EzRandomDisplayItem
Random Displayed Item on the Random Showcase
Represents a product that has been drawn and displayed on a random showcase for a specific user. Contains the item’s price, rewards, and purchase count tracking for the current rotation period.
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| name | string | ✓ | UUID | ~ 128 chars | Random Displayed Item name Maintains a unique name for randomly displayed products. If omitted, the system automatically assigns a name in UUID (Universally Unique Identifier) format. | |
| metadata | string | ~ 2048 chars | Metadata Arbitrary values can be set in the metadata. Since they do not affect GS2’s behavior, they can be used to store information used in the game. | |||
| verifyActions | List<EzVerifyAction> | [] | 0 ~ 10 items | List of Verify Actions | ||
| consumeActions | List<EzConsumeAction> | [] | 0 ~ 10 items | List of Consume Actions | ||
| acquireActions | List<EzAcquireAction> | [] | 1 ~ 100 items | List of Acquire Actions | ||
| currentPurchaseCount | int | ✓ | 1 ~ 2147483646 | Current purchase count The number of times this item has been purchased in the current rotation period. Incremented each time a purchase is made and reset when the rotation period ends. | ||
| maximumPurchaseCount | int | ✓ | 1 ~ 2147483646 | Maximum purchase count The maximum number of times this item can be purchased in the current rotation period. Once currentPurchaseCount reaches this value, the item can no longer be purchased until the next rotation. |
EzSalesItem
Product
Set the price required to purchase the product and the reward earned for the purchase of the product.
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128 chars | Sales Item name Sales Item-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| metadata | string | ~ 2048 chars | Metadata Arbitrary values can be set in the metadata. Since they do not affect GS2’s behavior, they can be used to store information used in the game. | |||
| verifyActions | List<EzVerifyAction> | [] | 0 ~ 10 items | List of Verify Actions Precondition checks executed before the purchase. All verify actions must pass before consume and acquire actions are processed. Can be used to check purchase eligibility conditions. | ||
| consumeActions | List<EzConsumeAction> | [] | 0 ~ 10 items | List of Consume Actions Actions that consume resources as the purchase price. Can include GS2-Limit CountUp actions to control purchase limits for sales item groups. | ||
| acquireActions | List<EzAcquireAction> | [] | 1 ~ 100 items | List of Acquire Actions Actions that grant resources as purchase rewards. Executed after all consume actions complete successfully. |
EzSalesItemGroup
Product Group
A product group is an entity for display on a showcase. The first product that is determined to be available for purchase is actually displayed on the shelves. This can be used for products that are discounted only for the first time, or for a system in which the contents of products change depending on the number of times they are purchased, such as a step-up gacha.
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128 chars | Sales Item Group name Sales Item Group-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| metadata | string | ~ 2048 chars | Metadata Arbitrary values can be set in the metadata. Since they do not affect GS2’s behavior, they can be used to store information used in the game. | |||
| salesItems | List<EzSalesItem> | [] | 2 ~ 10 items | Products to be included in the product group Ordered list of sales items in this group. The system evaluates each item from first to last using GS2-Limit counters to determine purchase availability. The first purchasable item is displayed; if none qualify, the last item in the list is used as a fallback. |
EzConfig
Configuration
Set values to be applied to transaction variables
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| key | string | ✓ | ~ 64 chars | Name The variable name to be substituted in the transaction template. Corresponds to a placeholder in the transaction action parameters. | ||
| value | string | ~ 51200 chars | Value The value to substitute for the corresponding variable name in the transaction template. |
EzConsumeAction
Consume Action
EzVerifyAction
Verify Action
EzAcquireAction
Acquire Action
EzVerifyActionResult
Verify Action execution result
EzConsumeActionResult
Consume Action execution result
EzAcquireActionResult
Acquire Action execution result
EzTransactionResult
Transaction execution results
Result of a transaction executed using the server-side automatic transaction execution feature
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| transactionId | string | ✓ | 36 ~ 36 chars | Transaction ID | ||
| verifyResults | List<EzVerifyActionResult> | 0 ~ 10 items | List of verify action execution results | |||
| consumeResults | List<EzConsumeActionResult> | [] | 0 ~ 10 items | List of Consume Action execution results | ||
| acquireResults | List<EzAcquireActionResult> | [] | 0 ~ 100 items | List of Acquire Action execution results |
Methods
buy
Buy an item from the showcase
Purchases a specific item from a showcase. When the player buys an item, the system automatically handles the entire purchase flow: it checks any requirements (e.g., player level), deducts the cost (e.g., 100 gems), and grants the reward (e.g., a rare sword). This all happens in a single transaction, so the player never loses their payment without receiving the item. Use this when the player taps the “Buy” button on a shop item — for example, purchasing a “Starter Pack” for 500 gems that contains 10 stamina potions and 1 gold chest.
Request
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128 chars | Namespace name Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| showcaseName | string | ✓ | ~ 128 chars | Showcase name Showcase-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| gameSession | GameSession | ✓ | GameSession | |||
| displayItemId | string | ✓ | UUID | ~ 128 chars | Displayed Item ID Maintains a unique name for displayed products. If omitted, the system automatically assigns a name in UUID (Universally Unique Identifier) format. | |
| quantity | int | 1 | 1 ~ 1000 | Purchase Quantity | ||
| config | List<EzConfig> | [] | 0 ~ 32 items | Set values to be applied to transaction variables |
Result
| Type | Description | |
|---|---|---|
| item | EzSalesItem | Product |
| transactionId | string | Issued transaction ID |
| stampSheet | string | Stamp sheet used to execute the purchase process |
| stampSheetEncryptionKeyId | string | Cryptographic key GRN used for stamp sheet signature calculations |
| autoRunStampSheet | bool | Whether automatic transaction execution is enabled |
| atomicCommit | bool | Whether to commit the transaction atomically |
| transaction | string | Issued transaction |
| transactionResult | EzTransactionResult | Transaction execution result |
Implementation Example
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
).DisplayItem(
displayItemId: "display-item-0001"
);
var result = await domain.BuyAsync(
quantity: null,
config: null
);
// In New Experience, stamp sheets are automatically executed at the SDK level.
// If an error occurs, a TransactionException is thrown.
// you can retry with TransactionException::Retry(). var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
).DisplayItem(
displayItemId: "display-item-0001"
);
var future = domain.BuyFuture(
quantity: null,
config: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
// In New Experience, stamp sheets are automatically executed at the SDK level.
// If an error occurs, a TransactionException is thrown.
// you can retry with TransactionException::Retry(). const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Showcase(
"showcase-0001" // showcaseName
)->DisplayItem(
"display-item-0001" // displayItemId
);
const auto Future = Domain->Buy(
// quantity
// config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}getShowcase
Get a shop showcase and its items
Retrieves a specific showcase (shop page) and the list of items displayed on it. A showcase is like a shop screen in your game — for example, a “Gem Shop”, “Daily Deals”, or “Special Offers” page. Each showcase contains display items, which are the individual products the player can buy. Each product defines what the player pays (cost) and what they receive (reward). Showcases can be linked to schedule events so they only appear during certain periods — for example, a “Holiday Shop” that only shows up during Christmas. Use this to build your shop UI — for example, displaying a list of items with their prices and “Buy” buttons when the player opens the shop screen.
Request
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128 chars | Namespace name Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| gameSession | GameSession | ✓ | GameSession | |||
| showcaseName | string | ✓ | ~ 128 chars | Showcase name Showcase-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). |
Result
| Type | Description | |
|---|---|---|
| item | EzShowcase | Showcase |
Implementation Example
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
var item = await domain.ModelAsync(); var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Showcase(
"showcase-0001" // showcaseName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}Value change event handling
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
// Start event handling
var callbackId = domain.Subscribe(
value => {
// Called when the value changes
// The "value" is passed the value after the change.
}
);
// Stop event handling
domain.Unsubscribe(callbackId); var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
// Start event handling
var callbackId = domain.Subscribe(
value => {
// Called when the value changes
// The "value" is passed the value after the change.
}
);
// Stop event handling
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Showcase(
"showcase-0001" // showcaseName
);
// Start event handling
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Showcase::Model::FShowcase> value) {
// Called when the value changes
// The "value" is passed the value after the change.
}
);
// Stop event handling
Domain->Unsubscribe(CallbackId);Warning
This event is triggered when the value stored in the SDK’s local cache changes.
The local cache is updated only when executing the SDK’s API, or by executing stamp sheets via GS2-Distributor with GS2-Gateway notification enabled, or by executing a GS2-JobQueue with GS2-Gateway notification enabled.
Therefore, callbacks will not be invoked if the value is changed in any other way.
getRandomShowcaseDisplayItem
Get a specific item from the random showcase
Retrieves the details of a specific item currently displayed on the random showcase. Use this to show the detail view when a player taps on a specific item in the random shop — for example, displaying the item’s full description, price, and a “Buy” button on a detail popup.
Request
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128 chars | Namespace name Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| gameSession | GameSession | ✓ | GameSession | |||
| showcaseName | string | ✓ | ~ 128 chars | Random Showcase name Random Showcase-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| displayItemName | string | ✓ | UUID | ~ 128 chars | Random Displayed Item name Maintains a unique name for randomly displayed products. If omitted, the system automatically assigns a name in UUID (Universally Unique Identifier) format. |
Result
| Type | Description | |
|---|---|---|
| item | EzRandomDisplayItem | Displayed item |
Implementation Example
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var item = await domain.ModelAsync(); var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}Value change event handling
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
// Start event handling
var callbackId = domain.Subscribe(
value => {
// Called when the value changes
// The "value" is passed the value after the change.
}
);
// Stop event handling
domain.Unsubscribe(callbackId); var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
// Start event handling
var callbackId = domain.Subscribe(
value => {
// Called when the value changes
// The "value" is passed the value after the change.
}
);
// Stop event handling
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
);
// Start event handling
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Showcase::Model::FRandomDisplayItem> value) {
// Called when the value changes
// The "value" is passed the value after the change.
}
);
// Stop event handling
Domain->Unsubscribe(CallbackId);Warning
This event is triggered when the value stored in the SDK’s local cache changes.
The local cache is updated only when executing the SDK’s API, or by executing stamp sheets via GS2-Distributor with GS2-Gateway notification enabled, or by executing a GS2-JobQueue with GS2-Gateway notification enabled.
Therefore, callbacks will not be invoked if the value is changed in any other way.
listRandomShowcaseDisplayItems
Get the list of items currently displayed on a random showcase
Retrieves the items currently shown on a random showcase for the player. A random showcase is a shop where the displayed items are randomly selected from a pool — like a “Daily Deals” or “Mystery Shop” that shows different items to each player or refreshes periodically. For example, the shop might have a pool of 50 possible items but only display 5 randomly chosen ones at a time, refreshing every day at midnight. The items shown are specific to each player — different players may see different items at the same time. Use this to build the random shop UI — for example, displaying “Today’s Deals” with 5 randomly selected items and a countdown timer until the next refresh.
Request
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128 chars | Namespace name Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| gameSession | GameSession | ✓ | GameSession | |||
| showcaseName | string | ✓ | ~ 128 chars | Random Showcase name Random Showcase-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). |
Result
| Type | Description | |
|---|---|---|
| items | List<EzRandomDisplayItem> | Displayed items |
Implementation Example
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
var items = await domain.RandomDisplayItemsAsync(
).ToListAsync(); var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
var it = domain.RandomDisplayItems(
);
List<EzRandomDisplayItem> items = new List<EzRandomDisplayItem>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
);
const auto It = Domain->RandomDisplayItems(
);
TArray<Gs2::UE5::Showcase::Model::FEzRandomDisplayItemPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}Value change event handling
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
// Start event handling
var callbackId = domain.SubscribeRandomDisplayItems(
() => {
// Called when an element of the list changes.
}
);
// Stop event handling
domain.UnsubscribeRandomDisplayItems(callbackId); var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
// Start event handling
var callbackId = domain.SubscribeRandomDisplayItems(
() => {
// Called when an element of the list changes.
}
);
// Stop event handling
domain.UnsubscribeRandomDisplayItems(callbackId); const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
);
// Start event handling
const auto CallbackId = Domain->SubscribeRandomDisplayItems(
[]() {
// Called when an element of the list changes.
}
);
// Stop event handling
Domain->UnsubscribeRandomDisplayItems(CallbackId);Warning
This event is triggered when the value stored in the SDK’s local cache changes.
The local cache is updated only when executing the SDK’s API, or by executing stamp sheets via GS2-Distributor with GS2-Gateway notification enabled, or by executing a GS2-JobQueue with GS2-Gateway notification enabled.
Therefore, callbacks will not be invoked if the value is changed in any other way.
randomShowcaseBuy
Buy an item from the random showcase
Purchases a specific item from the random showcase. Just like buying from a regular showcase, the system automatically handles the entire purchase: checking requirements, deducting the cost, and granting the reward — all in one transaction. Once an item is purchased from the random showcase, it may become unavailable (sold out) depending on the showcase configuration, and the player must wait for the next refresh to see new items. Use this when the player taps “Buy” on an item in the random shop — for example, buying a discounted “Legendary Weapon Box” from the daily deals before it refreshes.
Request
| Type | Condition | Required | Default | Value Limits | Description | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128 chars | Namespace name Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| showcaseName | string | ✓ | ~ 128 chars | Random Showcase name Random Showcase-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.). | ||
| gameSession | GameSession | ✓ | GameSession | |||
| displayItemName | string | ✓ | UUID | ~ 128 chars | Random Displayed Item name Maintains a unique name for randomly displayed products. If omitted, the system automatically assigns a name in UUID (Universally Unique Identifier) format. | |
| quantity | int | 1 | 1 ~ 1000 | Purchase Quantity | ||
| config | List<EzConfig> | [] | 0 ~ 32 items | Configuration values applied to transaction variables |
Result
| Type | Description | |
|---|---|---|
| item | EzRandomDisplayItem | Displayed item |
| transactionId | string | Issued transaction ID |
| stampSheet | string | Stamp sheet used to execute the purchase process |
| stampSheetEncryptionKeyId | string | Cryptographic key GRN used for stamp sheet signature calculations |
| autoRunStampSheet | bool | Whether automatic transaction execution is enabled |
| atomicCommit | bool | Whether to commit the transaction atomically |
| transaction | string | Issued transaction |
| transactionResult | EzTransactionResult | Transaction execution result |
Implementation Example
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var result = await domain.RandomShowcaseBuyAsync(
quantity: 1,
config: null
);
// In New Experience, stamp sheets are automatically executed at the SDK level.
// If an error occurs, a TransactionException is thrown.
// you can retry with TransactionException::Retry(). var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var future = domain.RandomShowcaseBuyFuture(
quantity: 1,
config: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
// In New Experience, stamp sheets are automatically executed at the SDK level.
// If an error occurs, a TransactionException is thrown.
// you can retry with TransactionException::Retry(). const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
);
const auto Future = Domain->RandomShowcaseBuy(
1 // quantity
// config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}