GS2-Showcase
This function is used to sell products in the game.
The difference from GS2-Exchange is that there is a Showcase. DisplayItem can be displayed on the Showcase, and the price required to purchase DisplayItem and the reward for purchasing the item can be set.
There are two types of display shelves: the “Standard Showcase”, which displays a fixed number of DisplayItems, and the “Random Showcase”, which randomly selects DisplayItem items at regular intervals.
Standard Showcase
In the standard Showcase, all the DisplayItems you specify are displayed. There are two types of DisplayItem: “SalesItem” and “SalesItemGroup”.
SalesItem
A SalesItem is a display item that contains the price required to purchase the item as well as the reward for making the purchase.
SalesItemGroup
SalesItemGroup is a system that changes the SalesItem to be sold according to the number of purchases.
A SalesItemGroup can have multiple SalesItems belonging to it, except for the last item on the list, for which a GS2-Limit counter increase must be set as the compensation. When a SalesItemGroup is displayed on a Showcase, the internal SalesItem is determined if it is available for purchase, and the first item determined to be available is displayed.
By using this function, it is possible to sell products at half price for the first purchase only, or to realize products that increase in price with each purchase, or to add an extra item for the 10th purchase. This feature can be used to realize products such as
Random Showcase
The Random Showcase displays a randomly selected number of DisplayItems specified in the master data. Registering master data allows you to configure data and behaviors available to microservices.
The following types of master data exist:
ShowcaseModel: Defines standard display shelvesRandomShowcaseModel: Defines random display shelves
Master data can be registered via the Management Console. Alternatively, you can set up workflows to reflect data from GitHub or register via CI using GS2-Deploy.
Buff-Based Adjustments
Integrating with GS2-Buff enables dynamic adjustment of acquireActions, verifyActions, and consumeActions for DisplayItem and RandomDisplayItemModel. For random display items, stock values can also be overwritten. This allows flexible modification of rewards, required costs, and inventory quantities to align with events or campaigns.
Example of implementation
Standard Showcase
Get the Showcase
var item = await gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
).ModelAsync(); const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Showcase(
"showcase-0001" // showcaseName
);
const auto item = Domain.Model();item
var result = await gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
).BuyAsync(
displayItemId: "display-item-0001",
quantity: 1,
); const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Showcase(
"showcase-0001" // showcaseName
);
const auto Future = Domain->Buy(
"display-item-0001", // displayItemId
nullptr, // quantity
nullptr // config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError()) return false;Random Showcase
Get Showcase
var items = await gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItemsAsync(
).ToListAsync(); const auto It = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItems(
);
TArray<Gs2::UE5::Showcase::Model::FEzRandomDisplayItemPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}Buy Item
var result = await gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
).RandomShowcaseBuyAsync(
quantity: 1,
config: null
); const auto Future = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
)->RandomShowcaseBuy(
1, // quantity
nullptr // config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}