# Pilvitallennukset PlayDrop-peleihin

Tallenna ja lataa edistyminen sdk.me.appData- ja updateAppData-rajapinnoilla vieraille ja kirjautuneille sekä kirjoitus-, esikatselu- ja offline-säännöt.

Source: https://www.playdrop.ai/fi/create/learn/cloud-saves

Pilvitallennukset säilyttävät jokaisen pelaajan edistymisen pelissäsi PlayDropissa, joten se seuraa pelaajaa verkkosivustolta sovelluksiin. Jokaista pelaajaa ja peliä kohden tallennetaan yksi JSON-olio; palvelinta tai moninpelihuonetta ei tarvita.

## Lue ja kirjoita

`init()`-kutsun jälkeen `sdk.me.appData` on tallennettu tilannevedos: `{ data, seq, ts_event, ts_arrival }`, tai `null` ennen ensimmäistä tallennusta. Lue oliosi kentästä `data`. Kirjoita koko olio kutsulla `updateAppData`, joka palauttaa tallennetun tilannevedoksen ja päivittää arvon `sdk.me.appData`.

```js
const sdk = await playdrop.init();
let progress = { level: 1, coins: 0, ...(sdk.me.appData?.data ?? {}) };
let queue = Promise.resolve();

// Resolves with the saved snapshot; rejects when the save failed.
function save(changes) {
  progress = { ...progress, ...changes };
  const snapshot = { ...progress };
  const attempt = queue.then(() => sdk.me.updateAppData(snapshot));
  queue = attempt.catch(() => {}); // a failed save must not block the next one
  return attempt;
}

try {
  await save({ level: 2 });
  showSaved();
} catch (error) {
  showSaveError(); // progress stays in memory; the next save sends it again
}
```

- Jokainen kirjoitus korvaa koko tallennetun olion: säilytä kaikki kentät, joita vielä tarvitset.
- Suorita kirjoitukset peräkkäin yllä olevan mallin mukaan, jotta vanhempi tallennus ei koskaan päädy uudemman jälkeen, ja pidä jono käynnissä epäonnistumisen jälkeen.
- Näytä ”Tallennettu” vasta, kun lupaus on täyttynyt. Arvon `appData.data` muuttaminen muistissa ei tallenna mitään.
- `appData`-oliolla ei ole metodeja `get`, `set` tai `save`.

## Milloin tallentaa

Tallenna tarkistuspisteissä, tasojen lopussa ja ostojen yhteydessä, älä joka ruudulla. Älä koskaan tallenna esikatselujen tai kaappausten aikana: kirjoita vain, kun `sdk.host.phase` on `play`. Pidä tallennus pienenä ja versioi se omalla kentälläsi, kuten `saveVersion: 2`, jotta pelin myöhempi versio voi siirtää sen uuteen muotoon.

## Vieraat ja kirjautuneet pelaajat

Sinun ei tarvitse tarkistaa arvoa `sdk.me.isLoggedIn` ennen tallentamista: myös PlayDropin vieraat säilyttävät tallennuksensa. Pelaaja, jolla ei ole lainkaan istuntoa, säilyttää tallennuksen muistissa kyseisen käynnin ajan, joten valmistunut kirjoitus ei todista, että tallennus päätyi pilveen. Käytä arvoa `isLoggedIn` vain ominaisuuksiin, jotka vaativat oikean tilin, kuten ostoihin ja isännöityyn moninpeliin.

## Offline

Selaimessa tallennukset vaativat verkkoyhteyden, eikä offline-jonoa ole: jatka pelaamista epäonnistumisen jälkeen ja yritä uudelleen seuraavassa tarkistuspisteessä. Laitedataa tukevat isännät, kuten offline-tilaa tukevat PlayDrop-sovellukset, säilyttävät tallennukset laitteella ja synkronoivat ne, kun yhteys on käytettävissä.

## Mitä tallennukset eivät ole

Tallennukset ovat yksityisiä yhdelle pelaajalle ja yhdelle pelille. Ne ovat erillään [tulostauluista](https://www.playdrop.ai/fi/create/learn/leaderboards) ja [saavutuksista](https://www.playdrop.ai/fi/create/learn/achievements), joilla on omat rajapintansa ja jotka näkyvät PlayDropissa. Pelaajien välillä jaettu tila, kuten ottelu tai maailma, kuuluu [pelipalvelimelle](https://www.playdrop.ai/fi/create/learn/game-servers) pelisi MongoDB-kokoelmiin.

## Testaa

Tallennukset kuuluvat palveluun ladattuun peliin. Lataa yksityinen versio vähintään kerran ja testaa sitten kuittauksen `url`-osoitteesta tai paikallisesta Dev-kehyksestä, joka kuvataan sivulla [julkaiseminen tekoälysovelluksesta](https://www.playdrop.ai/fi/create/learn/mcp-publishing).

## Liittyvät oppaat

- [Tulostaulut](https://www.playdrop.ai/fi/create/learn/leaderboards): Määrittele tulostaulut catalogue.jsonissa, lähetä pisteet sdk.leaderboards-rajapinnalla ja näytä kärki ja pelaajan naapurit. Pistetyypit, rajat ja päivityssäännöt.
- [Saavutukset](https://www.playdrop.ai/fi/create/learn/achievements): Määrittele tavalliset ja kasvavat saavutukset kuvakkeineen catalogue.json-tiedostossa, avaa ne ja raportoi edistyminen sdk.achievements-rajapinnalla.
- [Reaaliaikaiset pelipalvelimet](https://www.playdrop.ai/fi/create/learn/game-servers): Aja pelillesi isännöityä Colyseus 0.17 -palvelinta MongoDB-tietokannalla, yhdistä selaimesta SDK:lla, testaa kahdella pelaajalla ja tunne rajat.
