Steam インベントリクエリと操作 API
詳細は、
Steamインベントリサービス を参照してください。
メンバー関数
ISteamInventory
のメンバー関数はグローバルアクセサー関数
SteamInventory()
を通して呼び出されます。
AddPromoItem
bool AddPromoItem( SteamInventoryResult_t *pResultHandle, SteamItemDef_t itemDef );
現在のユーザーに、1 回限りの特定のプロモーションアイテムを付与します。
Itemdefs 内のポリシーによって付与可能なアイテムをロックダウンできるため、クライアントから安全に呼び出すことができます。 この呼び出しを行う主な状況の 1 つは、特定の他のゲームを所有するユーザーにアイテムを付与する場合です。 これは、ゲームが特定のプロモーションアイテムをユーザーに表示するカスタム UI を持っている場合に便利ですが、それ以外で複数のプロモーションアイテムを付与したい場合は、
AddPromoItems または
GrantPromoItems を使用してください。
付与可能なアイテムは itemdef 内に「promo」属性が必要です。 プロモーションアイテムは、付与されるアイテムを所有するのに必要な一連の APPID をリストします。 このバージョンは、設定されたアイテム定義内で promo 属性が指定された全てのアイテムを付与します。 これにより、ゲームクライアントをアップデートすることなく、プロモーションアイテムを追加できます。 次の例では、ユーザーが TF2 または SpaceWar のどちらかを所有している場合にアイテムが付与されます。
promo: owns:440;owns:480
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
true を返し、SteamGameServer から呼び出された場合には常に
false を返します。
成功した場合、インベントリの結果には付与されたアイテムが含まれます。 ユーザーがプロモーションの対象資格を有していないためアイテムが全く付与されていない場合でも、成功と見なされます。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
例:void CInventory::GrantPromoItems()
{
SteamInventory()->AddPromoItem( &s_GenerateRequestResult, 110 );
}
AddPromoItems
bool AddPromoItems( SteamInventoryResult_t *pResultHandle, const SteamItemDef_t *pArrayItemDefs, uint32 unArrayLength );
現在のユーザーに、1 回限りの特定のプロモーションアイテムを付与します。
Itemdefs 内のポリシーによって付与可能なアイテムをロックダウンできるため、クライアントから安全に呼び出すことができます。 この呼び出しを行う主な状況の 1 つは、特定の他のゲームを所有するユーザーにアイテムを付与する場合です。 1 個のプロモーションアイテムを付与したい場合は
AddPromoItem を使用してください。 使用できるすべてのプロモーションアイテムを付与したい場合は
GrantPromoItems を使用してください、
付与可能なアイテムは itemdef 内に「promo」属性が必要です。 プロモーションアイテムは、アイテム付与されるために所有する必要のある一連の APPID をリストします。 このバージョンは、設定されたアイテム定義内で promo 属性が指定された全てのアイテムを付与します。 これにより、ゲームクライアントをアップデートすることなく、プロモーションアイテムを追加できます。 次の例では、ユーザーが TF2 または SpaceWar のどちらかを所有している場合にアイテムが付与されます。
promo: owns:440;owns:480
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
true を返し、SteamGameServer から呼び出された場合には常に
false を返します。
成功した場合、インベントリの結果には付与されたアイテムが含まれます。 ユーザーがプロモーションの対象資格を有していないためアイテムが全く付与されていない場合でも、成功と見なされます。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
例:void CInventory::GrantPromoItems()
{
SteamItemDef_t newItems[2];
newItems[0] = 110;
newItems[1] = 111;
SteamInventory()->AddPromoItems( &s_GenerateRequestResult, newItems, 2 );
}
CheckResultSteamID
bool CheckResultSteamID( SteamInventoryResult_t resultHandle, CSteamID steamIDExpected );
インベントリ結果ハンドルが指定された Steam ID に属しているかどうかを確認します。
これは、リモートユーザーが別のユーザーのインベントリを偽装していないかを確認するために
DeserializeResult を使用する際に重要です。
戻り値: bool
true 結果がターゲットの Steam ID に属する場合; それ以外の場合は
falseConsumeItem
bool ConsumeItem( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemConsume, uint32 unQuantity );
ユーザーのインベントリからアイテムを消費します。 指定されたアイテムの数量がゼロになると、永久に削除されます。
一旦アイテムが削除されると回復できません。 心配性の方には不向きです - ゲームにアイテムの削除機能が全く実装されていない場合、何重もの UI 確認プロセスを強く推奨します。
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
true を返し、SteamGameServer から呼び出された場合には常に
false を返します。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
参照: ExchangeItems,
TransferItemQuantity例:void CInventory::DrinkOnePotion( SteamItemInstanceID_t itemID )
{
SteamInventory()->ConsumeItem( &s_ConsumeRequestResult, itemID, 1 );
}
DeserializeResult
bool DeserializeResult( SteamInventoryResult_t *pOutResultHandle, const void *pBuffer, uint32 unBufferSize, bool bRESERVED_MUST_BE_FALSE = false );
名前 | 型 | 説明 |
pOutResultHandle | SteamInventoryResult_t * | 新しいインベントリ結果ハンドルを返します。 |
pBuffer | const void * | 逆シリアル化するバッファです。 |
unBufferSize | uint32 | pBuffer のサイズです。 |
bRESERVED_MUST_BE_FALSE | bool | これは false である必要があります! |
結果セットを逆シリアル化し、シグネチャバイトを確認します。
この呼び出しには、ハンドルステータスが
k_EResultExpired に設定される潜在的ソフトエラーモードがあります。
GetResultItems はこのモードでも成功します。 「期限切れ」の結果は、 単に時間的な期限切れ (1 時間) だけでなく、結果セットが生成された後に、結果セット内のアイテムのひとつがトレードされたり、消費されたために、データが最新ではないことを示す場合があります。
GetResultTimestamp と
ISteamUtils::GetServerRealTime のタイムスタンプを比較してデータの古さを判断できます。 「期限切れ」の結果コードを無視して通常通りに続行するか、または期限切れのデータを持つプレイヤーに、更新された結果セットを送信するよう要求できます。
完了後、リモートユーザーが別のユーザーのインベントリを偽装していないかを確認するために
CheckResultSteamID を結果ハンドルで呼び出します。
注意:
bRESERVED_MUST_BE_FALSE
パラメーターは将来の使用のために予約されているため、 true に設定しないでください。
戻り値: bool
常に
true を返し、
GetResultStatus を介してエラーコードを渡します。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
DestroyResult
void DestroyResult( SteamInventoryResult_t resultHandle );
結果ハンドルを破棄し、関連するすべてのメモリを解放します。
ExchangeItems
bool ExchangeItems( SteamInventoryResult_t *pResultHandle, const SteamItemDef_t *pArrayGenerate, const uint32 *punArrayGenerateQuantity, uint32 unArrayGenerateLength, const SteamItemInstanceID_t *pArrayDestroy, const uint32 *punArrayDestroyQuantity, uint32 unArrayDestroyLength );
名前 | 型 | 説明 |
pResultHandle | SteamInventoryResult_t * | 新しいインベントリ結果ハンドルを返します。 |
pArrayGenerate | const SteamItemDef_t * | この呼び出しによって作成されるアイテムのリストです。 現時点では 1 つのアイテムのみです! |
punArrayGenerateQuantity | const uint32 * | pArrayGenerate 内の各アイテムの数量です。 現時点では 1 アイテムのみで、1 に設定する必要があります! |
unArrayGenerateLength | uint32 | pArrayGenerate および punArrayGenerateQuantity 内のアイテム数です。 現時点では 1 でなければなりません! |
pArrayDestroy | const SteamItemInstanceID_t * | この呼び出しによって破棄されるアイテムのリストです。 |
punArrayDestroyQuantity | const uint32 * | pArrayDestroy 内で破棄する各アイテムの数量です。 |
unArrayDestroyLength | uint32 | pArrayDestroy および punArrayDestroyQuantity 内のアイテムの数です。 |
他のアイテムのセットと引き換えに 1 個のアイテムを付与します。
これは、アイテムの生成レシピや、変形、または自身を他のアイテムに展開するアイテム (例: 宝箱) を実装するために使用することができます。
この API の呼び出し元は、要求されたアイテムと、交換する既存のアイテムと数量の配列を渡します。 API では現在、生成するアイテムの配列を使用しますが、この時点での配列のサイズは 1 である必要があり、新規アイテムの数量も 1 でなければなりません。
付与可能なアイテムは itemdef 内に 「exchange」 属性が必要です。 exchange 属性は、このアイテムに対して交換が有効なレシピのセットを指定します。 交換レシピはインベントリサービスによって細かく検証され、供給された素材がレシピと一致しない場合や、十分な数量が含まれていない場合、交換は失敗します。
例:
exchange: 101x1,102x1;103x5;104x3,105x3
次のいずれかの場合に交換が許可されます。#101 と#102 を 1個ずつ・#103 を 5 個・#104 と #105 をそれぞれ 3 個ずつ。 詳細は、
Steamインベントリスキーマ のドキュメントを参照してください。
戻り値: bool
この関数は成功すると
true を返し、SteamGameServer から呼び出された場合や、
unArrayGenerateLength
または
punArrayGenerateQuantity
が
1 に設定されていない場合に
false を返します。
レシピと一致しない、また必要な数量が供給されない交換は失敗します。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
参照: ConsumeItem,
TransferItemQuantity例:// 指定された itemdef でユーザーのインベントリ内のアイテムを検索します
SteamItemInstanceID_t CInventory::GetItemIdFromInventory( SteamItemDef_t itemDefId );
void CInventory::Exchange()
{
SteamItemInstanceID_t inputItems[2];
uint32 inputQuantities[2];
inputItems[0] = GetItemIdFromInventory( 103 );
inputQuantities[0] = 3;
inputItems[1] = GetItemIdFromInventory( 104 );
inputQuantities[1] = 3;
SteamItemDef_t outputItems[1];
outputItems[0] = 100;
uint32 outputQuantity[1];
outputQuantity[0] = 1;
SteamInventory()->ExchangeItems( &s_ExchangeRequestResult, outputItems, outputQuantity, 1, inputItems, inputQuantities, 2 );
}
GenerateItems
bool GenerateItems( SteamInventoryResult_t *pResultHandle, const SteamItemDef_t *pArrayItemDefs, const uint32 *punArrayQuantity, uint32 unArrayLength );
名前 | 型 | 説明 |
pResultHandle | SteamInventoryResult_t * | 新しいインベントリ結果ハンドルを返します。 |
pArrayItemDefs | const SteamItemDef_t * | ユーザーに付与するアイテムのリストです。 |
punArrayQuantity | const uint32 * | pArrayItemDefs 内で付与する各アイテムの数量です。 これはオプションです。各アイテムに 1 を指定するには NULL を渡します。 |
unArrayLength | uint32 | pArrayItemDefs 内のアイテム数です。 |
特定のアイテムを現在のユーザーに付与します (開発者のみ使用)。
この API はプロトタイプ専用です。ゲームのパブリッシャーグループに属する Steam アカウントでのみ使用可能です。
SteamItemDef_t で識別されたアイテムの配列や、オプションで、各アイテムに対応する数量の 2 番目の配列を渡すことができます。 これらの配列の長さは一致する必要があります!
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
true を返し、SteamGameServer から呼び出された場合には常に
false を返します。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
例:void CInventory::GrantTestItems()
{
SteamItemDef_t newItems[2];
uint32 quantities[2];
newItems[0] = 110;
newItems[1] = 111;
quantities[0] = 1;
quantities[1] = 1;
SteamInventory()->GenerateItems( &s_GenerateRequestResult, newItems, quantities, 2 );
}
GetAllItems
bool GetAllItems( SteamInventoryResult_t *pResultHandle );
現在のユーザーインベントリ内にある全てのアイテムの取得を開始します。
注意: この関数の呼び出しはレート制限の対象となり、頻繁に呼び出されるとキャッシュされた結果を返すことがあります。 この関数は、ユーザーの全インベントリを表示する場合か、またはインベントリが変更された可能性がある場合にのみ呼び出すことを推奨します。
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
true を返し、SteamGameServer から呼び出された場合には常に
false を返します。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
例:void SpaceWarItem::LoadInventory( IGameEngine *pGameEngine )
{
SteamInventory()->GetAllItems( &s_RequestResult );
}
GetEligiblePromoItemDefinitionIDs
bool GetEligiblePromoItemDefinitionIDs( CSteamID steamID, SteamItemDef_t *pItemDefIDs, uint32 *punItemDefIDsArraySize );
名前 | 型 | 説明 |
steamID | CSteamID | これらのアイテムの対象となるユーザーの Steam ID。 これは、SteamInventoryEligiblePromoItemDefIDs_t.m_steamID と同じです。 |
pItemDefIDs | SteamItemDef_t * | アイテム定義 id をこの配列にコピーして返します。 |
punItemDefIDsArraySize | uint32 * | これは pItemDefIDs の長さで、SteamInventoryEligiblePromoItemDefIDs_t.m_numEligiblePromoItemDefs と同じです。 |
ユーザーに付与できるアイテム定義 id のリストを取得します。
この関数は、アイテム定義 id を取得するために
SteamInventoryEligiblePromoItemDefIDs_t の呼び出し結果を処理している間に呼び出します。
戻り値: bool
参照: AddPromoItem,
AddPromoItemsGetItemDefinitionIDs
bool GetItemDefinitionIDs( SteamItemDef_t *pItemDefIDs, uint32 *punItemDefIDsArraySize );
名前 | 型 | 説明 |
pItemDefIDs | SteamItemDef_t * | アイテム定義をこの配列にコピーして返します。 |
punItemDefIDsArraySize | uint32 * | これは pItemDefIDs の長さに設定されます。 pItemDefIDs が NULL の場合、これは配列で保持する必要がある要素の数を返します。 |
Steamworks Web サイトのアプリ管理パネルで定義したすべてのアイテム定義 ID のセットを返します。
これらのアイテム定義は連続した整数である必要はありません。
これは
SteamInventoryDefinitionUpdate_t コールバックへの応答として呼び出します。 ゲームで数字の定義 IDがハードコードされており (例: 紫色のフェイスマスク = 20、青い武器の mod = 55) 、クライアントへのパッチ無しで新しいアイテムタイプを追加することを許可しない場合、この関数を呼び出す理由はありません。
戻り値: bool
この呼び出しは、成功すると
true を返します。 アイテム定義がサーバーからロードされていないか、現在のアプリケーション用のアイテム定義が存在しない場合、
false を返します。
呼び出しが成功した場合、
punItemDefIDsArraySize
は使用可能なアイテム定義の数を含みます。
GetItemDefinitionProperty
bool GetItemDefinitionProperty( SteamItemDef_t iDefinition, const char *pchPropertyName, char *pchValueBuffer, uint32 *punValueBufferSizeOut );
名前 | 型 | 説明 |
iDefinition | SteamItemDef_t | プロパティを取得するアイテム定義。 |
pchPropertyName | const char * | 値を取得するプロパティ名。 NULL を渡すと pchValueBuffer は使用可能なすべての名前のコンマ区切りのリストを含みます。 |
pchValueBuffer | char * | pchPropertyName に関連付けられた値を返します。 |
punValueBufferSizeOut | uint32 * | これは pchValueBuffer のサイズに設定され、値を保持するのに必要なバイト数を返します。 |
指定されたアイテム定義から文字列プロパティを取得します。
特定のアイテム定義のプロパティ値を取得します。
いくつかのプロパティ (例: 「name」) はローカライズされる可能性があり、現在の Steam 言語設定に依存することに注意してください (
ISteamApps::GetCurrentGameLanguage を参照)。 プロパティ名は常に ASCII 英数字とアンダースコア「_」です。
使用可能なプロパティ名のコンマ区切りのリストを取得するために、
NULL を
pchPropertyName
に渡します。 このモードでは、
punValueBufferSizeOut
は推奨バッファサイズを含みます。 それ以外の場合は、実際に
pchValueBuffer
にコピーされたバイト数です。
戻り値: bool
この呼び出しは、成功すると
true を返します。それ以外の場合は、アイテム定義がサーバーからロードされていないか、現在のアプリケーション用のアイテム定義が存在しないか、アイテム定義内にプロパティ名が見つからないことを示す
false を返します。
関連する値は
pchValueBuffer
を介して返され、値を保持するのに必要なバイト数の合計は
punValueBufferSizeOut
から取得できます。 この関数は 2 回呼び出すことを推奨しています。最初の呼び出しでは
pchValueBuffer
を
NULL に設定し、次の呼び出しでは
punValueBufferSizeOut
にゼロを設定し、バッファに必要なサイズを取得します。
出力例:
pchPropertyName
NULL に設定:
appid,itemdefid、Timestamp
等...
pchPropertyName
"name" に設定:
SW_DECORATION_HAT
注: はじめに
LoadItemDefinitionsを呼び出し、GetItemDefinitionPropertyの呼び出し前にアイテムが使用可能なことを確認します。
GetItemsByID
bool GetItemsByID( SteamInventoryResult_t *pResultHandle, const SteamItemInstanceID_t *pInstanceIDs, uint32 unCountInstanceIDs );
現在のユーザーのインベントリのサブセットのステータスを取得します。
サブセットはアイテムインスタンスIDの配列によって指定されます。
この呼び出しの結果は
SerializeResult を使用してシリアル化でき、ユーザーのインベントリ全体を公開することなく現在のユーザーが特定のアイテムを所有していることを「証明」するために、他のユーザーに渡すことができます。 例えば、ユーザーが現在装備しているアイテムの ID でこの関数を呼び出し、バッファにシリアル化し、その後ゲームに参加する時にこのバッファを他のプレイヤーに送信できます。
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
trueを返し、SteamGameServerから呼び出された場合には常に
falseを返します。
pResultHandle
を介して新しい結果ハンドルを返します。
注: 使用後、指定されたインベントリの結果で
DestroyResultを必ず呼び出してください。
GetItemPrice
bool GetItemPrice( SteamItemDef_t iDefinition, uint64 *pPrice );
RequestPricesの呼び出しが成功した後、このメソッドを呼び出して特定のアイテム定義の価格を取得できます。
戻り値: bool
true 成功した場合、指定のアイテム定義IDの価格に
pPrice
が正しく代入されたことを示します。
false はパラメータが無効、または指定されたアイテム定義IDの価格がない場合です。
こちらも参照してください: RequestPricesGetItemsWithPrices
bool GetItemsWithPrices( SteamItemDef_t *pArrayItemDefs, uint64 *pPrices, uint32 unArrayLength );
RequestPricesの呼び出しに成功した後、適用可能なアイテム定義のすべての価格を取得するために、このメソッドを呼び出します。 渡す配列のサイズとして
GetNumItemsWithPricesの結果を使用します。
戻り値: bool
true 成功した場合、
pArrayItemDefs
と
pPrices
にアイテム定義idおよび販売するアイテムの価格が正しく代入されたことを示します。
false パラメーターが無効な場合
こちらも参照してください: RequestPrices,
GetItemPriceGetNumItemsWithPrices
uint32 GetNumItemsWithPrices();
RequestPricesの呼び出しが成功した後、有効な価格と共にアイテム定義の数を返します。
戻り値: uint32こちらも参照してください: RequestPrices,
GetItemsWithPricesGetResultItemProperty
bool GetResultItemProperty( SteamInventoryResult_t resultHandle, uint32 unItemIndex, const char *pchPropertyName, char *pchValueBuffer, uint32 *punValueBufferSizeOut );
名前 | 型 | 説明 |
resultHandle | SteamInventoryResult_t | プロパティを取得するアイテムを含む結果ハンドル。 |
unItemIndex | uint32 | |
pchPropertyName | const char * | 値を取得するプロパティ名。 NULL を渡すと pchValueBuffer は使用可能なすべての名前のコンマ区切りのリストを含みます。 |
pchValueBuffer | char * | pchPropertyName に関連付けられた値を返します。 |
punValueBufferSizeOut | uint32 * | これは pchValueBuffer のサイズに設定され、値を保持するのに必要なバイト数を返します。 |
インベントリ結果セット内のアイテムから動的プロパティを取得します。
プロパティ名は常にASCII文字、数字および/またはアンダースコア「_」で構成されます。
結果が指定されたバッファに収まらない場合は、部分的な結果がコピーされることがあります。
戻り値: bool
成功すると
trueを返します。それ以外の場合は、インベントリ結果ハンドルが無効であるか、指定されたインデックスにアイテムが含まれていないことを示す
falseが返されます。
GetResultItems
bool GetResultItems( SteamInventoryResult_t resultHandle, SteamItemDetails_t *pOutItemsArray, uint32 *punOutItemsArraySize );
名前 | 型 | 説明 |
resultHandle | SteamInventoryResult_t | アイテムを取得するインベントリ結果ハンドル。 |
pOutItemsArray | SteamItemDetails_t * | 詳細はこの配列にコピーすることによって返されます。 |
punOutItemsArraySize | uint32 * | これは pOutItemsArray の長さに設定されます。 pOutItemsArray が NULL の場合、配列で保持する必要がある要素の数を返します。 |
インベントリ結果ハンドルに関連付けられたアイテムを取得します。
戻り値: bool
true 呼び出しが成功の場合。それ以外は、
false。
潜在的な失敗の理由には以下が含まれます:
-
resultHandle
が無効、またはインベントリ結果ハンドルの準備ができていません。
-
pOutItemsArray
は配列を保持するのに十分な大きさではありまえせん。
- ユーザーはアイテムを所有していません。
呼び出しが成功した場合、
punItemDefIDsArraySize
は使用可能なアイテム定義の数を含みます。
例:bool bGotResult = false;
std::vector<SteamItemDetails_t> vecDetails;
uint32 count = 0;
if ( SteamInventory()->GetResultItems( callback->m_handle, NULL, &count ) )
{
vecDetails.resize( count );
bGotResult = SteamInventory()->GetResultItems( callback->m_handle, vecDetails.data(), &count );
}
GetResultStatus
EResult GetResultStatus( SteamInventoryResult_t resultHandle );
非同期インベントリ結果ハンドルのステータスを確認します。
これは、
SteamInventoryResultReady_tに対してコールバック関数を登録するのと同等のポーリングです。
戻り値: EResult呼び出しが成功したかどうか。
可能な値:
例:void SpaceWarItem::CheckInventory( IGameEngine *pGameEngine )
{
if ( s_RequestResult != 0 )
{
EResult result = SteamInventory()->GetResultStatus( s_RequestResult );
if ( result == k_EResultOK )
{
// Do something here
}
}
}
GetResultTimestamp
uint32 GetResultTimestamp( SteamInventoryResult_t resultHandle );
結果が生成されたサーバー時刻を取得します。
戻り値: uint32タイムスタンプはUnixエポック時間 (1970 年 1月 1日以降の時間)で提供されます
この値と
ISteamUtils::GetServerRealTimeを比較して結果の経過時間 (古さ) を確定できます。
GrantPromoItems
bool GrantPromoItems( SteamInventoryResult_t *pResultHandle );
現在のユーザーに、潜在的な1回限りのプロモーションアイテムをすべて付与します。
Itemdefs内のポリシーによって付与可能なアイテムをロックダウンできるため、クライアントから安全に呼び出すことができます。 この呼び出しを行う主な状況の 1 つは、特定の他のゲームを所有するユーザーにアイテムを付与する場合です。 すべてのアイテムではなく、特定のプロモーションアイテムを付与したい場合はこちらを参照してください:
AddPromoItemおよび
AddPromoItems付与可能なアイテムはitemdef内に「promo」属性が必要です。 プロモーションアイテムは、付与されるアイテムを所有するのに必要な一連のAPPIDをリストします。 このバージョンは、設定されたアイテム定義内でpromo属性が指定された全てのアイテムを付与します。 これにより、ゲームクライアントをアップデートすることなく、プロモーションアイテムを追加できます。 次の例では、ユーザーがTF2またはSpaceWarのどちらかを所有している場合にアイテムが付与されます。
promo: owns:440;owns:480
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
trueを返し、SteamGameServerから呼び出された場合には常に
falseを返します。
成功した場合、インベントリの結果には付与されたアイテムが含まれます。 ユーザーがプロモーションの対象資格を有していないためアイテムが全く付与されていない場合でも、成功と見なされます。
pResultHandle
を介して新しい結果ハンドルを返します。
注: 使用後、指定されたインベントリの結果で
DestroyResultを必ず呼び出してください。
例:void CInventory::GrantPromoItems()
{
SteamInventory()->GrantPromoItems( &s_GenerateRequestResult );
}
LoadItemDefinitions
bool LoadItemDefinitions();
非同期ロードをトリガーし、アイテム定義を更新します。
アイテム定義は一連の文字列プロパティへの「定義ID」(1 ~ 999999999 の範囲内の整数) のマッピングです。 これらのプロパティのいくつかは、Steamコミュニティwebサイトでアイテムを表示するために必用です。 その他のプロパティはアプリケーションによって定義できます。 ゲームで数字の定義IDがハードコードされており (例: 紫色のフェイスマスク = 20、青い武器のmod = 55) 、クライアントへのパッチ無しで新しいアイテムタイプを追加することを許可しない場合、この関数を呼び出す理由はありません。
戻り値: bool
SteamInventoryDefinitionUpdate_tコールバックをトリガーします。
この呼び出しは常に
trueを返します。
RequestEligiblePromoItemDefinitionsIDs
SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs( CSteamID steamID );
名前 | 型 | 説明 |
steamID | CSteamID | 対象となるプロモーションアイテムをリクエストするユーザーの Steam ID |
指定のユーザーに手動で付与「可能」なプロモーションアイテムのリストを要求します。
これらの「手動」タイプのプロモーションアイテムは自動的には付与されません。 この使用例は、毎週使用可能になるアイテムです。
この関数の呼び出し後、実際のアイテム定義idを取得するために
GetEligiblePromoItemDefinitionIDsを呼び出す必要があります。
戻り値: SteamAPICall_tは
SteamInventoryEligiblePromoItemDefIDs_t呼び出し結果で使用されます。
steamID
が有効な個人アカウントではない場合に、
k_uAPICallInvalidを返します。
RequestPrices
SteamAPICall_t RequestPrices();
ユーザーの使用通貨で購入できるすべてのアイテム定義の価格をリクエストします。
SteamInventoryRequestPricesResult_tの呼び出し結果は、ユーザーの現地支払通貨コードで返されます。 その後、既知のすべてのアイテム定義に対する価格を取得するために
GetNumItemsWithPricesおよび
GetItemsWithPricesを呼び出すか、特定のアイテム定義に対して
GetItemPriceを呼び出すことができます。
戻り値: SteamAPICall_tは
SteamInventoryRequestPricesResult_tの呼び出し結果で使用されます。
内部エラーの場合は
k_uAPICallInvalidを返します。
こちらも参照してください: GetNumItemsWithPrices,
GetItemsWithPrices,
GetItemPriceSendItemDropHeartbeat
void SendItemDropHeartbeat();
使用されていません。
SerializeResult
bool SerializeResult( SteamInventoryResult_t resultHandle, void *pOutBuffer, uint32 *punOutBufferSize );
名前 | 型 | 説明 |
resultHandle | SteamInventoryResult_t | シリアル化するインベントリ結果ハンドル。 |
pOutBuffer | void * | シリアル化された結果がコピーされるバッファ。 |
punOutBufferSize | uint32 * | pOutBuffer のサイズに設定されます。 pOutBuffer が NULL の場合、バッファを保持するのに必要なサイズを返します。 |
シリアル化された結果セットは、偽造できない、または他のゲームセッションでは使用できない短いシグネチャを含みます。
結果セットは、ローカルクライアント上でのシリアル化、ゲームネットワーキングを介して他のプレイヤーに送信、およびリモートプレイヤーによって逆シリアル化できます。 これはハッカーが希少または高価なアイテムの所有を偽装するのを防止する安全な方法です。 シグネチャバイト付き結果セットを出力バッファにシリアル化します。 シリアル化された結果のサイズは、シリアル化されるアイテム数によって異なります。 他のプレイヤーにアイテムを安全に送信する場合は、まず
GetItemsByIDを使用して、最小限の結果セットを作成することをお勧めします。
結果には、 1時間後に「期限切れ」と判断する組み込みタイムスタンプが含まれます。 有効期限の処理に関する詳細は
DeserializeResultを参照してください。
これが
pOutBuffer
を
NULLに設定すると、
punOutBufferSize
は必要なバッファサイズに設定されます。 それによってバッファを作成し、この呼び出しを再度実行して、バッファをデータで埋めることができます。
戻り値: bool
true 成功すると
punOutBufferSize
がバッファのサイズで正常に埋められた事を示し、
pOutBuffer
が十分なサイズのバッファを指している場合は、そちらも同様に埋められます。
false は次の場合:
- 関数は通常のユーザーによって呼び出されませんでした。 この呼び出しは GameServers ではサポートされていません。
-
resultHandle
が無効、またはインベントリ結果ハンドルの準備ができていません。
-
punOutBufferSize
に渡された値が期待値よりも小さく、pOutBuffer
が NULL ではありませんでした。
StartPurchase
SteamAPICall_t StartPurchase( const SteamItemDef_t *pArrayItemDefs, const uint32 *punArrayQuantity, uint32 unArrayLength );
名前 | 型 | 説明 |
pArrayItemDefs | SteamItemDef_t * | ユーザーが購入を希望するアイテム定義 id の配列。 |
punArrayQuantity | uint32 * | ユーザーが購入を希望する各アイテム定義の数量の配列。 |
unArrayLength | uint32 | これは pArrayItemDefs と punArrayQuantity 配列の長さです。 |
ユーザーが購入を希望するアイテム定義の「ショッピングカート」によって、ユーザーの購入プロセスを開始します。 ユーザーは、Steamオーバーレイ内で使用通貨での購入を完了し、必要に応じてSteamウォレットにチャージするよう指示されます。
購入プロセスが正常に開始された場合、
m_ulOrderID
および
m_ulTransID
は
SteamInventoryStartPurchaseResult_t呼び出し結果で有効です。
ユーザーが取引を承認し購入を完了すると、コールバック
SteamInventoryResultReady_tがトリガーされ、その後ユーザーが購入した新しいアイテムを取得できます。
注意:使用後に、インベントリ結果で
DestroyResultを必ず呼び出してください。
戻り値: SteamAPICall_tは
SteamInventoryStartPurchaseResult_tの呼び出し結果で使用されます。
入力が無効な場合は
k_uAPICallInvalidを返します。
開発時のテスト: アプリのリリース前に StartPurchase をテストする場合、開発 / パブリッシングチームのメンバーによって行われたすべての取引は、Sandbox マイクロトランザクション API を介して内部で処理されます。 Steamworks パブリッシャーの一員である場合は、アプリのリリース前に行った購入に対して請求されないことを意味します。
TransferItemQuantity
bool TransferItemQuantity( SteamInventoryResult_t *pResultHandle, SteamItemInstanceID_t itemIdSource, uint32 unQuantity, SteamItemInstanceID_t itemIdDest );
ユーザーインベントリのスタック間でアイテムを転送します。
これは、アイテムのスタック、分割、および転送に使用できます。 ソースと送信先アイテムは同じitemdef idを持つ必要があります。 アイテムを送信先のスタックに転送するには、ソース、転送する数量および転送先のアイテム id を指定してください。 既存のスタックを分割するには、
k_SteamItemInstanceIDInvalidを
itemIdDest
に渡します。 要求された数量の新しいアイテムスタックが生成されます。
注: トレードの可否/マーケットでの制限は転送されるアイテムと共にコピーされます。 転送先のスタックは、スタック内のすべてのアイテムの最新のトレード可能日、マーケットでの取引可能日を受け取ります。
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
trueを返し、SteamGameServerから呼び出された場合には常に
falseを返します。
pResultHandle
を介して新しい結果ハンドルを返します。
注: 使用後、指定されたインベントリの結果で
DestroyResultを必ず呼び出してください。
こちらも参照してください: ConsumeItem,
ExchangeItems例:void CInventory::CombineItems()
{
SteamInventoryResult_t transferResult;
// 既存のスタックから2個のアイテムを分割します
SteamItemInstanceID_t bigStack = GetItemIdFromInventory( ... );
SteamInventory()->TransferItemQuantity( &transferResult, bigStack, 1, k_SteamItemInstanceIDInvalid );
// スタックAからスタックBに2つ転送しますB
SteamItemInstanceID_t originStack = GetItemIdFromInventory( ... );
SteamItemInstanceID_t destStack = GetItemIdFromInventory( ... );
SteamInventory()->TransferItemQuantity( &transferResult, originStack, 2, destStack );
}
TriggerItemDrop
bool TriggerItemDrop( SteamInventoryResult_t *pResultHandle, SteamItemDef_t dropListDefinition );
ユーザーが十分な時間をプレイした場合、アイテムドロップを発生させます。
この期間は 2 箇所でカスタマイズできます:
- インベントリサービス内のアプリケーションレベル: プレイ時間によるアイテム付与。 これはオーバーライドが指定されていないすべての 「playtimegenerator」アイテムに自動的に適用されます。
- 個々の 「playtimegenerator」アイテム定義内での設定。 この設定は、アプリケーションレベルの設定よりも優先されます。
「playtime item generators」とマークされたアイテム定義のみ生成できます。
通常、この関数は、ゲームやレベル、またはマッチの終了時や、アイテムドロップが発生する可能性がある等のゲーム内の重要なポイントで呼び出します。 playtime generator設定の単位は分であり、それよりも頻繁に呼び出すことは有用ではなく、Steamクライアントではレート制限が適用されます。 Steamサーバーは、頻繁なドロップを防止するために、プレイ時間の計算を行います。 また、サーバーは、プレイヤーのインベントリへのアイテムの追加も管理します。
戻り値: bool
この関数では通常のユーザーによって呼び出された場合には常に
trueを返し、SteamGameServerから呼び出された場合には常に
falseを返します。
pResultHandle
を介して新しい結果ハンドルを返します。
注意: 使用後、指定されたインベントリの結果で
DestroyResultを必ず呼び出してください。
この関数によって返されるインベントリの結果は、プレイヤーに資格がある場合に付与される新しいアイテムです。 ユーザーに資格がない場合は、空の結果 ('[]') を返します。
例:void CInventory::FinishGame()
{
SteamInventory()->TriggerItemDrop( &s_PlaytimeRequestResult, 10 );
}
StartUpdateProperties
SteamInventoryUpdateHandle_t StartUpdateProperties();
現在のユーザーのアイテムの
動的プロパティを更新するためにトランザクション要求を開始します。 この呼び出しはユーザーごとにレート制限が適用されるため、プロパティの変更は可能な限り (例: マップやゲームセッションの最後に) 一括して行うべきです。 変更したいすべてのアイテムに対して
SetPropertyまたは
RemovePropertyを呼び出した後、Steamサーバーにリクエストを送信するために
SubmitUpdatePropertiesを呼び出す必要があります。 処理の結果で
SteamInventoryResultReady_tコールバックが実行されます。
例:void CInventory::FinishLevel()
{
SteamInventoryUpdateHandle_t updateHandle = SteamInventory()->StartUpdateProperties();
for ( SteamItemInstanceID_t itemid : m_vecItemIDs )
{
SteamInventory()->SetProperty( updateHandle, itemid, "string_value", "blah" );
SteamInventory()->SetProperty( updateHandle, itemid, "bool_value", true );
SteamInventory()->SetProperty( updateHandle, itemid, "int64_value", (int64)55 );
SteamInventory()->SetProperty( updateHandle, itemid, "float_value", 123.456f );
}
SteamInventoryResult_t resultHandle;
SteamInventory()->SubmitUpdateProperties( updateHandle, &resultHandle );
}
注: 使用後、
DestroyResult を
SubmitUpdateProperties で指定したインベントリ結果で必ず呼び出してください。
戻り値: SteamInventoryUpdateHandle_tこちらも参照してください: SetProperty,
RemoveProperty,
SubmitUpdatePropertiesSubmitUpdateProperties
bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle );
現在のユーザーのアイテムの
動的プロパティを変更するトランザクション要求を送信します。
StartUpdateProperties を参照。
注意: 使用後、指定されたインベントリの結果で
DestroyResult を必ず呼び出してください。
戻り値: bool
こちらも参照してください: StartUpdateProperties,
SetProperty,
RemovePropertyRemoveProperty
bool RemoveProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName );
指定されたアイテムの
動的プロパティを削除します。
戻り値: bool
こちらも参照してください: StartUpdateProperties,
SetProperty,
SubmitUpdatePropertiesSetProperty
bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, const char *pchPropertyValue );
bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, bool bValue );
bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, int64 nValue );
bool SetProperty( SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char *pchPropertyName, float flValue );
動的プロパティを指定されたアイテムに設定します。 サポートされている値の型は、文字列、ブール値、64 ビット整数、および 32 ビット浮動小数点数です。
戻り値: bool
こちらも参照してください: StartUpdateProperties,
RemoveProperty,
SubmitUpdatePropertiesコールバック
以下は
SteamAPI_RunCallbacksを呼び出すことによって実行されるコールバックです。 これらの多くは
ISteamInventory
のメンバー関数への応答として直接実行されます。
SteamInventoryDefinitionUpdate_t
このコールバックは
LoadItemDefinitions への応答や、新しいアイテム定義が使用可能になった場合 (例: プレイヤーがまだゲーム中に、新しいアイテムの型を動的に追加) など、アイテム定義が更新された際にトリガーされます。
このコールバックにはフィールドはありません。
関連する関数: LoadItemDefinitionsSteamInventoryEligiblePromoItemDefIDs_t
指定のユーザーに手動で付与「可能」なプロモーションアイテムのリストを要求した際に返されます。 これらの「手動」タイプのプロモーションアイテムは自動的には付与されません。 これの使用例は、毎週使用可能になるアイテムです。
関連する関数: RequestEligiblePromoItemDefinitionsIDsSteamInventoryFullUpdate_t
GetAllItemsが前回の既知の結果よりも新しい、または更新された結果を正常に返すとトリガーされます。 (インベントリが変更されていない場合や、2つの重複する呼び出し結果が実行中に取り消され、以前の結果が古い、または期限切れであることが既に判明している場合にはトリガーされません)。
通常の
SteamInventoryResultReady_tコールバックは、その後もすぐに引き続きトリガーされます。これは便宜的な追加の通知です。
SteamInventoryResultReady_t
これは、インベントリの結果が
k_EResultPendingからその他の完了状態に移行する際に常に実行されます。状態の完全なリストは
GetResultStatusを参照してください。 ハンドルごとに常に1個のコールバックがあります。
SteamInventoryStartPurchaseResult_t
StartPurchaseを呼び出した後に返されます。
SteamInventoryRequestPricesResult_t
RequestPricesを呼び出した後に返されます。
構造体
これはISteamInventory内の関数が返す、またはやりとりする構造体です。
SteamItemDetails_t
列挙型
これらはISteamInventoryで使用するために定義された列挙型です。
ESteamItemFlags
これらは
SteamItemDetails_tに設定されたビットフラグです。
名前 | 値 | 説明 |
k_ESteamItemNoTrade | 1 << 0 | このアイテムはアカウントロックされており、交換や引き渡しはできません。 特定のアイテムインスタンスに永続的に付属するアイテムステータスフラグです。 |
k_ESteamItemRemoved | 1 << 8 | アイテムは破棄されたか、トレード済み、期限切れです。それ以外の場合は無効化されています。 これは結果セットの一部として 1 度だけ設定されるアクション確認フラグです。 |
k_ESteamItemConsumed | 1 << 9 | アイテムの数量は ConsumeItem API を通して 1 つ減少しています。 これは結果セットの一部として 1 度だけ設定されるアクション確認フラグです。 |
Typedef
これらはISteamInventoryで使用するために定義されたtypedefです。
名前 | ベース型 | 説明 |
SteamInventoryResult_t | int32 | 非同期インベントリ結果へのハンドル。 |
SteamItemDef_t | int32 | ゲーム内のアイテムの種類は 32 ビットの「アイテム定義番号」によって識別されます。 有効な定義番号の範囲は 1 ~ 999999999 です。0以下の数値は無効で、10 億( 1x10 ^ 9) 以上の数値は、Steam 内部で使用するために予約されています。 |
SteamItemInstanceID_t | uint64 | アイテムの各インスタンスは、グローバルに一意のインスタンス ID を持ちます。 この ID はプレイヤーと特定のアイテムインスタンスの組み合わせに固有で、別のプレイヤーに転送されたり、別のアイテムに再利用されたりすることはありません。 |
SteamInventoryUpdateHandle_t | uint64 | 現在のユーザーに対してアイテムの動的プロパティを変更するトランザクション要求を開始する StartUpdateProperties 呼び出しから返されます。 |
定数
これらはISteamInventoryで使用するために定義された定数です。
名前 | 型 | 値 | 説明 |
k_SteamInventoryResultInvalid | SteamInventoryResult_t | -1 | 無効な Steam インベントリ結果ハンドルです。 |
k_SteamItemInstanceIDInvalid | SteamItemInstanceID_t | (SteamItemInstanceID_t)~0 | 無効なアイテムインスタンス id です。 これは通常、操作が失敗したときに返されます。 この値で新しいアイテムインスタンスをすべて初期化することを推奨します。 |
STEAMINVENTORY_INTERFACE_VERSION | const char * | "STEAMINVENTORY_INTERFACE_V002" | |