# Cloud-Spielstände für PlayDrop-Spiele

Spielerfortschritt mit sdk.me.appData und sdk.me.updateAppData speichern und laden, für Gäste und Angemeldete; Regeln für Schreiben, Vorschau und Offline.

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

Cloud-Spielstände bewahren den Fortschritt jedes Spielers in deinem Spiel auf PlayDrop auf, sodass er ihn von der Website bis in die Apps begleitet. Gespeichert wird ein JSON-Objekt pro Spieler und Spiel; ein Server oder Multiplayer-Raum ist nicht nötig.

## Lesen und schreiben

Nach `init()` ist `sdk.me.appData` der gespeicherte Snapshot: `{ data, seq, ts_event, ts_arrival }`, oder `null` vor dem ersten Speichern. Lies dein Objekt aus `data`. Schreibe das ganze Objekt mit `updateAppData`; die Methode gibt den gespeicherten Snapshot zurück und aktualisiert `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
}
```

- Jeder Schreibvorgang ersetzt das gesamte gespeicherte Objekt: Behalte jedes Feld, das du noch brauchst.
- Führe Schreibvorgänge wie oben nacheinander aus, damit ein älterer Spielstand nie nach einem neueren ankommt, und halte die Warteschlange nach einem Fehler am Laufen.
- Zeige „Gespeichert“ erst an, wenn das Promise erfüllt ist. Eine Änderung an `appData.data` im Arbeitsspeicher speichert nichts.
- `appData` hat keine Methoden `get`, `set` oder `save`.

## Wann speichern

Speichere an Checkpoints, am Levelende und bei Käufen statt in jedem Frame. Speichere nie während Vorschauen oder Aufnahmen: Schreibe nur, wenn `sdk.host.phase` gleich `play` ist. Halte einen Spielstand klein und versioniere ihn mit einem eigenen Feld wie `saveVersion: 2`, damit eine spätere Spielversion ihn migrieren kann.

## Gäste und angemeldete Spieler

Du musst `sdk.me.isLoggedIn` vor dem Speichern nicht prüfen: Auch PlayDrop-Gäste behalten ihre Spielstände. Ein Spieler ganz ohne Sitzung behält den Spielstand für diesen Besuch im Arbeitsspeicher; ein erfolgreicher Schreibvorgang beweist also nicht, dass der Spielstand in der Cloud angekommen ist. Verwende `isLoggedIn` nur für Funktionen, die ein echtes Konto brauchen, etwa Käufe und gehosteten Multiplayer.

## Offline

Im Browser brauchen Spielstände eine Verbindung, und es gibt keine Offline-Warteschlange: Lass das Spiel bei einem Fehler weiterlaufen und versuche es am nächsten Checkpoint erneut. Hosts, die Unterstützung für Gerätedaten angeben, etwa offlinefähige PlayDrop-Apps, behalten Spielstände auf dem Gerät und synchronisieren sie, sobald sie online sind.

## Was Spielstände nicht sind

Spielstände sind privat für einen Spieler und ein Spiel. Sie sind getrennt von [Bestenlisten](https://www.playdrop.ai/de/create/learn/leaderboards) und [Erfolgen](https://www.playdrop.ai/de/create/learn/achievements), die eigene APIs haben und auf PlayDrop erscheinen. Zustand, den Spieler miteinander teilen, etwa ein Match oder eine Welt, gehört auf einen [Spielserver](https://www.playdrop.ai/de/create/learn/game-servers) in die MongoDB-Collections deines Spiels.

## Testen

Spielstände gehören zu einem hochgeladenen Spiel. Lade mindestens einmal eine private Version hoch und teste dann über die `url` aus dem Beleg oder im lokalen Dev-Rahmen, der unter [Aus deiner KI-App veröffentlichen](https://www.playdrop.ai/de/create/learn/mcp-publishing) beschrieben ist.

## Verwandte Anleitungen

- [Bestenlisten](https://www.playdrop.ai/de/create/learn/leaderboards): Bestenlisten in catalogue.json deklarieren, Punkte mit sdk.leaderboards senden, Spitzenplätze und Nachbarn des Spielers zeigen. Punktarten, Grenzen, Update-Regeln.
- [Erfolge](https://www.playdrop.ai/de/create/learn/achievements): Standard- und Fortschrittserfolge mit Symbolen in catalogue.json deklarieren, freischalten und Fortschritt mit sdk.achievements melden.
- [Echtzeit-Spielserver](https://www.playdrop.ai/de/create/learn/game-servers): Gehosteter Colyseus-0.17-Server mit MongoDB-Datenbank für dein Spiel: Verbindung per SDK aus dem Browser, Test mit zwei Spielern und die Grenzen.
