# Saavutukset PlayDrop-peleihin

Määrittele tavalliset ja kasvavat saavutukset kuvakkeineen catalogue.json-tiedostossa, avaa ne ja raportoi edistyminen sdk.achievements-rajapinnalla.

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

Saavutukset merkitsevät pelisi tavoitteita kuvakkeella ja kuvauksella, jotka pelaajat näkevät PlayDropissa. Ne toimivat sekä vieraille että kirjautuneille pelaajille.

## Määrittele saavutukset

```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` noudattaa samaa muotoa kuin [tulostaulujen](https://www.playdrop.ai/fi/create/learn/leaderboards) avaimet.
- `kind` on `STANDARD` (avataan kerran) tai `INCREMENTAL` (avataan, kun edistyminen saavuttaa arvon `maxProgress`, joka on positiivinen kokonaisluku).
- `icon` on paketissa oleva PNG-kuva. Käytä selkeää neliökuvaa, joka erottuu pienenäkin.
- `hidden: true` pitää nimen ja kuvauksen salassa, kunnes saavutus avataan.

Julkaistuja avaimia ei voi poistaa, eikä arvoja `kind`, `maxProgress` ja `hidden` voi muuttaa. Poista saavutus käytöstä asetuksella `"status": "RETIRED"`.

## Avaa saavutuksia ja raportoi edistyminen

```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` ottaa tähänastisen kokonaismäärän, ei koskaan lisäystä. Edistyminen vain kasvaa, rajoittuu arvoon `maxProgress` ja avaa saavutuksen siinä kohdassa.
- Molemmat kutsut palauttavat `{ accepted, changed, unlocked, progress, unlockedAt, achievement }`; `changed` on false, kun mitään uutta ei tapahtunut, joten voit näyttää oman ilmoituksesi vain kerran.
- `list({ includeHiddenDefinitions: true, includeRetired: true })` sisältää myös piilotetut ja käytöstä poistetut määritelmät.

Avaa saavutuksia vain oikean pelaamisen aikana, ei koskaan esikatseluissa tai kaappauksissa. Ilman pelaajaistuntoa kutsut valmistuvat tallentumatta.

## Hyvät saavutukset

Yhdistä alkuvaiheen saavutuksia, jotka opettavat pelin, pitkän aikavälin tavoitteisiin. Nimeä teko, älä palkintoa: ”Voita ottamatta vahinkoa” kertoo, mitä pitää tehdä. Tusina harkittua saavutusta voittaa sata vähäpätöistä.

## 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.
- [Pilvitallennukset](https://www.playdrop.ai/fi/create/learn/cloud-saves): Tallenna ja lataa edistyminen sdk.me.appData- ja updateAppData-rajapinnoilla vieraille ja kirjautuneille sekä kirjoitus-, esikatselu- ja offline-säännöt.
- [catalogue.json](https://www.playdrop.ai/fi/create/learn/catalogue-json): PlayDrop-pelien catalogue.json-kentät: tunniste, pelisivu, pelitavat, näkymät, kirjautuminen, Instant, esilataus, media, käännökset, pisteet ja palvelimet.
