Steamworks dokumentáció
Játékértesítések

Áttekintés

A Steam Játékértesítések egy offline értesítések küldésére szolgáló rendszer, olyan aszinkron többjátékos módú játékokat játszóknak, mint például a sakk.

Ennek az API-nak a célja a felhasználók értesítése arról, hogy teendőjük van egy játékmenet előremozdításához. A sakk példában a játékmenet állapota az egyes játékosok lépése után frissül. A Steam ezután értesítéseket küld a felhasználóknak a játékmenet állapota alapján, hogy értesítse őket, amikor a játék rájuk vár.

A játék teendői

Egy offline játék jellemzően a játékmenetet kezelné, frissítve az egyes felhasználók állapotát olyan állapotokkal, amelyek pedig értesítést küldenek a felhasználónak, hogy tudja, el kell indítania a játékot és tennie kell valamit. Elindításkor és játékműveletek végrehajtásakor a játéktól elvárjuk a játékmenet újabb frissítését a játékmenet összes felhasználójának naprakész állapotával.

Amit a Steam fog kezelni

A Steam fogja kezelni az egy játékmenetben levő felhasználók értesítését a játék által biztosított állapotok, és a felhasználó által a játékhoz választott konkrét beállítások alapján. A felhasználónak értesítés fog megjelenni a Steam kliensben és a webböngészőben, amikor egy játékban cselekvésre van szükség.

Követelmények

A Játékértesítések API web API metódusokon keresztül biztosított, és érvényes kiadói kulcsot igényel. A web API metódushívásoknak a játékklienstől elkülönülő távol üzemeltetett szerverről kell eredniük; a kiadói kulcsot nem szabad kiadni játékkliens kód részeként.

Hitelesítés és külső fiókok

A Játékértesítések API-k meghívásához először meg kell állapítani a játékba bejelentkezett Steam felhasználó személyazonosságát. Ezt kétféleképpen lehet megtenni: egy klienses játék generálhat hitelesítési munkamenetjegyet, és visszaadhatja azt a szerverednek, egy web alapú játék pedig OpenID használatával ellenőrizheti a felhasználót. Útmutatás ennek megtételéhez a Linking third-party accounts to Steam accounts dokumentációban érhető el. Fontos, hogy ne bízz a felhasználói személyazonosságban a játékklienstől közvetlenül a játékszerverednek küldött üzenetekben, mivel ezek az üzenetek megváltoztathatók.
Külső fiókot használó játékok esetében használd a fenti útmutatást, de gyorsítótárazd a felhasználó SteamID-jét a rendszeredben.

Játékértesítések API

Műszaki áttekintés

A Játékértesítések API web API-kként van megírva és elérhetővé téve, és mindegyik metódus négy paraméter átadását igényli:
  • appid (a játékod alkalmazás-azonosítója),
  • format (Az eredmény formátuma. Visszatérési értékként JSON-t javaslunk.),
  • input_json (az egy metódushoz szükséges összes paraméter JSON kódolással),
  • key (a minden hívással átadandó kiadói kulcsod).
Az API siker esetén 200-as HTTP állapotkódot fog visszaadni, részletekkel az üzenet törzsében (ha van ilyen).

Konstans értékek

UserState

Az alábbiakban definiált string értékek egyike:
  • waiting – A felhasználó más játékosokra vár, nem blokkol semmilyen műveletet. Nem küldünk értesítést a felhasználónak, mert várja, hogy valami történjen.
  • ready – A felhasználó készen áll; a játékmenet válaszra vár a felhasználótól. Értesítést küldünk a felhasználónak, amíg ez az állapot meg nem szűnik.
  • done – A játék ennek a felhasználónak befejeződött. Értesítjük a felhasználót, hogy a játék véget ért, de cselekvésre nincs szükség.

Adatstruktúrák (JSON)

Minden adatstruktúra JSON formátumban van ábrázolva.

Variable

{ "key": "kulcsnév", // string "value": "kulcsérték" // string }

LocalizedText

{ "token": "érték", // egy lokalizációs tokenre leképeződő string "variables": [ // "Variable" (fentebb) tömb ] }

UserStatus

{ "steamid": "76561197960265729", // uint64 "state": // A "UserState" konstansok egyike (fentebb leírva), "title": // Egy "LocalizedText" objektum (fentebb leírva), "message": // Egy "LocalizedText" objektum (fentebb leírva) }

Session

{ "sessionid": "1", // uint64 "title": // Egy "LocalizedText" objektum (fentebb), "time_created": "100000", // Unix epoch idő (az 1970. január 1. óta eltelt idő). "time_updated": "200000", // Unix epoch idő (az 1970. január 1. óta eltelt idő). // A fejlesztő által a játékmenet kezdetén adott 64 bites érték, ami át lesz adva a játéknak annak elindításakor. // Ez teszi lehetővé, hogy könnyen a háttéroldali objektumodhoz kösd a munkamenet-objektumot; a Steam maga nem használja. "context": "31415926", "user_status": [ // "UserStatus" objektumok tömbje (fentebb leírva) ] }

RequestedSession

{ "sessionid": "1", // uint64 "include_all_user_messages": "0" // bool }

Elérhető általános API-k

A teljes listáért lásd a IGameNotificationsService-t.

Konkrét játékmenetek indítása

A felhasználók meg tudják nézni az összes aktív játékmenetüket a közösségi profiloldalukon a Steamen. A játékállapot mellett van egy gomb, amely utasítja a Steamet a játék elindítására konkrét indítási paraméterekkel a játékmenet meghatározásához. Amikor egy játékot így indítanak el, egy „_sessionid” indítási paraméter lesz megadva annak. Ezt a paramétert az iSteamApps::getLaunchQueryParam használatával tudod megkapni.
Ezen a módon:
const char *pchSessionID = ISteamApps()->GetLaunchQueryParam("_sessionid");
Egy olyan játéknak, amely támogatja a közvetlenül egy játékmenetbe indítást ezen a módon, meg kell hívnia ezt az interfészt játékindításkor, megállapítani, hogy jelen van-e a sessionid string, érvényes-e a bejelentkezett felhasználónak, és közvetlenül be kell töltenie a játékot.

Lokalizáció

A lokalizációt a játék fejlesztője biztosítja az alkalmazás konfigurációjának részét képező lokalizációs eszközön keresztül. A te dolgod a lokalizációs eszközbe bevitt minden string mindegyik nyelvű fordításának beállítása. Bármely string, ami nincs lefordítva egy játékos nyelvére, angolul lesz megjelenítve.
A Játékértesítés a következő tulajdonságok lokalizációját támogatja:

Minden egyes LocalizedText két összetevőből áll:

A token egy olyan kulcs, amely a „#” szimbólummal kezdődik, és egy olyan stringet képvisel, amely az alkalmazáskonfigurációdban levő lokalizációs eszközön keresztül különféle nyelvekre van lokalizálva. Egyetlen token több változópéldányt tartalmazhat, amelyek futásidőben behelyettesíthetők a játékkontextus alapján, amikor a szöveg generálása szükséges. Egy példa erre:
#InvitationText = "{{user}} meghívott téged egy sakkjátszmára."

A fenti példában az #InvitationText magyar fordítása egyetlen, „user” nevű változót tartalmaz. Ha meg akarod jeleníteni ezt a szöveges üzenetet egy felhasználónak, amikor „SteamUserName” játékra hívja őt, a következő tulajdonságokkal frissíted a LocalizationText objektumot:
"message": { "token": "#InvitationText", "variables": [ { "key": "user", "value": "Michael" } ] }

Amikor a játékos megnézi az állapotát, ezt az üzenetet fogja látni (a saját nyelvén): „Michael meghívott téged egy sakkjátszmára.”
A lokalizációs tokenek az alkalmazásod Steamworks beállítások oldalának Közösség fülén, az Aszinkron lokalizáció szakaszban tölthetők föl.
Minden egyes nyelv feltölthető külön-külön VDF fájlokban, amelyek így néznek ki:
"lang" { "Language" "english" "Tokens" { "ATokenNeve" "The localized text associated with the token" "EgyMasikTokenNeve" "The localized text associated with the second token" } }

Alternatív megoldásként az összes nyelv tokenjei feltölthetők egyetlen fájlban, amely így néz ki:
"lang" { "english" { "Tokens" { "ATokenNeve" "The localized text associated with the token" "EgyMasikTokenNeve" "The localized text associated with the second token" } } "hungarian" { "Tokens" { "ATokenNeve" "A tokenhez társított lokalizált szöveg." "EgyMasikTokenNeve" "A második tokenhez társított lokalizált szöveg." } } }