Documentação do Steamworks
Inventário Steam: Propriedades dinâmicas de itens
Um dos novos recursos do serviço de inventário Steam é a possibilidade de armazenar propriedades textuais, numéricas (inteiro ou ponto flutuante) ou booleanas em qualquer instância de item.

Essas propriedades são similares aos marcadores de itens, mas consideradas dinâmicas, por poderem ser modificadas por chamadas seguras à Web API ou pela API do Steamworks.

Outra diferença é que propriedades dinâmicas são removidas quando o item é trocado. Atualmente propriedades dinâmicas não são exibidas ao inspecionar um item no inventário Steam de um usuário ou no Mercado da Comunidade Steam.

Recuperação de propriedades de itens


As propriedades dinâmicas de um item são retornadas juntamente com os seus outros atributos e podem ser recuperadas pelo método ISteamInventory::GetResultItemProperty com o nome de propriedade dynamic_props. O buffer repassado será preenchido com a string que representa o JSON de todas as propriedades dinâmicas do item. Cabe ao seu aplicativo processá-lo corretamente.

Para chamadas à Web API que retornam itens no formato JSON, a o valor associado à chave dynamic_props será o objeto JSON com as propriedades dinâmicas do item.

Modificação das propriedades de itens


Use um dos seus servidores seguros para modificar itens por meio da Web API IInventoryService/ModifyItems e a chave da distribuidora.

Também é possível modificar propriedades de itens pelo cliente Steam por meio de chamadas às APIs do Steamworks ISteamInventory::StartUpdateProperties, ISteamInventory::RemoveProperty, ISteamInventory::SetProperty e ISteamInventory::SubmitUpdateProperties. Contudo, você primeiro deverá usar a página de configuração do serviço de inventário Steam, no site de parceiros, para definir quais propriedades podem ser definidas pelo cliente. Aconselhamos que só permita a alteração pelo cliente de propriedades sem confiança (já que um usuário pode enviar mensagens próprias, definido o valor que desejar).

Atualmente é possível modificar até 100 itens de um usuário por chamada. Há limite na quantidade de chamadas por usuário, então agrupe modificações e as envie quando apropriado para o jogo. Também há uma limitação de 1024 bytes por JSON de modificações por item atualmente.

Aplicação de restrições

Como já citado, é possível permitir que certas propriedades sejam modificadas pelo cliente. Também é possível limitar quais propriedades podem ser definidas ao exigir que o item-alvo tenha um par específico de categoria_marcador:valor_marcador ou tenha uma categoria_marcador com qualquer valor associado. Usar essas restrições de marcador em combinação com a API do cliente permitirá que clientes definam propriedades apenas em itens onde faz sentido (ex.: um chapéu não tem como contabilizar quantidade de vítimas, mas um lança-foguetes sim). Esses marcadores podem estar associados ao item em si ou à sua definição.

Exemplos


Vamos dizer que deseja contabilizar quantas vezes um usuário disparou o seu lança-foguetes. Há várias formas de fazê-lo, mas não importa como, será importante agrupar modificações de propriedades, já que as chamadas para modificar propriedades de itens são limitadas, como mencionado acima.

Web API

No seu servidor de partida seguro, acumule o valor da estatística e, no fim da rodada ou em outro momento apropriado, envie os resultados por POST à Web APIIInventoryService/ModifyItems usando a chave da distribuidora.

Exemplo de dados de formulário para a chamada POST:
appid: 480 key: "0123456789abcdeffedcba9876543210" input_json:{ "steamid" : "1234", "timestamp" : 1513274037, "updates" : [] }

API do Steamworks

Se desejar usar a API do Steamworks para modificar propriedades de itens (novamente: não seguro), vocë primeiro precisará permitir que sejam modificadas.

Depois, assim como no exemplo acima, após o fim da rodada ou em outro momento apropriado, inicie uma atualização, defina as propriedades e envie a atualização ao Steam.

SteamInventoryUpdateHandle_t handleAtualizacao = SteamInventory()->StartUpdateProperties(); SteamInventory()->SetProperty( handleAtualizacao, nIDItem, "qtd_disparos", nQtdDisparos ); SteamInventoryResult_t resultadoAtualizacao; SteamInventory()->SubmitUpdateProperties( handleAtualizacao, &resultadoAtualizacao );

Então, no handler do retorno de chamada SteamInventoryResultReady_t você receberá os resultados da chamada de atualização das propriedades.

Localization

Dynamic properties are not normally rendered in the web view of the user's backpack. However, you can use the values in your item's description if you specify the dynamic property name as a replacement token.

Using the preceding example, your description string in your item definition could be:
This rocket launcher has been fired %num_times_fired% times.

The description on the web would then look like:
This rocket launcher has been fired 100 times.

Replacement tokens (i.e. strings that match this regular expression "%([a-zA-Z0-9.-_]+)%") that have no corresponding dynamic property are automatically stripped. If you configure your dynamic properties on the Steam Inventory Service page under the "Item Dynamic Properties" section and set the "type" field, then integers and floats will be replaced with 0 instead, and bool properties will be replaced by "false".