Economy v2 が一般提供 (GA) されました。サポートとフィードバックについては、PlayFab フォーラム を参照してください。
- Title Data に、重み付けされたアイテム プールを持つルート テーブルを定義します。
- Azure Function を使用して、ルート テーブルからランダムなアイテムをロールします。
- 単一の呼び出しで、コンテナ トークンをアトミックに減算し、ランダムに選択されたアイテムを付与します。
仕組み
- Title Data にルート テーブルを定義: ドロップ テーブル構成 (アイテム ID、重み、数量) を JSON として Title Data に格納すると、コードを再デプロイせずに更新できます。
- コンテナを仮想通貨として表す: 固定コンテンツを持つコンテナ と同じコンテナ トークン パターンを使用します: 未開封のルート ボックスとして機能する仮想通貨です。
- Azure Function を呼び出してコンテナを開く: 関数はルート テーブルを読み取り、重み付けランダム選択を実行し、
ExecuteInventoryOperationsを呼び出してアトミックに 1 個のコンテナ トークンを減算し、ランダムに選択されたアイテムを追加します。
前提条件
- PlayFab 開発者アカウント。
- Game Manager で作成されたタイトル。
- ルート報酬として付与できる公開済みのカタログ アイテム。
- コンテナを表す仮想通貨 (セットアップ手順については 固定コンテンツを持つコンテナ を参照)。
- PlayFab タイトルに接続された Azure Functions プロジェクト。
ステップ 1: Title Data にルート テーブルを定義する
デザイナーがコードの変更なしにドロップ率を更新できるように、ルート テーブル定義を Title Data に格納します。ルート テーブル構造の例
LootTables という Title Data キーを JSON 値で作成します。
Title Data の設定
Game Manager
- Content > Title Data に移動します。
LootTablesというキーを作成します。- 値として JSON ルート テーブル構成を貼り付けます。
- Save を選択します。
API
SetTitleData を使用します。ステップ 2: Azure Function を作成する
プレイヤーがコンテナを開きたい場合にゲーム クライアントが呼び出す Azure Function を作成します。この関数は次のようになります。- プレイヤーが少なくとも 1 個のコンテナ トークンを持っていることを確認します。
- Title Data からルート テーブルを読み取ります。
- 重み付けランダム選択を実行します。
ExecuteInventoryOperationsを呼び出して、アトミックにトークンを減算し、報酬を付与します。
データ モデル
重み付けランダム選択
完全な Azure Function
GetContainerCurrencyId ヘルパー関数は、ルート テーブル名を対応するコンテナ通貨 ID にマッピングします。このマッピングはルート テーブルと一緒に Title Data に格納するか、命名規則を使用できます。ステップ 3: コンテナ トークンをプレイヤーに付与する
ゲームプレイ、ストア購入、または報酬を通じてプレイヤーにコンテナ トークンを付与します。固定コンテンツを持つコンテナ で説明されているのと同じアプローチを使用します。ステップ 4: ゲーム クライアントから関数を呼び出す
プレイヤーがコンテナを開きたい場合、ExecuteFunction を使用して Azure Function を呼び出します。ルート テーブルの設計パターン
レアリティ層
指数関数的に減少する重みを持つクラシックなレアリティ システム:- Common: 約 90.0%
- Uncommon: 約 9.0%
- Rare: 約 0.9%
- Legendary: 約 0.09%
混合報酬でのマルチロール
混合プールから 3 個のランダム アイテムを与える supply crate:保証付き + ランダム (ピティ システム)
“10 回開くごとに Rare 以上を保証” というパターンには、プレイヤーの開封回数を 表示プロパティ または プレイヤー データ で追跡し、しきい値に達した際に Azure Function 内でランダム選択を上書きします。ネストされたドロップ テーブル
ルート テーブルは ID で別のルート テーブルを参照できます。Azure Function は参照を再帰的に解決します。ItemId が TABLE: で始まるかどうかを確認し、そうであればアイテムを直接付与するのではなく、参照されたテーブルでロールします。
セキュリティに関する考慮事項
- ルート ロジックは常に Azure Function 内でサーバー側で実行してください。 ロールされたアイテムを決定するためにクライアントを信頼しないでください。このアプローチにより、操作を防止します。
ExecuteInventoryOperationsの呼び出しでIdempotencyIdを使用します。 関数が再試行された場合の重複付与を防ぎます。詳細については、べき等な取引と再試行 を参照してください。- 減算する前にプレイヤーのインベントリを確認して、コンテナの所有権を検証してください。
ExecuteInventoryOperationsのSubtract操作は、プレイヤーが十分なトークンを持っていない場合に失敗し、バッチ全体がロールバックされます。 - 監査のためにすべてのロールをログに記録してください。 関数の戻り値と PlayStream イベントにより、各プレイヤーが受け取ったものの証跡が得られます。
