# Succès pour les jeux PlayDrop

Déclarez des succès standard et progressifs avec icônes dans catalogue.json, débloquez-les et signalez la progression avec sdk.achievements.

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

Les succès marquent des objectifs dans votre jeu, avec une icône et une description que les joueurs voient sur PlayDrop. Ils fonctionnent pour les invités comme pour les joueurs connectés.

## Déclarez des succès

```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` suit le même format que les clés de [classement](https://www.playdrop.ai/fr/create/learn/leaderboards).
- `kind` vaut `STANDARD` (débloqué une seule fois) ou `INCREMENTAL` (débloqué quand la progression atteint `maxProgress`, un entier positif).
- `icon` est un PNG inclus dans le paquet. Utilisez une image carrée et nette, lisible en petit format.
- `hidden: true` garde le nom et la description secrets jusqu’au déblocage.

Les clés publiées ne peuvent pas être supprimées, et `kind`, `maxProgress` et `hidden` ne peuvent pas changer. Retirez un succès avec `"status": "RETIRED"`.

## Débloquez et signalez la progression

```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` prend le total atteint jusqu’ici, jamais un incrément. La progression ne fait qu’augmenter, est plafonnée à `maxProgress` et débloque le succès à ce seuil.
- Les deux appels renvoient `{ accepted, changed, unlocked, progress, unlockedAt, achievement }` ; `changed` vaut false quand rien de nouveau ne s’est produit, ce qui vous permet d’afficher votre propre notification une seule fois.
- `list({ includeHiddenDefinitions: true, includeRetired: true })` inclut les définitions cachées et retirées.

Ne débloquez des succès que pendant une vraie partie, jamais dans les aperçus ni les captures. Sans aucune session de joueur, les appels aboutissent sans que rien soit enregistré.

## De bons succès

Mélangez des succès précoces qui apprennent à jouer et des objectifs à long terme. Nommez l’action, pas la récompense : « Gagner sans subir de dégâts » dit quoi faire. Une douzaine de succès bien pensés valent mieux qu’une centaine de succès anodins.

## Guides associés

- [Classements](https://www.playdrop.ai/fr/create/learn/leaderboards): Déclarez des classements dans catalogue.json, soumettez des scores avec sdk.leaderboards, affichez le top et les voisins du joueur : types de score, limites, règles.
- [Sauvegardes cloud](https://www.playdrop.ai/fr/create/learn/cloud-saves): Enregistrez et chargez la progression avec sdk.me.appData et sdk.me.updateAppData, pour invités et joueurs connectés : écritures, aperçus et hors ligne.
- [catalogue.json](https://www.playdrop.ai/fr/create/learn/catalogue-json): Les champs catalogue.json des jeux PlayDrop : identité, fiche, modes de jeu, surfaces, connexion, Instantané, préchargement, médias, traductions, scores et serveurs.
