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

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

Además, a diferencia de las etiquetas de artículos, sus propiedades dinámicas se borran cuando se intercambia un artículo. Las propiedades de artículos dinámicos no están visibles actualmente cuando se inspecciona un artículo en el Inventario de Steam de un usuario o en el mercado de la Comunidad Steam.

Recuperación de las propiedades del artículo


Las propiedades de los artículos dinámicos se envían automáticamente junto con otros atributos de artículos al Cliente de Steam y se pueden recuperar llamando a ISteamInventory::GetResultItemProperty con el nombre de propiedad dynamic_props. El búfer proporcionado se rellenará con la representación de cadena del JSON para todas las propiedades dinámicas del artículo. Depende de su aplicación analizar esta cadena adecuadamente.

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

Modificación de las propiedades del artículo


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

También puede modificar las propiedades de los elementos del Steam Client a través de la API de Steamworks y llamar a ISteamInventory::StartUpdateProperties, ISteamInventory::RemoveProperty, ISteamInventory::SetProperty y ISteamInventory::SubmitUpdateProperties. Sin embargo, primero deberás 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 asociado. Recomendamos que solo incluyas en la lista blanca las propiedades con las que estás de acuerdo con una configuración de cliente que no es de confianza (es decir, el usuario puede falsificar mensajes para establecer el valor en lo que desee).

Actualmente, puedes modificar hasta 100 artículos 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.

Aplicación de 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 artículo 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 artículos 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 artículo o en su definición de artículo 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 Web de API IInventoryService/ModifyItems Web de 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".