Steamworks-dokumentaatio
Steam-tavaraluettelon esineiden dynaamiset ominaisuudet
Steamin tavaraluettelopalvelussa on uusi ominaisuus: satunnaisten merkkijonojen, kokonaislukujen, totuusarvolukujen tai liukulukujen ominaisuuksien tallentaminen mihin tahansa esinetapahtumaan.

Nämä ominaisuudet ovat samantapaisia kuin esinekohtaiset tunnisteet. Ne ovat kuitenkin dynaamisia, toisin kuin muuttumattomina pidetyt esinekohtaiset tunnisteet. Niitä voi muokata joko suojatulla Web API -kutsulla tai Steamworks-rajapintakutsulla.

Dynaamiset esineominaisuudet poistetaan esineen vaihtaessa omistajaa, toisin kuin esinetunnisteiden tapauksessa. Dynaamisia esineominaisuuksia ei voi tällä hetkellä nähdä, jos esinettä tarkastellaan käyttäjän tavaraluettelossa tai Steam-yhteisön kauppapaikalla.

Esineen ominaisuuksien noutaminen


Dynaamiset esineominaisuudet lähetetään automaattisesti esineen muiden määritteiden kanssa Steam-asiakasohjelmaan, ja ne voidaan noutaa ISteamInventory::GetResultItemProperty-kutsulla käyttämällä ominaisuuden nimeä dynamic_props. JSON-tiedoston merkkirepresentaatiot ladataan annettuun puskuriin kaikille esineen dynaamisille ominaisuuksille. Sovelluksesi on pystyttävä jäsentämään merkkijono.

Jos jokin Web API -kutsuista palauttaa esineet JSON-tiedostomuodossa, dynamic_props-tunnus viittaa koko JSON-objektiin, joka sisältää esineen dynaamiset ominaisuudet.

Kohteen ominaisuuksien muokkaaminen


Voit muokata esineitä suojattujen palvelimiesi kautta käyttämällä IInventoryService/ModifyItems-verkko-ohjelmointirajapintaa ja varmennettua julkaisijan avainta.

Voit muokata esineen ominaisuuksia myös Steam-asiakasohjelmassa Steamworks-ohjelmointirajapinnan välityksellä sekä seuraavilla kutsuilla: ISteamInventory::StartUpdateProperties, ISteamInventory::RemoveProperty, ISteamInventory::SetProperty ja ISteamInventory::SubmitUpdateProperties. Sinun on kuitenkin aluksi valittava sallitut ominaisuudet. Tämän voi tehdä asiakasohjelmassa kumppanisivustolta löytyvältä Steamin tavaraluettelopalvelun määrityssivulta. Kannattaa sallia vain ominaisuudet, jotka epäluotettava asiakasohjelma saa määrittää puolestasi (toisin sanoen käyttäjä voi väärentää viestejä ja määrittää minkä tahansa haluamansa arvon).

Tällä hetkellä voit muokata jokaisen kutsun kautta jopa sataa esinettä käyttäjää kohti. Kutsuja voi tehdä vain tietyn määrän käyttäjää kohden. Tästä syystä muokkaukset on hyvä tehdä erissä ja lisätä peliisi sopivaan aikaan. Esinettä kohti on parhaillaan käytössä myös 1 024 tavun JSON-rajoitus.

Rajoitusten määrittäminen

Kuten aiemmin mainittiin, voit sallia tietyt ominaisuudet, jolloin ne on mahdollista määrittää asiakasohjelmasta käsin. Määritettäville ominaisuuksille voi asettaa vielä tiukemmat rajoitukset vaatimalla kohde-esineeltä tiettyä tag_category:tag_value-paria tai mitä tahansa tag_category-arvoa. Kun käytät näitä tunnisterajoituksia yhdessä asiakasohjelman ohjelmointirajapinnan kanssa, voit antaa asiakasohjelmien määrittää ominaisuuksia vain esineille, joiden kohdalla siinä on järkeä (esimerkiksi hattu ei pysty seuraamaan tappojen määrää, mutta raketinheitin pystyy). Esineessä tai siihen liittyvässä esinemäärityksessä voi käyttää alla kuvaillun kaltaisia vaadittuja tunnisteita.

Esimerkkejä


Jos haluat esimerkiksi seurata sitä, kuinka monta kertaa käyttäjä on laukaissut raketinheittimensä, voit tehdä sen parilla eri tavalla. Valitsemastasi menetelmästä riippumatta ominaisuuksien muutokset kannattaa tehdä erissä, sillä esineiden ominaisuuksien muokkauskutsujen määrää on rajoitettu – kuten edellä mainittiin.

Verkko-ohjelmointirajapinta (WebAPI)

Voit kerätä suojatulle pelipalvelimellesi tilastotietoja ja lähettää tulokset IInventoryService/ModifyItems-verkko-ohjelmointirajapinnalle POST-metodin avulla pelikierroksen loppuvaiheessa tai muulla sopivalla hetkellä. Tämän voi tehdä käyttämällä varmennettua julkaisijan avainta.

Esimerkki POST-kutsun lomaketiedoista:
appid: 480 key: "0123456789abcdeffedcba9876543210" input_json:{ "steamid" : "1234", "timestamp" : 1513274037, "updates" : [] }

Steamworks-ohjelmointirajapinta

Jos haluat käyttää Steamworks-ohjelmointirajapintaa esineen ominaisuuksien räätälöintiin (mikä on siis suojaamatonta), sinun on ensin lisättävä ne sovelluksesi sallittujen listaan.

Tämän jälkeen voit pelikierroksen päätyttyä tai muuna sopivana hetkenä aloittaa päivityksen, määrittää ominaisuuksia ja lähettää päivityksen Steamiin edellä olevan esimerkin mukaisesti.

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

SteamInventoryResultReady_t-takaisinkutsun käsittelijä lähettää kutsun tulokset, joilla voit päivittää esineiden ominaisuudet.

Lokalisointi

Dynaamisia ominaisuuksia ei yleensä renderöidä käyttäjän tavaraluettelon verkkonäkymässä. Voit kuitenkin käyttää esineen kuvauksen arvoja, jos määrität dynaamisen ominaisuuden nimen korvaavaksi tunnukseksi.

Edellisen esimerkin mukaan esinemääritystä kuvaava merkkijono voisi olla:
Raketinheitin on laukaistu %num_times_fired% kertaa.

Verkossa kuvaus näyttäisi tältä:
Raketinheitin on laukaistu 100 kertaa.

Korvaavat tunnukset (eli merkkijonot, jotka vastaavat säännöllistä lauseketta %([a-zA-Z0-9.-_]+)%), joilla ei ole vastaavaa dynaamista ominaisuutta, poistetaan automaattisesti. Jos määrittelet dynaamiset ominaisuudet Steamin tavaraluettelopalvelun sivun Esineiden dynaamiset ominaisuudet -osiossa ja määrität type-kentän, kokonais- ja liukuluvut korvataan arvolla 0 ja loogisiksi (Boolen) arvoiksi vaihdetaan false (epätosi).