# Prestasjoner for PlayDrop-spill

Deklarer vanlige og trinnvise prestasjoner med ikoner i catalogue.json, lås dem opp og rapporter fremgang med sdk.achievements.

Source: https://www.playdrop.ai/nb/create/learn/achievements

Prestasjoner markerer mål i spillet ditt, med et ikon og en beskrivelse som spillerne ser på PlayDrop. De fungerer for gjester og innloggede spillere.

## Deklarer prestasjoner

```json
{
  "achievements": [
    { "key": "first-win", "displayName": "First flag", "description": "Reach the flag once",
      "kind": "STANDARD", "icon": "achievements/first-win.png" },
    { "key": "collector", "displayName": "Collector", "description": "Collect 100 stars",
      "kind": "INCREMENTAL", "maxProgress": 100, "icon": "achievements/collector.png" },
    { "key": "secret-room", "displayName": "Secret room", "description": "Find the hidden room",
      "kind": "STANDARD", "hidden": true, "icon": "achievements/secret-room.png" }
  ]
}
```

- `key` følger samme format som nøkler for [topplister](https://www.playdrop.ai/nb/create/learn/leaderboards).
- `kind` er `STANDARD` (låses opp én gang) eller `INCREMENTAL` (låses opp når fremgangen når `maxProgress`, et positivt heltall).
- `icon` er en PNG i pakken. Bruk et tydelig, kvadratisk bilde som er lett å lese i små størrelser.
- `hidden: true` holder navnet og beskrivelsen hemmelig til prestasjonen er låst opp.

Publiserte nøkler kan ikke fjernes, og `kind`, `maxProgress` og `hidden` kan ikke endres. Avvikle en prestasjon med `"status": "RETIRED"`.

## Lås opp og rapporter fremgang

```js
await sdk.achievements.unlock("first-win");
await sdk.achievements.setProgressAtLeast("collector", starsCollected);

const { achievements } = await sdk.achievements.list();
const { achievement } = await sdk.achievements.get("collector");
```

- `setProgressAtLeast` tar totalen så langt, aldri en endring. Fremgangen øker bare, begrenses til `maxProgress` og låser opp prestasjonen der.
- Begge kallene returnerer `{ accepted, changed, unlocked, progress, unlockedAt, achievement }`; `changed` er false når ingenting nytt skjedde, så du kan vise din egen melding bare én gang.
- `list({ includeHiddenDefinitions: true, includeRetired: true })` tar med skjulte og avviklede definisjoner.

Lås opp bare under ekte spilling, aldri i forhåndsvisninger eller opptak. Uten noen spillerøkt fullføres kallene uten å bli lagret.

## Gode prestasjoner

Bland tidlige prestasjoner som lærer bort spillet, med langsiktige mål. Navngi handlingen, ikke belønningen: «Vinn uten å ta skade» sier hva spilleren skal gjøre. Et dusin gjennomtenkte prestasjoner slår hundre trivielle.

## Relaterte veiledninger

- [Topplister](https://www.playdrop.ai/nb/create/learn/leaderboards): Deklarer topplister i catalogue.json, send poengsummer med sdk.leaderboards og vis toppen og spillerens naboer. Poengtyper, grenser og oppdateringsregler.
- [Skylagring](https://www.playdrop.ai/nb/create/learn/cloud-saves): Lagre og hent fremgang med sdk.me.appData og updateAppData for gjester og innloggede spillere, med regler for skriving, forhåndsvisninger og spill uten nett.
- [catalogue.json](https://www.playdrop.ai/nb/create/learn/catalogue-json): catalogue.json-feltene PlayDrop-spill bruker: identitet, oppføring, spillmåter, flater, innlogging, Instant, forhåndslasting, medier, oversettelser, poeng og servere.
