Steamworks-dokumentaatio
Steamin pelihaku ja aulat

Yleiskatsaus

Steamin vertaispelihaku pohjautuu aulan toiminta-ajatukseen. Aula on chat-huoneelta näyttävä kokonaisuus, joka toimii Steamin taustapalvelimilla. Käyttäjät voivat luoda uuden aulan, liittää aulaan tietoja ja etsiä auloja näiden tietojen perusteella. Auloihin voi liittyä, ja samassa aulassa olevien käyttäjien kanssa voi jakaa tietoja. Yhdessä aulassa voi olla jopa 250 käyttäjää, vaikkakin useimmissa moninpeleissä pelaajia on 2–16. Taitopohjainen pelihaku on rakennettu tämän järjestelmän päälle.

Steamin vertaispelihaun ohjelmointirajapinta on joukko toimintoja, joilla käyttäjät voivat löytää toisiaan peliseuraksi. Pelihakutoiminnot sijaitsevat ISteamMatchmaking-ohjelmointirajapinnassa, joka sisältää lisätietoja kunkin toiminnon muuttujista. Aulat yksilöidään Steam ID:llä käyttäjien tai pelipalvelinten tapaan. Steamworks-esimerkissä on täydellinen ja täysin toimiva aulojen toteutus.

Pelihakuprosessin kulku

Ryhmien yleinen kokoamismalli on seuraavanlainen:
  1. Käyttäjä valitsee haluavansa pelata moninpeliä ja moninpelin tyypin (säännöt, skenen jne.).
  2. Peli hakee aulahaun ohjelmointirajapinnalla auloja, joilla on samanlaiset säännöt.
  3. Jos aula löytyy, peli liittyy aulaan. Jos aulaa ei löydy, peli luo uuden aulan.
  4. Käyttäjät jäävät aulaan, kunnes mukana on riittävä määrä pelaajia pelin aloittamiseksi. Aulan jäsenten välillä lähetetään tietoja esimerkiksi valittavista hahmoista tai muista käyttäjäkohtaisista asetuksista. Jos aula sisältää valvottavia sääntöjä, kuten yksi käyttäjä voi kerrallaan pelata tiettyä hahmoa, sen voi suorittaa vain aulan omistaja.
  5. Aulassa voi olla käyttöliittymä. Jos aulassa on käyttöliittymä, aulan jäsenet voivat lähettää toisillensa keskusteluviestejä. Ääntä voi myös lähettää, mutta siihen on käytettävä Steam-verkkoyhteys-ohjelmointirajapintaa.
  6. Kun peli on valmiina käytettäväksi, kaikki käyttäjät liittyvät pelipalvelimelle tai muodostavat yhteyden pelin isäntään ja poistuvat sen jälkeen aulasta. Kun kaikki käyttäjät ovat poistuneet aulasta, se poistetaan automaattisesti.

Aulojen hakeminen

Jotta pelisi hakee aulaa, sinun tulee kutsua aulaluetteloa:
ISteamMatchmaking::RequestLobbyList
Toiminto on asynkroninen palauttaen käsittelyyn SteamAPICall_t-kutsumanimen, jota voit käyttää pyynnön tilan seurantaan. Kutsun suorittaminen voi kestää 300 millisekunnista 5 sekuntiin ja aikakatkaisu on 20 sekuntia, vaikka kaikki riippuu käyttäjän yhteydestä Steamin taustapalvelimelle.
Palautuneiden tulosen lukumäärä on pelihaun LobbyMatchList_t kutsutuloksia, joita voit sen jälkeen käyttää ISteamMatchmaking::GetLobbyByIndex niiden iteroinnissa ja tunnusten hankkimisessa.
.
Palutettavia tuloksia voi olla jopa 50, mutta yleensä ei paria enempää. Tulokset palautetaan maantieteellisen välimatkan järjestyksessä ja minkä tahansa suodatusmääritysten perusteella. Täysiä auloja ei oletuksena palauteta, ja välimatkasuodatuksen arvona on k_ELobbyDistanceFilterDefault (lähellä). Jos haluat lisätä suodatusasetuksia, kutsu yksi tai useampia suodatusominaisuuksia ennen kutsuasi RequestLobbyList:

Aulan luominen

Jos käyttäjälle ei löydy valmista aulaa, hän yleensä luo aulan. Kutsu
ISteamMatchmaking::CreateLobby ja odota aulan valmistumista. Kutsutulos ilmoittaa, onnistuiko aulan luominen. Jos onnistui, se palauttaa aulan Steam ID:n LobbyCreated_t -rakenteena, jota voi käyttää aulan metatietojen määrittämiseen. Ensimmäinen asia aulan luomisen jälkeen on määrittää sen tiedot, jotta muut peliasiakkaat voivat hakea sitä (ks. alla).

Aulaan liittyminen

Kun olet haulla tai ystävän vihjeellä löytänyt hyvän aulan, voit käyttää ISteamMatchmaking::JoinLobby-kutsua ja odottaa LobbyEnter_t-kutsutulosta. Kun olet aulassa, aulatietojen ohjelmointirajapinnan avulla voit hankkia tietoja aulasta ja selvittää, mitä kannattaisi näyttää (jos näytettävää on).

Kun käyttäjä liittyy aulaan tai poistuu siitä, LobbyChatUpdate_t-takaisinkutsu julkaistaan kaikille aulan jäsenille, myös omistajalle.

Voit iteroida senhetkiset aulassa olevat jäsenet käyttämällä kutsuja:

Jos haluat lisätietoja aulan toisesta käyttäjästä, sinun on käytettävä kavereiden ohjelmointirajapintaa. Lisätietoja: Kaverit, kutsut ja aulat.

Aulan metatiedot

Aulan kuvaustietojen avulla voit määrittää aulan tilan, mukaan lukien nimen, nykyisen kartan, pelitilan, pelin nykytilanteen ja muita haluamiasi tietoja.

Käyttäjä saa automaattisesti uusimmat tiedot kaikista auloista, joissa hän on jäsenenä. Käyttäjä saa hakutulosten palauttamat aulatiedot siltä hetkeltä, kun haku tehtiin. Jos kyseessä on kaverin aula, aulatietoja ei voi katsoa, ennen kuin kutsu ISteamMatchmaking::RequestLobbyData on tehty ja käsitelty onnistuneesti.

Jos aulan tietoja on muutettu aulan sisällä, kaikki sen jäsenet saavat LobbyDataUpdate_t-takaisinkutsun. Samalla takaisinkutsulla saat tiedon kutsun ISteamMatchmaking::RequestLobbyData valmistumisesta.

Näillä toiminnoilla voit noutaa ja määrittää aulatietoja. Vain aulan omistaja voi määrittää tai poistaa aulatietoja.

Näillä toiminnoilla voit iteroida kuvaustietoja (yleensä vain vianetsintätarkoituksessa):

Aulassa jäsenet voivat määrittää myös omia kuvaustietojaan, joiden päivityksiä muut jäsenet voivat vastaanottaa. Se onnistuu näillä toiminnoilla.

Aulan sisäinen viestintä

Voit lähettää tietoja aulan sisällä (chat-viestejä, pelinaloitussignaaleja jne.) kutsulla ISteamMatchmaking::SendLobbyChatMsg. Kutsu lähettää yksinkertaisen binaariviestin kaikille aulassa oleville käyttäjille. Aulan jäsenten on kuunneltava takaisinkutsua ISteamMatchmaking::LobbyChatMsg_t. Takaisinkutsun vastaanottamisen jälkeen voi kutsulla ISteamMatchmaking::GetLobbyChatEntry noutaa viestin sisällön.

Kaverit, kutsut ja aulat

Voit saada selville kaikki aulat, joissa käyttäjän kaverit ovat, käyttämällä kaverien ohjelmointirajapintaa:
int cFriends = SteamFriends()->GetFriendCount( k_EFriendFlagImmediate ); for ( int i = 0; i < cFriends; i++ ) { FriendGameInfo_t friendGameInfo; CSteamID steamIDFriend = SteamFriends()->GetFriendByIndex( i, k_EFriendFlagImmediate ); if ( SteamFriends()->GetFriendGamePlayed( steamIDFriend, &friendGameInfo ) && friendGameInfo.m_steamIDLobby.IsValid() ) { // friendGameInfo.m_steamIDLobby on sopiva aula, johon voit liittyä tai hakea metatiedot tällä: RequestLobbyData() } }

Voit kutsua kaverin aulaan kutsulla ISteamMatchmaking::InviteUserToLobby
Käyttäjä vastaanottaa chat-ikkunan, jossa on linkki peliin liittymiseksi. Jos käyttäjä klikkaa linkkiä eikä kyseinen peli ole käynnissä, linkki käynnistää pelin komentorivillä:
+connect_lobby <64-bit lobby id>

Jos käyttäjä on jo pelissä, julkaistaan ISteamFriends::GameLobbyJoinRequested_t-takaisinkutsu, joka sisältää aulan Steam-tunnuksen, johon käyttäjä haluaa liittyä. Pelistäsi riippuu, noudattaako se kutsua.

Jos haluat, että käyttäjä valitsee aulaan kutsuttavan käyttäjän kaveriluettelosta, voit käyttää ISteamFriends::ActivateGameOverlayInviteDialog-kutsua.
Se aktivoi Steamin pelinaikaisen yhteisön, joka on suunniteltu sitä varten, että kaverit voi kutsua senhetkiseen aulaan.

Varmentaminen

Steamin auloissa olevat käyttäjät on varmennettu jo täysin Steamin taustajärjestelmällä. Pelin ei tarvitse suorittaa ylimääräisiä vaiheita aulan käyttäjien todentamiseksi, jollei ole tarvetta tarkistaa, onko käyttäjällä VAC-kielto (tutustu Valven huijauksenestojärjestelmään). Jos käyttäjä yrittää kirjautua sisään toisesta sijainnista saman tilin kautta, hänen aiempi kirjautumisensa poistetaan automaattisesti mahdollisista auloista.

Lopputoimet

Kun peli on alkanut, jokainen käyttäjä voi poistua aulasta kutsumalla
ISteamMatchmaking::LeaveLobby
Kun kaikki käyttäjät ovat poistuneet, taustajärjestelmä poistaa aulan automaattisesti.

Aulavinkit

  • Luo auloja vain silloin, kun niitä tarvitaan. Kun käyttäjä kutsuu esimerkiksi kaverin pelaamaan tai käynistää manuaalisesti toiminnon, joka edellyttää aulaa, luo yksi!
  • Älä päivitä aulojen metatietoja liian tiuhaan! Lisää metatietoja sekä arvoja, joita käytetään hauissa (esimerkiksi pelityyppi tai pelitilanne). Sinulla ei tarvitse olla pelaajien lukumääriä, koska aulan hakutoiminto etsii auloja, joissa on vapaita paikkoja.
  • Älä liity auloihin hakeaksesi niiden metatietoja. Aulojen metatiedot voidaan ladata erikseen kaikista auloista, joita pelisi voi käyttää joko näyttääkseen käyttäjälle auloista luettelon, josta käyttäjä voi valita, tai peli voi automaattisesti päättää, mihin hakutuloksiin se haluaa liittyä.

Onko sinulla lisää kysyttävää?

Esitä kysymyksiä Steamin pelihakua ja auloja koskevassa keskustelupalstalla.