Documentation Steamworks
Propriétés dynamiques des items de l'inventaire Steam
Le service d'inventaire Steam offre maintenant la possibilité de stocker des propriétés de chaines de caractères, d'entiers, de booléens ou de flottants arbitraires pour toute instance d'item.

Ces propriétés sont similaires aux tags par item. Cependant, contrairement aux tags par items qui sont considérés comme immuables, ces propriétés sont dynamiques car elles peuvent être modifiées soit au moyen d'un appel sécurisé de l'API Web soit via l'API de Steamworks.

Par ailleurs, contrairement aux tags d'items, les propriétés dynamiques d'item sont supprimées quand un item est échangé. Les propriétés dynamiques d'items ne sont pour l'instant pas visibles quand un item est consulté dans l'inventaire Steam d'un utilisateur ou sur le marché de la communauté.

Récupération des propriétés d'item


Les propriétés dynamiques d'item sont automatiquement envoyées ainsi que d'autres attributs de l'item au client Steam et peuvent être récupérées en appelant ISteamInventory::GetResultItemProperty avec le nom de propriété dynamic_props. Le tampon fourni sera rempli avec la chaine de caractères représentant le JSON pour toutes les propriétés dynamiques de l'item. C'est à votre application d'analyser cette chaine de façon adéquate.

Pour tous les appels de l'API Web qui renvoient des items au format JSON, la clé dynamic_props pointera vers l'objet JSON complet contenant les propriétés de l'élément dynamique.

Modification des propriétés d'item


Depuis l'un de vos serveurs sécurisés, vous pouvez modifier les items à l'aide de l'API Web IInventoryService/ModifyItems et de votre clé d'éditeur sécurisée.

Vous pouvez également modifier les propriétés des items depuis le client Steam via l'API Steamworks et des appels à ISteamInventory::StartUpdateProperties, ISteamInventory::RemoveProperty, ISteamInventory::SetProperty et ISteamInventory::SubmitUpdateProperties. Vous devrez toutefois définir au préalable la liste blanche des propriétés qui peuvent être configurées depuis le client sur la page de configuration du service d'inventaire Steam du site des partenaires. Nous vous recommandons de ne mettre en liste blanche que les propriétés pour lesquelles vous acceptez une configuration avec un client non fiable (c'est-à-dire que l'utilisateur peut imiter des messages pour définir la valeur à sa volonté).

Actuellement, vous pouvez modifier jusqu'à 100 items pour un utilisateur à chaque appel. Ces appels sont limités en nombre pour chaque utilisateur. Nous vous conseillons donc de grouper vos modifications et de les envoyer à un moment opportun pour votre jeu. Par ailleurs, il existe une limite de 1024 octets de JSON par item pour le moment.

Application de restrictions

Comme dit précédemment, vous pouvez mettre en liste blanche certaines propriétés pour qu'elles puissent être configurées depuis le client. Mais vous pouvez restreindre davantage cette liste en imposant sur l'item cible une condition de type paire tag_category:tag_value spécifique ou une valeur quelconque de tag_category. En combinant ces restrictions sur les tags avec l'API cliente, vous pouvez autoriser les clients à définir les propriétés seulement pour les items pour lesquels cela a du sens (par exemple, compter le nombre de victimes n'a pas de sens pour un chapeau, mais pour un lance-roquettes, oui). Ces tags imposés peuvent exister soit dans l'item soit dans la définition d'item associée.

Exemples


Imaginons que vous vouliez faire un suivi du nombre de fois qu'un utilisateur a tiré avec son lance-roquettes. Vous pouvez faire cela de plusieurs façons. Quelle que soit la méthode choisie, nous vous conseillons d'effectuer toutes les modifications de propriétés ensemble, car les appels pour modifier les propriétés d'items sont limités en nombre comme rappelé ci-dessus.

API Web

Sur votre serveur de jeu sécurisé, vous pouvez accumuler ces chiffres et, à la fin de la manche ou à un autre moment approprié, envoyer les résultats avec POST à l'API Web IInventoryService/ModifyItems en utilisant votre clé éditeur sécurisée.

Exemple de données de formulaire pour l'appel POST :
appid: 480 key: "0123456789abcdeffedcba9876543210" input_json:{ "steamid" : "1234", "timestamp" : 1513274037, "updates" : [] }

API Steamworks

Si vous voulez utiliser l'API Steamworks pour modifier des propriétés d'items (une fois encore, non sécurisé par essence), vous devrez d'abord ajouter celles-ci à une liste blanche pour votre application.

Ensuite, comme dans l'exemple ci-dessus, à la fin de la manche ou à un autre moment approprié, vous pouvez commencer une mise à jour, définir des propriétés et ensuite soumettre la mise à jour à Steam.

SteamInventoryUpdateHandle_t updateHandle = SteamInventory()->StartUpdateProperties(); SteamInventory()->SetProperty( updateHandle, nItemID, "num_times_fired", nNumTimesFired ); SteamInventoryResult_t resultUpdate; SteamInventory()->SubmitUpdateProperties( updateHandle, &resultUpdate );

Ensuite, dans votre gestionnaire de rappel pour SteamInventoryResultReady_t, vous récupèrerez les résultats de l'appel pour mettre à jour ces propriétés d'item.

Traduction

Normalement, les propriétés dynamiques ne s'affichent pas dans la version Web de l'inventaire. Cependant, vous pouvez utiliser les valeurs présentes dans la description de votre item si vous spécifiez le nom de la propriété dynamique en tant que jeton de remplacement.

Pour reprendre l'exemple précédent, la chaine de description associée à la définition de l'item pourrait être la suivante :
On a tiré %num_times_fired% fois avec ce lance-roquettes.

Sur la version Web, la description s'afficherait ainsi :
On a tiré 100 fois avec ce lance-roquettes.

Les jetons de remplacement (c.-à-d. des chaines correspondant à l'expression régulière « %([a-zA-Z0-9.-_]+)% ») qui ne possèdent aucune propriété dynamique sont supprimés automatiquement. Si vous configurez vos propriétés dynamiques sur le service d'inventaire Steam dans la section « Propriétés dynamiques d'item » et que vous remplissez le champ de type, alors les nombres entiers et les nombres à virgule flottante seront remplacés par la valeur 0, et les valeurs booléennes par la valeur « false ».