Steamworks ドキュメンテーション
SteamエコノミーコンテキストID
Steamエコノミーの各アセットは、App ID、コンテキストID、アセットIDという3つの数値の組み合わせで、個別に識別されます。 各ゲームによって、そのアセットの64ビットコンテキストIDが持つ意味を決定します。 ゲームのスタイルによって、以下の形式のうちのひとつになります。 いずれにせよ、SteamにとってはコンテキストIDの値が実際に何であろうと構いません。 唯一の要件は、同一の論理コンテキスト(サーバー、キャラクター、コンテナ等)を同一に保つことです。そうすることで、監査記録は持続的に正確であり、アセットのGetAssetDetailsを継続して処理可能となります。

各コンテキストIDの最初の2ビットは、Steamでの使用のため予約済みです。 アセットサーバーから返されるコンテキストIDの最初の2ビットはゼロでなければなりません。

アセットサーバーにより定義される全コンテキストは、ゼロでないコンテキストIDを持たなければなりません。 また、コンテキストIDを返すAPIはゼロを値として指定してはなりません。

ゲーム全体のインベントリ

ゲームの中には、各ユーザーに用意されるインベントリは一つだけで、ユーザーのアカウントとは異なる「永続的なキャラクター」という概念を持たないものがあります。 そういったゲームに必要なのは、あるアカウントが所有するすべてのアイテムを表す一つのコンテキストのみです。 また、内部データとしてサポートツール内で表示するために、ユーザーには非表示の他のタイプのアセットやコンテキストを含むコンテキストを宣言することもできます。

economy_simple_contexts.png

キャラクター毎のインベントリ

ゲームの中には、各アカウントが複数のキャラクターを持つことができ、そのキャラクターごとに複数のインベントリを持つものがあります。 こういったゲームで使うことのできるコンテキストアイテムスキームは、コンテキストIDを32ビットのキャラクターID(2ビットは予約済み)と、そのキャラクター内で32ビットのコンテナIDに分割する方法です。 あなたのゲームで、内部的にグローバルで固有な32ビットキャラクターIDがある場合、ゲームはそれらを直接コンテキストIDに使用できます。

economy_simple_contexts.png

シャード上のキャラクター

ゲームの中には、キャラクターを特定のサーバーに関連付け、そのキャラクターごとに複数のインベントリを持つものがあります。 こういった形は、MMOによく見られます。 このような場合にコンテキストIDを分割する方法の一つとして、サーバーIDに上位の16ビット(2ビット予約済み)、キャラクターIDに32ビット、そしてコンテナIDには16ビットを使用する方法があります。 (簡潔に説明するために図からは0は省いてあります)

economy_shard_contexts.png