Player accounts

Anna pelisi pelaajille tili, joka seuraa heitä jokaisessa Aukimilla tehdyssä pelissä, ja tallennukset, jotka siirtyvät laitteesta toiseen, joko Aukimin palvelussa tai omalla palvelimellasi.

Yhdellä lauseella#

Pelaaja kirjautuu kerran osoitteessa play.aukimi.com ja löytää saman tilin jokaisesta Aukimilla tehdystä pelistä, tallennukset mukaan lukien. Pelisi pyytää tiliä; se ei koskaan käsittele salasanaa.

Miksi pelisi ei koskaan näe salasanaa#

Kuka tahansa voi julkaista pelin. Peli, joka pyytäisi Aukimi-salasanaa, olisi täysin uskottava kalastelusivu, eikä mikään määrä hyviä aikeita sinun puoleltasi muuttaisi sitä, mitä joku toinen kehittäjä voisi julkaista.

Siksi salasana kirjoitetaan osoitteessa play.aukimi.com eikä missään muualla. Pelisi kutsuu PlayerLoginAsync()-komentoa, selainikkuna avautuu Aukimin omilla väreillä, pelaaja hyväksyy, ja ikkuna antaa pelillesi tokenin.

Tuo token on myönnetty vain pelillesi. Peliin A myönnettyä tokenia, joka esitetään pelille B, ei hyväksytä, ei jätetä huomiotta, vaan hylätään. Se on juuri se pointti: tili on jaettu pelien kesken, pääsy ei ole. Ilman tätä yksi haitallinen peli voisi lukea pelaajan tallennukset kaikissa muissa.

Mitä saat tietää pelaajasta#

Kaksi asiaa, ei enempää:

Saat tämänEt koskaan saa tätä
Näyttönimen (PlayerName())Sähköpostiosoitetta
Läpinäkymättömän id:n, eri jokaisessa pelissä (PlayerID())Mitään, mikä tunnistaa heidät muualla

Id vaihtuu pelistä toiseen tarkoituksella. Kaksi kehittäjää, jotka vertaavat pelaajalistojaan, eivät voi tietää katsovansa samaa henkilöä. Se pitää sinut myös käsittelijänä, ei rekisterinpitäjänä, tälle datalle, mikä on juridinen ero, ei koristeellinen.

Mikään ei tuki peliluuppia#

Jokainen verkkoon puhuva komento palauttaa tehtävän numeron, ei koskaan tulosta. Luuppisi jatkaa pyörimistä kuudessakymmenessä ruudussa sekunnissa, kun pyyntö on matkalla, ja juuri siksi peli ei voi yksinkertaisesti "odottaa palvelinta".

job = PlayerLoginAsync()

Sitten, kerran per ruutu:

etat$ = PlatformJobState(job)
if etat$ = "done"
    resultat$ = PlatformJobResult(job)
    PlatformJobRelease(job)
endif
if etat$ = "error"
    Print(PlatformJobError(job))
    PlatformJobRelease(job)
endif

Vapauta tehtävä, kun olet lukenut sen. Tehtävä, jota et koskaan vapauta, pitää tuloksensa muistissa loppuistunnon ajan. Mikään ei hajoa, mikään ei varoita sinua, ja vuoto näkyy vasta pitkässä pelisessiossa.

Pelaaminen ilman tiliä#

Kaikki eivät halua rekisteröityä ennen pelin kokeilemista. PlayerGuestAsync(name$) luo tilin ilman sähköpostia, säilytettynä tässä selaimessa.

Se on oikea tili: se tallentaa, se lataa, ja se voidaan vahvistaa myöhemmin, pelaaja lisää sähköpostin ja salasanan, ja olemassa olevat tallennukset seuraavat mukana liikkumatta.

Rehellinen kompromissi: selaimen sivustotietojen tyhjentäminen menettää tämän tilin, eikä sitä voi palauttaa. Se on hinta "ei rekisteröitymistä" -tavasta, ja pelisi kannattaa sanoa se ääneen sen sijaan, että pelaaja saisi huomata sen itse. PlayerIsGuest() on olemassa juuri tuota lausetta varten.

Tallentaminen#

job = PlayerSaveAsync(donnees$)
job = PlayerLoadAsync()

Tallennus on omanmuotoista JSON:ia, säilytettynä paria (tämä pelaaja, tämä peli) vasten. Se seuraa heitä toiseen selaimeen, toiseen koneeseen, toiseen alustaan.

Muutamalle arvolle SetCloudDataVariable() ja CloudDataVariable() ovat yksinkertaisempia, ei tehtävää, ei JSON:ia. Tarkista CloudDataAllowed() ensin: se palauttaa 0, kun kukaan ei ole kirjautunut sisään, ja kirjoittaminen silti menisi hiljaa mihinkään.

Ruudun piirtäminen#

Aukimi ei piirrä mitään kirjautumislomaketta. Moottorin kokoama lomake näyttäisi aina web-sivulta, joka on pudotettu pikselitaidepelin päälle, ja se olisi ainoa osa peliäsi, jota et voisi tyylitellä uudelleen.

Sinä piirrät sen. Ainoa osa, jonka täytyy tulla selaimesta, on tekstinsyöttö, joten CreateEditBox() antaa sinulle todellisen syöttökentän, jonka sijoitat itse:

CreateEditBox(1)
EditBoxPosition(1, 20, 42)
EditBoxSize(1, 60, 8)
nom$ = EditBoxText(1)

Player Account -demo Enginen esimerkkilistassa on täysi toimiva ruutu noin sadassa rivissä. Avaa se, lue se, ja korvaa sitten jokainen Print() omalla kuvitusmateriaalillasi.

Ennen kuin mikään tästä toimii#

Peli täytyy ilmoittaa Aukimi-tililtäsi, kohdassa My games (aukimi.com/app/games): nimi, osoite, jossa sitä voi pelata, ja osoitteet, joihin pelisi saa palata. Siihen asti PlayerAvailable() palauttaa 0, ja hyvä peli sanoo "tilit eivät ole käytettävissä" sen sijaan, että se näyttäisi jumittuvan.

Sama ruutu on paikka, jossa näet kuka pelaa. Lue luvut sellaisina kuin ne ovat: se laskee kirjautuneet pelaajat ja aloitetut sessiot, ei koskaan pelattuja pelejä. Peli, joka ei koskaan pyydä ketään kirjautumaan, ei näytä siellä mitään, ja ruutu sanoo niin sen sijaan, että se näyttäisi hiljaisen nollan.

Oman tilipalvelimen käyttäminen#

Kaikki yllä puhuu Aukimin tilipalvelulle. Jos isännöit peliäsi omalla palvelimellasi, samat kaksitoista komentoa voivat puhua sinun palvelullesi sen sijaan, eikä skriptisi muutu yhtään riviä.

Enginessä: paneeli Multiplayer → osio Player accounts → valitse My own server → täytä yksi kenttä, palvelimesi osoite. Tuo osoite on kohtauksen asetus, joten kaksi peliä voi käyttää kahta eri palvelua.

Kaksi tapaa kirjata pelaaja sisään#

Valinta tehdään skriptissäsi, ei asetuksessa. Molemmat muodot ovat olemassa riippumatta siitä, mihin palvelimeen osoitat.

Ikkuna (jonka jo tunnet)#

job = PlayerLoginAsync()

Ikkuna avautuu, pelaaja kirjautuu siellä, ja se antaa pelillesi oikeuden toimia hänen puolestaan. Aukimin palvelulla tuo ikkuna on play.aukimi.com. Omalla palvelimella tuo sivu on sinun rakennettavasi.

Suoraan, käyttäjätunnuksella ja salasanalla#

job = PlayerLoginAsync(username$, password$)

Ei ikkunaa. Pelisi lukee, mitä pelaaja kirjoitti omalle ruudullesi, ja lähettää sen palvelimellesi. Yksinkertaisempi kirjoittaa, ja se antaa sinun säilyttää pelisi ilmeen alusta loppuun.

Varoitus: tässä muodossa salasana kulkee pelistäsi palvelimellesi sellaisenaan kirjoitettuna. Kaksi seurausta, molemmat kiinteitä: palvelimesi osoitteen täytyy alkaa https://-etuliitteellä (vain testi omalla koneellasi on vapautettu tästä), ja tämä muoto on tarkoitettu vain palvelimelle, jonka omistat itse.

play.aukimi.com hylkää sen, tarkoituksella. Aukimi ei koskaan halua olla asemassa, jossa se näkee pelaajan salasanan, eikä minkään pelin, jota et ole itse kirjoittanut, pitäisi olla siinä asemassa.

Kaksi valintaa ovat riippumattomia asetuksesta: itse tehty palvelin voi täysin hyvin tarjota vain ikkunan eikä koskaan hyväksyä salasanaa suoraan.

Konkreettinen esimerkki#

Peli, jolla on oma "Sign in" -ruutu: kaksi pelin piirtämää tekstikenttää, yksi painike, ja tämä painikkeen takana.

job = PlayerLoginAsync(typedName$, typedPassword$)
DO
    etat$ = PlatformJobState(job)
    if etat$ = "done"
        PlatformJobRelease(job)
        Print("Welcome " + PlayerName())
    endif
    if etat$ = "error"
        PlatformJobRelease(job)
        Print(PlayerLastError())
    endif
    Sync()
LOOP

Kaikki kirjautumisen jälkeen on identtistä sivun loppuosan kanssa: PlayerSaveAsync, PlayerLoadAsync, PlayerName ja muut eivät tiedä, eivätkä välitä, kumpi palvelin vastasi.

Mitä palvelimesi on vastattava#

Neljä osoitetta vaaditaan, tarjositpa kumpaa kirjautumista tahansa:

Mitä vartenMitä peli odottaa
Pelaa vieraanaAnna takaisin tili ilman sähköpostia
Kuka tämä pelaaja onNäyttönimi, id, onko vieras
Lue tallennusTallennettu data
Kirjoita tallennusTallenna se, mitä peli lähettää

Sitten, riippuen siitä, mitä valitset tarjota:

  • Ikkunamuoto tarvitsee kirjautumissivun palvelimellasi, joka kertoo pelille, kuka kirjautui, kun se on valmis.
  • Suora muoto tarvitsee vielä yhden osoitteen, joka ottaa vastaan käyttäjätunnuksen ja salasanan ja vastaa kyllä tai ei.

Tarkat osoitteet, kunkin vastauksen muoto ja virhekoodit ovat repositoriossa, tiedostossa docs/engine-player-accounts.md. Se tiedosto on sopimus; tämä sivu on kartta.

Huomio: mikään tästä ei toimi natiivissa viennissä. Player*-komennot tarvitsevat palvelimen, jolle puhua, ja selaimen, jonka läpi puhua, eikä natiivilla buildilla ole kumpaakaan.

Komennot#

KomentoMitä se tekee
PlayerAvailable()Onko tilipalvelu määritetty tälle pelille
PlayerLoginAsync()Avaa kirjautumisikkunan. Palauttaa tehtävän
PlayerLoginAsync(user, pass)Kirjaa sisään suoraan, vain omalla palvelimellasi. Palauttaa tehtävän
PlayerGuestAsync()Luo tilin ilman sähköpostia. Palauttaa tehtävän
PlayerLoggedIn()Onko joku kirjautuneena juuri nyt
PlayerName()Hänen näyttönimensä
PlayerID()Hänen läpinäkymätön id:nsä, tälle pelille ominainen
PlayerIsGuest()Onko tämä tili ilman sähköpostia
PlayerSaveAsync()Kirjoittaa tallennuksen. Palauttaa tehtävän
PlayerLoadAsync()Lukee sen takaisin. Palauttaa tehtävän
PlayerRefreshAsync()Uusii tokenin ennen sen vanhenemista
PlayerLogout()Kirjaa ulos tällä laitteella
PlayerLastError()Miksi viimeisin kutsu epäonnistui