Steamworks-dokumentasjon
Steam Inventory Item Dynamic Properties
New to the Steam Inventory Service is the ability to store arbitrary string, integer, boolean, or float properties on any item instance.

These properties are similar to per item tags. However, unlike per item tags which are considered immutable, these properties are dynamic because they can be modified either through a secure Web API call or through the Steamworks API.

Also unlike item tags, dynamic item properties are cleared when an item is traded. Dynamic item properties are not currently visible when inspecting an item in a user's Steam Inventory or on the Steam Community Market.

Retrieving Item Properties


Dynamic item properties are automatically sent along with other item attributes to the Steam Client and can be retrieved by calling ISteamInventory::GetResultItemProperty with the property name dynamic_props. The provided buffer will be filled with the string representation of the JSON for all the dynamic properties for the item. It is up to your application to parse this string appropriately.

For any Web API calls that return items as JSON, the dynamic_props key will point to the full JSON object containing the dynamic item properties.

Modifying Item Properties


From one of your secure servers, you can modify items using the IInventoryService/ModifyItems Web API and your secure publisher key.

Du kan også modifisere egenskapene til gjenstander fra Steam-klienten gjennom Steamworks-API-et og kall til ISteamInventory::StartUpdateProperties, ISteamInventory::RemoveProperty, ISteamInventory::SetProperty og ISteamInventory::SubmitUpdateProperties. Men du må først hviteliste egenskapene som kan angis fra klienten i konfigurasjonssiden til Steams lagertjeneste på partnersiden. We recommend that you only white-list properties that you are fine with an untrusted client setting (i.e. the user can spoof messages to set the value to whatever they want).

For øyeblikket kan du modifisere opptil 100 gjenstander for en bruker i hvert kall. Dette kallet har en frekvensbegrensning per bruker, så du bør samle sammen modifikasjonene dine og sende dem på et godt øyeblikk for spillet ditt. Hver gjenstand har også en maksbegrensning på 1024 bytes på JSON-en.

Påføring av begrensninger

Som tidligere nevnt kan du hviteliste visse genskaper slik at de kan angis fra klienten. But you can also further restrict what properties can be set by requiring the target item to have a specific tag_category:tag_value pair or for any tag_category value. Using these tag restrictions in combination with the client API, you can allow clients to set properties only on items where it makes sense (i.e. a hat would not keep track of the number of kills, but a rocket launcher can). These required tags can exist either on the item or its associated item definition.

Eksempler


Tenk deg at du har lyst til å spore hvor mange ganger en bruker har avfyrt rakettkasteren sin. Det finnes flere måter å gjøre dette på, men uavhengig av metoden du velger, så bør du samle sammen modifikasjoner til egensakepr ettersom kallene for å modifisere egenskaper er frekvensbegrenset som nevnt ovenfor.

Nett-API

På den sikrede spilltjeneren kan du samle opp statistikken og på slutten av runden eller på et annet aktuelt tidspunkt kan du POST-e resultatene til nett-API-et IInventoryService/ModifyItems ved å bruke den sikre utgivernøkkelen din.

Eksempel på skjemadata for POST-kallet:
appid: 480 key: "0123456789abcdeffedcba9876543210" input_json:{ "steamid" : "1234", "timestamp" : 1513274037, "updates" : [] }

Steamworks API

Hvis du har lyst til å bruke Steamworks-API-et til å modifisere gjenstandsegenskaper (ikke sikkert), så må du først legge dem til i hvitelisten til applikasjonen din.

Then, as with the above example, once the game round has ended or other appropriate time, you can start an update, set properties, and then submit the update to Steam.

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

I tilbakekallshåndteringen for SteamInventoryResultReady_t mottar du resultatene fra kallet for å oppdatere gjenstandsegenskapene.

Lokalisering

Dynamiske egenskaper gjengis vanligvis ikke i nettvisningen av brukerens ryggsekk. Men du kan bruke verdiene i gjenstandens beskrivelse hvis du angir navnet på den dynamiske egenskapen som et erstatningstoken.

Med eksempelet ovenfor så blir beskrivelsesstrengen i gjenstandsdefinisjonen noe slik som:
Denne rakettkasteren er blitt avfyrt %num_times_fired% ganger.

Beskrivelsen på nettet kan da se ut som:
Denne rakettkasteren er blitt avfyrt 100 ganger.

Erstatningstokener (dvs. strenger som svarer til dette regulære uttrykket «%([a-zA-Z0-9.-_]+)%» som ikke har en tilsvarende dynamisk egenskap fjernes automatisk. 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".