A Riot 2022. június 13-án jelentette be, hogy a Microsofttal kötött megállapodás keretében elérhetővé válnak a legnagyobb játékaink az Xbox Game Pass-előfizetésben. Ezzel a világ két legnagyobb, a játékosközpontú versenyjátékok iránt elkötelezett játékos vállalata egyesült. Hat hónappal később teljesítettük a hatalmas feladatot, és sikeresen megjelentek a legnagyobb játékaink a Game Pass kínálatában.
Ezúttal az ehhez kapcsolódó háttérmunkát szeretnénk bemutatni, valamint a játékosplatform csapatát, akikről a többség eddig valószínűleg nem is hallott.
Mi a játékosplatform csapatának feladata?
A játékosplatform csapata teremti meg a Riot játékai és a játékosok közötti kapcsolatot, kiépítve a több játékot kiszolgáló ökoszisztémát és közösséget. A csapat alkotja meg a „kapcsolatot” a játékosélményben, hogy egymásra találjanak a játékok tartalmai és a játékosok. Másként fogalmazva a játékosplatform csapatának feladata leszállítani mindent, ami a Riot játékaiban van, és közvetlenül nincsen köze a játékmenethez. Ide tartoznak a fiókok játéktól független szolgáltatásai, a játékba való belépés, a közösség, a vásárlás, és sok minden más, amelyek portálokon, SDK-integráción és közvetlen API-kon keresztül valósulnak meg.
Mivel a játékosplatform csapata felel mindenért a játékélmény kapcsán, az Xbox Game Pass-szal kapcsolatos munka nagy része rájuk hárult. Ehhez valódi csapatszellemre, nyitottságra és rengeteg keményen dolgozó munkatársra volt szükség, akik a feladat teljesítése közben folytatták a Riot összes jelenlegi és készülő játékának támogatását.
Lássunk neki… gyorsan!
Mivel a Riot Games volt a legelső cég, amelynek ingyenesen játszható PC-s és mobiljátékai megjelentek az Xbox Game Pass kínálatában, mindkét fél járatlan útra tévedt. Ráadásul azzal szerettük volna fokozni a játékosok élményét, hogy játékbeli jutalmakat adunk a fiókokat összekapcsoló felhasználóknak. Ilyen léptékű projektek esetében próbáljuk különálló funkciófolyamokra bontani a nagy egészet, hogy mindenki magának érezze a rá osztott feladatot, és csak a közös célok megvalósítása igényeljen találkozókat.
Ennek érdekében a programmenedzserek szorosan együttműködtek a Microsofttal a leadás ütemezésének kidolgozásakor. Az ő felelősségük volt, hogy a megfelelő ember dolgozzon az egyes részfeladatokon, a megfelelő időben. A játékosplatform csapatának programmenedzserei kidolgozták a szükséges ceremóniákat és rítusokat a csapaton belül, illetve a Riot fejlesztői, kiadási és játékostámogatási csapatai, valamint az egyéb érintett felek kapcsán. Komplex kihívások stratégiáit és léptékét dolgozták ki a játékokon dolgozó csapatok és a játékosplatform csapata számára.
Tervezés a Game Passt szem előtt tartva
Mielőtt nekilátunk egy új rendszer fejlesztésének vagy egy meglévő átdolgozásának, meg kell győződni arról, hogy mindenki ugyanúgy látja-e a problémát, és hogyan festene a sikeres megvalósítás a játékosok szemszögéből. A játékosplatform csapatának felhasználóiélmény-tervezői kulcsfontosságú szereplők a pozitív játékélmény megteremtésében, ezért az Xbox Game Pass-partnerség esetében is kiemelt szerepük volt. Bár a tervezésről először a kész felhasználói felületek jutnak eszünkbe, legalább ilyen fontos a játékosok és az összetett termékek és rendszerek közötti interakciók megtervezése és gördülékennyé tétele. Ennyire nehéz lenne elintézni, hogy a játékosok össze tudják kapcsolni a Riot- és az Xbox Game Pass-fiókjaikat? Mint utóbb kiderült: igen!
A Riot és a Microsoft kapcsolatában a felhasználói élményért felelős csapat vezetői a többi csapat vezetésével közösen kidolgozták a játékosok számára „minimálisan szerethető” forgatókönyveket, és több szakterület és részleg képviselői segítségével megállapították, milyen partnerek és erőforrások bevonására van szükség ezek megvalósításához. Kiemelt figyelmet fordítottak a játékélményt veszélyeztető legnagyobb kockázatokra, mert ha egyetértés van abban, hogy egy nehéz közös feladat megéri az erőfeszítést, egyszerűbb a szakértelmeket egyesítve elérni egy látszólag lehetetlen célt. (A kezdeti folyamatról és a minimálisan szerezhető forgatókönyvek kidolgozásáról ebben, a Riot Games a felhasználói élményről szóló Medium-cikkében olvashatsz.)
„A vállalatok közötti együttműködés mindig óriási kihívást jelent. Eltérő terminológiák, eltérő szerepkörök, eltérő feltételezések. Mélyre kellett ásnunk, hogy megértsük a Microsoft hitelesítési rendszereinek és a Game Pass telepítési folyamatainak működését, hogy ezeket is figyelembe tudjuk venni a teljes költségszámítás elvégzésekor... és annak megállapításához, hogy pontosan mit igényelne a minimálisan szerethető forgatókönyvek megvalósítása”
- Cheryl Platz

A kezdeti folyamatok beindítása után a felhasználói élményért felelős csapat elkezdte kidolgozni, hogyan lesznek képesek a játékosok számára elérhető érintkezési pontok támogatni a játékosok bevezetését, függetlenül attól, hogy hol vannak vagy honnan érkeztek. A csapatnak kellett gondoskodnia arról, hogy a veterán Riot-játékosnak, aki közvetlenül a Riot-kliensből kapcsolja össze a fiókját a Game Pass-előfizetéssel, éppolyan könnyű és egyszerű dolga legyen, mint annak a Riot-újoncnak, aki életében először használja a Game Pass-alkalmazást.
Mivel a két vállalat önálló platformjai először működtek együtt, olyan problémákat kellett megoldani a kiváló felhasználói élmény érdekében, amilyenekkel sem a Riot-kliens, sem az Xbox fejlesztői nem találkoztak korábban. A Microsoft eltérő biztonsági modellje például érdekes lehetőséget kínált a játékosplatform csapatának: új lehetőségeket kerestek a hitelesítés és az identitásplatformok szabványosítása terén. A Microsofttal folytatott nyílt kommunikáció és aktív együttműködés segített a célok hatékony meghatározásában, és biztosította, hogy a jó irányba haladjon a fejlesztés.
„Nem ez volt az első integrációs feladat, amit elvégeztek, de annyiban újdonság volt számukra, hogy szoros együttműködés jött létre a siker érdekében. Együttműködésre volt szükség, hisz mindkét oldalon módosítani kellett a kódbázist, hogy ki tudjuk szolgálni a felmerülő igényeket. A Microsoft azonnal használatba vehető megoldásai ebben az esetben nem működtek, és nagyon időigényes lett volna a procedúra”
- Luther Baker
A kezdeti vizsgálati dokumentációban a tervezők rögzítették a jelenlegi folyamatok működését, és meghatározták az előfeltételeket, arra a kérdésre keresve a választ: „Milyen végeredményt szeretnénk elérni?” A Microsoft és a játékosplatform csapatának tervezői különböző módszereket (például a forgatókönyv-feltérképezést és a felhasználói folyamatokat) használva működtek együtt, és hoztak létre műtermékeket, amelyeket aztán megosztottak a mérnökökkel, a termékfejlesztőkkel és a minőségbiztosítással. Ezután kidolgoztak egy folyamatos visszacsatolási rendszert, hogy kiértékeljék, mely szolgáltatások és képességek alkalmasak a legjobb élmény támogatására.
„Ebben az esetben azzal jártunk jól, ha gond volt a felhasználói élménnyel, mert arra nagyobb eséllyel hívják fel a figyelmet, és a visszajelzésekből kiderülhet, hogy teljesen mást gondoltak valamiről. Jobb, ha minél hamarabb elrontunk valamint, és megbeszéljük a tanulságokat, mintha sokáig próbálnánk kitalálni a helyes választ, és aztán hoznánk létre valamit”
- Melody Seng
A műtermékek folyamatosan fejlődtek, néha munkaidőn kívül is. Ritka eseteket fedeztünk fel, amelyek további vizsgálatot és módosításokat igényeltek. A mérnökökkel és műszaki csapatokkal való közvetlen együttműködésnek hála sikeresen össze tudtunk hangolódni.

Közel valós idejű szolgáltatások létrehozása
Ha a lehető legjobb felhasználói élményt akartuk elérni a Riot és a Xbox Game Pass felhasználói számára, azonnal elérhetővé kellett tenni a Riot- és az Xbox Game Pass-fiók összekapcsolásával szerezhető játékbeli tartalmakat, ami némi találékonyságot igényelt a részünkről. A tartalomélményért felelős csapat a fiókokért felelős csapattal együttműködve (mindkettő a játékosplatform csapatának része) arra jutottak, hogy a fiók küldjön egy üzenetet a Riot-eseménybuszba (ez a Riot legújabb megközelítése az eseményalapú kommunikációban), valahányszor a játékos összekapcsolja az Xbox-fiókját vagy megszünteti a kapcsolatot. Az üzenet fogadása után az üzenetváltási témakört figyelő szolgáltatás erre reagálva feldolgozhatta az eseményt. Mivel a játékosok aktív Game Pass-előfizetés nélkül is összekapcsolhatták az Xbox- és a Riot-fiókjukat, a csapatnak az Xbox API-t is le kellett kérdeznie, hogy megszerezze ezt az információt a fiókok összekapcsolásakor kapott token segítségével, amelyet a fiókokért felelős csapatnak kellett tárolnia egy új szolgáltatásban. Ez azonban csak részben oldja meg a problémát, mert azt is ellenőrizni kell, hogy a játékos rendelkezik-e aktív Xbox Game Pass-fiókkal.
A tartalomélményért felelős csapat (a játékosplatform csapatának része) létrehozta a Gateway Subscription Service (GSS) nevű eszközt, amely a Rioton belül egyedüliként tudja megbízhatóan megállapítani a játékosok Game Pass-állapotát, bármilyen meghívásra válaszolva. Tehát ha ezután egy szolgáltatásnak bármilyen, előfizetésekkel kapcsolatos tartalmat kellett lekérdeznie, a GSS-t hívta, és alacsony késéssel kapott nagy pontosságú választ arra a kérdésre, hogy egy játékosnak milyen előnyöket kell biztosítani. A GSS úgy szerzi be az adatait, hogy befogadja a fiókok összekapcsolási eseményeit, és a Microsoft API segítségével ellenőrzi, hogy a játékosnak aktív-e a Game Pass-állapota. Ezeket az adatokat aztán megosztja más Riot-szolgáltatásokkal egy HTTP API-végponton keresztül, hogy más csapatok is használhassák az adatokat egyéb célokra, például:
- Tartalomhozzáférési platform: az egyes előfizetésekhez kapcsolódó tartalmak hozzáadása a felhasználói fiókhoz
- Marketingtechnológia: a játékos aktuális Game Pass-állapotának megfelelő hirdetéseket jelenít meg
- Játékostámogatás: a munkatársak az információk segítségével könnyebben dolgozhatják fel az Xbox-előfizetésekhez kapcsolódó hibajegyeket
- Webes élmény (WebEx): megjeleníti a játékos előfizetési állapotát a játékos fiókkezelési webhelyén
Ha egy játékos összekapcsolja a Riot- és a Xbox Game Pass-fiókját, a GSS a Microsoft Xbox API lekérdezésével megismeri a játékos Game Pass-állapotát a fiókok összekapcsolásakor keletkező token segítségével, amelyet egy rendszeresen frissített perzisztens adatbázisba mentettünk, és elérhetővé tettünk lekérdezésre, az API-n keresztül biztosítva hozzáférést a klienshez. Eddig egyszerű, ugye?
A játékos bármikor aktiválhatja Game Pass-előfizetését a Riot- és az Xbox-fiókja összekötése után. A szolgáltatás csak azt tudja rendszeresen lekérdezni az Xbox API-tól, hogy a játékos aktív állapotú-e. A legjobb játékélmény érdekében az volt a cél, hogy a játékosok a fiókok összekapcsolása és a Game Pass aktiválása után azonnal hozzáférjenek az előfizetéssel szerezhető tartalmakhoz, ezért kellett biztosítani a gyakori lekérdezés képességét. De milyen gyakoriság a megfelelő? Jó lenne percenként megtenni, de nem túl jó ötlet percenként több millió lekérdezést küldeni egy API-nak, csak hogy ellenőrizzük az állapotot, különösen úgy, hogy az esetek 99%-ában nem lesz állapotváltozás a két egymást követő hívás között.
A csapat olyan eseteket keresett, amikor a Riot-oldali játékosinterakciókra reagálhatunk, például amikor elindítják a játék kliensét, ami megfelelő alkalomnak tűnik a Game Pass-állapot lekérdezésére. A frissítés azonban egy külső HTTP-hívás, amely nagyjából 1 másodpercet vesz igénybe, a fő GSS-kliens, a Content Access Platform (CAP) azonban kevesebb mint 50 ezredmásodperc alatt várta a választ, mivel a játékos tárgyainak lekérdezésére szolgáló, rendkívül időigényes útvonal része volt. Az egy másodperces külső hívást képtelenség belesűríteni 50 ezredmásodpercbe, ezért kreatív megoldást kellett találnunk. A csapat úgy döntött, hogy az előző frissítésből vagy az eredetileg a fiókok összekapcsolásakor szerzett, aktuálisan tárolt értéket adják vissza, és egy aszinkron frissítést indítanak a háttérrendszerben, ha a tárolt érték több mint két perce keletkezett. Ha a szolgáltatás változást észlel a Game Pass-állapotban az aszinkron frissítés után, üzenetet küld a Riot üzenetküldő rendszerén keresztül a játék kliensének, így a játék beszerezheti a jogosultságokat a CAP-ból, így biztosítva, hogy a játékos a kliens ismételt betöltése nélkül hozzájuthasson az előfizetés tartalmaihoz.
„Tehát a végső cél a késés lehető legnagyobb csökkentése volt, mivel egy nagyon szűk időkeretnek kellett megfelelnünk. 50 ezredmásodperc alatt kell válaszolnunk a CAP hívására, hogy aktív-e vagy sem a játékos Game Pass-állapota, ami gyakorlatilag egy valós idejű szolgáltatást jelent. Ha nem tudunk ennyi idő alatt válaszolni, időtúllépés lép fel a CAP oldalán, és előfordulhat, hogy a játékos nem kapja meg a neki járó tartalmakat”
- Vasily Katraev
A Wild Rift nem a CAP rendszerét használja a játékos tárgyainak frissítéséhez, így közvetlenül kellett lekérdezni az előfizetési szolgáltatásból, hogy a játékos rendelkezik-e Game Pass-előfizetéssel. Az 50 ezredmásodperces késési követelmény miatt „odaköltöztették” a szolgáltatásukat a CAP-hoz és a világszerte négy adatközpontban működő fiókfelügyeleti szolgáltatásokhoz, hogy a lehető legközelebb legyenek a játékosokhoz.
Tesztüzem és ideiglenes megoldás az adatbázis korlátaira a bevezetéskor
Néhány nappal a tényleges bevezetés előtt tesztüzemet indítottunk, hogy működik-e a Riot-fiókok és az Xbox Game Pass összekapcsolása. Több súlyos hibára derült fény, amelyeket sikerült javítani a bevezetés napja előtt.
Aggodalmak merültek fel a jogosultságkezelő szolgáltatás felhasználói terhelésével kapcsolatban, amely hozzáférést biztosít a Riot játékaiban elérhető tartalmakhoz. A rendszer iszonyú sok olvasási kérést kapott, egyes helyeken akár percenként 800 000-et! A játékosnak járó előnyök feloldásához a jogosultságkezelő rendszernek küldött kérések egy további hívást váltanak ki, amely egy másik rendszerből kérdezi le a játékos Game Pass-állapotát, majd összesíti és visszaküldi a játék Game Pass-előnyeire vonatkozó adatokat. A megnövelt terhelés és a folyamat összetettsége miatt fennállt a veszély, hogy a szolgáltatás megbízhatatlanná válik vagy lassan válaszol, ami további problémákat váltott volna ki.
Ugyan sok belső terheléstesztet végeztek, de a csapat végül arra jutott, hogy csak egy teljes tesztüzemmel lehet kideríteni, elég szilárd-e a rendszer. A tesztüzemben az egész rendszert „bekapcsolták”, de az Xbox Game Pass-tartalmak nem jelentek meg a játékosoknál. Így a bevezetés előtt kiderült, hogy a rendszer mekkora terhelés alatt lesz valóságos körülmények között, és hogy milyen viselkedésre lehet számítani. A tesztüzem során fény derült egy konfigurációs hibára a kapcsolatkészletben, amely miatt sikertelen lett volna a bevezetés, és a játékosok nem jutottak volna hozzá a tartalmaikhoz.
Az adatbázis írási kapacitásával is gondok támadtak: a meglévő architektúra* nem tette lehetővé a felskálázást a partneri kapcsolat indulásakor várható megnövekedett forgalom kezelésére. A szolgáltatás jelentette terhelés kezelésére az egyik bevett megoldás a többlépcsős bevezetés. A csapat úgy döntött, hogy a marketing lassításával és ütemezésével fogják elérni, hogy a játékosok több hullámban érkezzenek. Így időben jobban szétterül a játékosok jelentkezése, a csapat pedig gondoskodik arról, hogy kellő kapacitás álljon rendelkezésre az egyes hullámok kiszolgálására, ahogy egyre több marketinganyag jelenik meg. A marketingesekkel való szoros együttműködésnek köszönhetően sosem volt szükség az írási kapacitás 50%-ánál többre.
*Azóta átalakítottuk az adatbázis műszaki hátterét, így képesek vagyunk a horizontális skálázásra a fiókváltások kezelésekor.

Műszaki tudás és hozzáállás
Az Xbox Game Pass-integráció a jelentős műszaki tudás mellett ún. soft skilleket is igényelt. Az alázatosság, a kíváncsiság és az együttműködés képessége mind jelentős szerepet játszottak a Microsofttal való együttműködésben és nyílt kommunikációban. Bár a projekt csak hat hónapig tartott, több százan vettek benne részt, rengeteg munkaórát öltek bele, új rendszerek használatát kellett elsajátítani. Több folyamat irányítását kellett átadni bizonyos témák szakértőinek, vagy irányt váltani menet közben, így nem fordulhatott elő, hogy a nem megfelelő ember vagy csapat vezeti a munkát.
„Igazából a projekthez való hozzáállás, a lelkesedés, az odaadás volt a döntő tényező”
- Nate Portner
A partneri kapcsolat rávilágított a Riot Games alapértékeinek fontosságára. A folyamat során végig az volt a legfontosabb kérdés, hogyan hat egy-egy változtatás a játékélményre. Egyértelműen a játékosok érdekét helyezték előtérbe, és a Riot egésze összefogott és együttműködött ezen a Riot összes játékát érintő projekten.
„Minden szakterület kiemelt figyelmet fordított arra, hogyan hatnak a döntések a játékosokra. Semmiképp sem szeretnénk téves elvárásokat kelteni a játékosokban”
- Matt Hawkins
Zárszó
Annyi munkánk volt a projekttel, amit nem lehet belesűríteni egyetlen technikai cikkbe, de reméljük, hogy sikerült valamennyire bemutatnunk a játékosplatform csapatot, és hogy mivel járultak hozzá a Riot/Xbox Game Pass partneri kapcsolat sikeréhez. Több száz munkatárs kemény munkájának és odaadó kitartásának köszönhető, hogy sikerült létrehozni és fenntartani ezt a felhasználói élményt.