# PlayDrop’ta özel asset biçimleri ve oyuncu yapımları

Asset spesifikasyonuyla kendi biçimini tanımla, oyunun okuduğu ve yazdığı biçimleri bildir, oyuncular yapımlarını sdk.assets.custom ile kaydedip yayınlasın.

Source: https://www.playdrop.ai/tr/create/learn/custom-assets

Asset spesifikasyonları, bir oyunun seviye, karakter ya da deste gibi kendi asset türünü bir dosya sözleşmesi olarak tanımlamasını sağlar. Böylece oyuncular o biçimde yapımlar oluşturabilir, kaydedebilir ve yayınlayabilir; bu biçimi destekleyen diğer oyunlar da onları açabilir.

## Bir asset spesifikasyonu tanımla

Bir asset spesifikasyonu catalogue.json içindeki `assetSpecs` listesinde, `apps` alanının yanında tanımlanır:

```json
{
  "assetSpecs": [{
    "name": "moon-level",
    "version": "1.0.0",
    "displayName": "Moon Jump level",
    "symbol": "specs/moon-level.svg",
    "contract": "specs/moon-level.contract.json"
  }]
}
```

Sözleşme her asset’in dosyalarını ve bunların nasıl kontrol edileceğini belirtir:

```json
{
  "primaryRole": "level",
  "roles": [
    { "name": "level", "required": true, "contentTypes": ["application/json"], "mode": "TEXT",
      "jsonSchema": { "type": "object", "required": ["tiles"], "properties": { "tiles": { "type": "array" } } } },
    { "name": "thumbnail", "required": false, "contentTypes": ["image/png"], "mode": "BINARY" }
  ]
}
```

Roller, PlayDrop’un her kayıtta kontrol ettiği bir JSON Schema taşıyabilir. Biçim değiştiğinde yeni bir spesifikasyon sürümü yayınla; eski asset’ler kendi sürümlerini korur.

## Oyunun neyi desteklediğini bildir

```json
{
  "assetSpecSupport": [
    { "assetSpec": "asset-spec:your-name/moon-level", "versionRange": "^1.0.0", "capabilities": ["READ", "WRITE"] }
  ]
}
```

Yetenekler `READ`, `WRITE`, `EDIT`, `PREVIEW` ve `IMPORT` değerleridir.

## Oyuncu yapımlarını kaydet ve yükle

```js
const levels = sdk.assets.custom.forSpec("asset-spec:your-name/moon-level");

await levels.saveDraft({ assetName: "crater-run", displayName: "Crater run",
  files: { level: new Blob([JSON.stringify(level)], { type: "application/json" }) } });
await levels.publish({ assetName: "crater-run", displayName: "Crater run", files: { level: levelBlob, thumbnail: pngBlob } });

const mine = await levels.listMine();
const latest = mine[0]?.latestPublicVersion;
if (latest) startLevel(await levels.loadJson({ assetRef: latest.assetRef, role: "level" }));

const community = await levels.listPublic({ limit: 20 }); // { assets, pagination }
```

- `saveDraft` özel bir taslak tutar; `publish` onu herkese açık yapar. İkisi de dosyaların eksiksiz kümesini gerektirir.
- Asset referansları `asset:creator/name@r2` biçimindedir. `loadJson`, `loadText` ve `downloadFile` yayınlanmış asset’leri okur; `loadOwned`, `loadOwnedJson` ve `loadOwnedFile` taslaklar dahil oyuncunun kendi asset’lerini okur.
- `supports(versionRef, capability)`, başka bir sürümden bir asset’i açmadan önce kontrol yapar.
- Hatalar `custom_asset_capability_unsupported` ve `custom_asset_role_type_mismatch` gibi kodlar kullanır.

Oyuncuların kaydetmek için giriş yapmış olması gerekir. Oyuncuların yayınladıklarını diğer kullanıcı içerikleri gibi gözden geçir: PlayDrop’un içerik politikası bunlar için de geçerlidir.

## Bağlayıcının kabul ettikleri

Yalnızca veri içeren özel asset’ler ve spesifikasyonlar diğer dosyalar gibi yüklenir. Çalıştırılabilir modeller, yani `procedural` alt kategorisine veya `CUSTOM` biçimine sahip `MODEL_3D` asset’leri, API yapımcı kodunu çalıştırmadığı için bağlayıcı tarafından reddedilir; bunları sabit bir biçime dönüştür ya da yayınlanmış bir sürüme referans ver. Bkz. [oyun asset’leri](https://www.playdrop.ai/tr/create/learn/game-assets).

## İlgili kılavuzlar

- [Oyun asset’leri](https://www.playdrop.ai/tr/create/learn/game-assets): Oyununla görsel, ses, video ve 3D gönder: dahil dosyalar, oyunun asset’leri, herkese açık asset’ler ve paketler, sdk.assets ile çalışma zamanında bulma.
- [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.
- [İstemci SDK’sı](https://www.playdrop.ai/tr/create/learn/sdk): PlayDrop tarayıcı SDK’sı: yaşam döngüsü, kimlik ve kayıtlar, kumandalar, sosyal, çok oyunculu, mağaza, reklamlar, liderlik tabloları, asset’ler ve yapay zeka.
