Documentación de Steamworks
Propiedades dinámicas de artículo del inventario de Steam
Una novedad en el servicio de inventario de Steam es la capacidad de almacenar propiedades de cadena, entero, booleano o flotante arbitrarias en cualquier ejemplar de un artículo.

Estas propiedades son similares a las etiquetas específicas de artículo. Sin embargo, a diferencia de las etiquetas específicas de artículo, que se consideran inmutables, estas propiedades son dinámicas y se pueden modificar mediante una llamada segura a la API web o a través de la API de Steamworks.

Además, a diferencia de las etiquetas de artículo, las propiedades dinámicas de artículo se borran cuando el artículo se intercambia. Actualmente las propiedades dinámicas de artículo no se ven al inspeccionar los artículos en el inventario de Steam de un usuario o en el Mercado de la comunidad de Steam.

Obtención de las propiedades de artículo


Las propiedades dinámicas de artículo se envían automáticamente junto con otros atributos de artículo al cliente de Steam y pueden obtenerse llamando a ISteamInventory::GetResultItemProperty con el nombre de propiedad dynamic_props. El búfer proporcionado se llenará con la representación de cadena del JSON de todas las propiedades dinámicas de artículo. El correcto análisis de esta cadena depende de tu aplicación.

Para cualquier llamada a la API web que devuelva artículos como JSON, la clave dynamic_props apuntará al objeto JSON completo que contiene las propiedades dinámicas de artículo.

Modificación de las propiedades de artículo


Desde uno de tus servidores seguros, puedes modificar artículos utilizando la API web IInventoryService/ModifyItems y tu clave de editor segura.

También puedes modificar las propiedades de artículo desde el cliente de Steam a través de la API de Steamworks y llamadas a ISteamInventory::StartUpdateProperties, ISteamInventory::RemoveProperty, ISteamInventory::SetProperty e ISteamInventory::SubmitUpdateProperties. Sin embargo, primero tendrás que hacer una lista blanca de las propiedades que se pueden configurar desde el cliente en la página de configuración del servicio de inventario de Steam en el sitio web de asociados. Te recomendamos que solo pongas en la lista blanca las propiedades que no te importen con una configuración de cliente no fiable (por ejemplo, el usuario puede falsificar mensajes para poner el valor que quiera).

Actualmente puedes modificar hasta 100 elementos para un usuario en cada llamada. Esta llamada tiene una tasa limitada para cada usuario, por lo que desearás agrupar sus modificaciones y enviarlas en el momento adecuado para tu juego. También hay un máximo de 1024 bytes de JSON por artículo en este momento.

Aplicando restricciones

Como se mencionó anteriormente, puedes incluir en la lista blanca ciertas propiedades para que se puedan configurar desde el cliente. Pero también puedes restringir aún más las propiedades que se pueden establecer exigiendo que el elemento de destino tenga un par específico tag_category:tag_value o para cualquier valor tag_category. Al usar estas restricciones de etiquetas en combinación con la API del cliente, puedes permitir que los clientes establezcan propiedades solo en los elementos donde tenga sentido (es decir, un sombrero no haría un seguimiento del número de muertes, pero un lanzador de cohetes puede). Estas etiquetas requeridas pueden existir en el elemento o en su definición de elemento asociada.

Ejemplos


Digamos que deseas realizar un seguimiento de cuántas veces un usuario ha disparado su lanzador de cohetes. Hay un par de maneras de hacer esto, pero independientemente del método que elijas, desearás agrupar las modificaciones de propiedades, ya que las llamadas para modificar las propiedades de los elementos tienen una tasa limitada, como se mencionó anteriormente.

WebAPI

En tu servidor seguro de juegos puedes guardar esa estadística y al final de la ronda del juego u otro momento apropiado, puedes enviar los resultados a la API web IInventoryService/ModifyItems Web API usando tu clave editor seguro.

Ejemplo de datos de formulario para la llamada POST:
appid: 480 key: "0123456789abcdeffedcba9876543210" input_json:{ "steamid" : "1234", "timestamp" : 1513274037, "updates" : [] }

API de Steamworks

Si deseas usar la API de Steamworks para modificar las propiedades de los elementos (de nuevo, inherentemente inseguro), primero deberás agregarlos a una lista blanca para tu aplicación.

Después, como en el ejemplo anterior, una vez que finaliza la ronda del juego u otro momento adecuado, puedes iniciar una actualización, establecer propiedades y luego enviar la actualización a Steam.

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

Luego, en tu controlador de función callback para SteamInventoryResultReady_t, obtendrás los resultados de la llamada para actualizar esas propiedades del elemento.

Localización

Normalmente, las propiedades dinámicas no se muestran en la vista web de la mochila del usuario. Sin embargo, puedes utilizar los valores en la descripción del artículo si especificas el nombre de la propiedad dinámica como token de sustitución.

Utilizando el ejemplo anterior, la cadena de descripción en la definición del artículo podría ser:
Este lanzacohetes se ha disparado %num_times_fired% veces.

La descripción en la web se vería así:
Este lanzacohetes se ha disparado 100 veces.

Los tokens de sustitución (es decir, las cadenas que coinciden con la expresión regular «%([a-zA-Z0-9.-_]+)%») que no tengan ninguna propiedad dinámica correspondiente se eliminarán automáticamente. Si configuras tus propiedades dinámicas en la sección «Propiedades dinámicas de artículo» de la página del servicio de inventario de Steam y estableces el campo «Tipo», los enteros y flotantes se sustituirán por 0 y las propiedades booleanas se sustituirán por «false».