# PlayDrop oyunları için başarımlar

catalogue.json içinde simgeli standart ve artımlı başarımlar tanımla, bunları aç ve ilerlemeyi sdk.achievements ile bildir.

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

Başarımlar oyunundaki hedefleri, oyuncuların PlayDrop’ta gördüğü bir simge ve açıklamayla işaretler. Misafirler ve giriş yapmış oyuncular için çalışır.

## Başarımları tanımla

```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`, [liderlik tablosu](https://www.playdrop.ai/tr/create/learn/leaderboards) anahtarlarıyla aynı biçimi izler.
- `kind`, `STANDARD` (bir kez açılır) ya da `INCREMENTAL` (ilerleme pozitif bir tamsayı olan `maxProgress` değerine ulaşınca açılır) olur.
- `icon`, paketteki bir PNG’dir. Küçük boyutlarda da okunabilen net, kare bir görsel kullan.
- `hidden: true`, adı ve açıklamayı açılana kadar gizli tutar.

Yayınlanmış anahtarlar kaldırılamaz; `kind`, `maxProgress` ve `hidden` değiştirilemez. Bir başarımı `"status": "RETIRED"` ile kullanımdan kaldır.

## Aç ve ilerlemeyi bildir

```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`, asla bir artış miktarı değil, o ana kadarki toplamı alır. İlerleme yalnızca yükselir, `maxProgress` ile sınırlıdır ve bu değerde başarımı açar.
- İki çağrı da `{ accepted, changed, unlocked, progress, unlockedAt, achievement }` döndürür; yeni bir şey olmadığında `changed` false olur, böylece kendi bildirimini yalnızca bir kez gösterebilirsin.
- `list({ includeHiddenDefinitions: true, includeRetired: true })` gizli ve kullanımdan kaldırılmış tanımları da içerir.

Başarımları yalnızca gerçek oynanış sırasında aç, önizlemelerde ya da görüntü yakalamalarında asla. Hiçbir oyuncu oturumu yoksa çağrılar kaydedilmeden tamamlanır.

## İyi başarımlar

Oyunu öğreten erken başarımları uzun vadeli hedeflerle karıştır. Ödülü değil eylemi adlandır: “Hasar almadan kazan” ne yapılacağını söyler. Özenle düşünülmüş bir düzine başarım, yüz basit başarımdan iyidir.

## İlgili kılavuzlar

- [Liderlik tabloları](https://www.playdrop.ai/tr/create/learn/leaderboards): catalogue.json’da liderlik tabloları tanımla, sdk.leaderboards ile puan gönder, en iyileri ve oyuncunun komşularını göster. Puan türleri, sınırlar ve kurallar.
- [Bulut kayıtları](https://www.playdrop.ai/tr/create/learn/cloud-saves): İlerlemeyi sdk.me.appData ve sdk.me.updateAppData ile kaydet ve yükle; misafirler ve giriş yapmış oyuncular için yazma, önizleme ve çevrimdışı kuralları.
- [catalogue.json](https://www.playdrop.ai/tr/create/learn/catalogue-json): PlayDrop oyunlarının kullandığı catalogue.json alanları: kimlik, oyun sayfası, oynanış modları, yüzeyler, giriş, Instant, ön yükleme, medya, çeviriler, skorlar ve sunucular.
