はじめに
GS2-Showcase はゲーム内ストアを実装するために活用可能なマイクロサービスです。
機能追加の背景
ゲーム内ストアで陳列される商品が一定時間ごとにランダムに入れ替わる仕様を最近見る機会が増えました。
しかし、GS2 にはそれを実現する手段がない状態が続いていました。
この課題を解決するために追加された機能が 《ランダム陳列棚》 です。
追加された機能の詳細
マスターデータに陳列される可能性のある商品を登録します。
商品の持つパラメーターは従来の SalesItem と似ており、商品を購入するために必要な《対価》と、商品を購入することで得られる《報酬》を設定します。
ランダム陳列棚の商品はこれらのパラメーターに加えて《抽選重み》と《購入可能回数》を設定します。
抽選重み
抽選で商品が選択される確率を設定します。
確率の設定は GS2-Lottery や GS2-Quest と同様に重みベースで設定します。
名前 | 抽選重み |
商品 A | 1 |
商品 B | 1 |
商品 C | 2 |
このように重みを設定すると
名前 | 排出確率 |
商品 A | 25% |
商品 B | 25% |
商品 C | 50% |
として判定されます。
もし、ランダム抽選棚が3つの商品のうち最大2つの商品を陳列する設定になっている場合、1個目の DisplayItem の抽選は上記の確率に基づきますが
2個目の DisplayItem の抽選は、すでに抽選された DisplayItem が取り除かれたリストから抽選されます。
たとえば、1個目の抽選で 《商品 C》が選択された場合、2個目の DisplayItem の抽選は以下の確率に基づきます。
名前 | 抽選重み | 排出確率 |
商品 A | 1 | 50% |
商品 B | 1 | 50% |
抽選結果はプレイヤーごとに異なる内容が採用されます。
購入可能回数
抽選された商品を、次の商品入れ替えまでの間に何回購入することができるかを設定します。
購入APIには購入数量を指定することができますが、残り購入可能回数を上回る値を指定した場合は、1回も購入処理が行われずエラーとなります。
さらに必要なパラメーター
マスターデータには《マスターデータに陳列される可能性のある商品》の他に幾つかのパラメーターが必要です。
- 抽選される商品の数(最大100)
- 抽選内容のリセット間隔(1時間〜7日)
- 陳列棚の商品を購入可能とする GS2-Showcase のイベント(任意)
強制再抽選
各種マイクロサービスの AcquireActions に設定可能なトランザクションの報酬アクションに《ランダム陳列棚の再抽選》が追加されています。
GS2-Showcase や GS2-Exchange で《再抽選を販売》するといったマネタイズを実現することが可能です。
Unity からの使用例
抽選された商品一覧を取得
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" ).RandomDisplayItem( displayItemName: "display-item-0001" ); var result = await domain.RandomShowcaseBuyAsync( quantity: 1, config: null );