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".