# Egendefinerte ressursformater og spillerkreasjoner på PlayDrop

Lag et eget ressursformat med en spesifikasjon, deklarer formatene spillet leser eller skriver, og la spillere lagre og publisere kreasjoner med sdk.assets.custom.

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

Ressursspesifikasjoner lar et spill definere sin egen type ressurs, for eksempel et brett, en figur eller en kortstokk, som en kontrakt av filer. Spillere kan deretter lage, lagre og publisere kreasjoner i det formatet, og andre spill som støtter det, kan åpne dem.

## Definer en ressursspesifikasjon

En ressursspesifikasjon deklareres i `assetSpecs`-listen i catalogue.json, ved siden av `apps`:

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

Kontrakten navngir filene i hver ressurs og hvordan de skal sjekkes:

```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 kan ha et JSON Schema, som PlayDrop sjekker ved hver lagring. Publiser en ny versjon av spesifikasjonen når formatet endres; gamle ressurser beholder sin versjon.

## Deklarer hva et spill støtter

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

Funksjonene er `READ`, `WRITE`, `EDIT`, `PREVIEW` og `IMPORT`.

## Lagre og last inn spillerkreasjoner

```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` lagrer et privat utkast; `publish` gjør det offentlig. Begge trenger hele settet med filer.
- Ressursreferanser ser ut som `asset:creator/name@r2`. `loadJson`, `loadText` og `downloadFile` leser publiserte ressurser; `loadOwned`, `loadOwnedJson` og `loadOwnedFile` leser spillerens egne, inkludert utkast.
- `supports(versionRef, capability)` sjekker før du åpner en ressurs fra en annen versjon.
- Feil bruker koder som `custom_asset_capability_unsupported` og `custom_asset_role_type_mismatch`.

Spillere må være logget inn for å lagre. Se over det spillere publiserer, på samme måte som du ville gjort med annet brukerinnhold: PlayDrops innholdsregler gjelder for det.

## Hva connectoren godtar

Egendefinerte ressurser og spesifikasjoner som bare inneholder data, lastes opp som andre filer. Kjørbare modeller, det vil si `MODEL_3D`-ressurser med underkategorien `procedural` eller formatet `CUSTOM`, avvises av connectoren fordi API-et ikke kjører kode fra skapere; bak dem til faste modeller eller referer til en publisert versjon. Se [spillressurser](https://www.playdrop.ai/nb/create/learn/game-assets).

## Relaterte veiledninger

- [Spillressurser](https://www.playdrop.ai/nb/create/learn/game-assets): Lever bilder, lyd, video og 3D med et PlayDrop-spill: medfølgende filer, spillets egne ressurser, offentlige ressurser og ressurspakker, og oppslag med sdk.assets.
- [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.
- [Klient-SDK](https://www.playdrop.ai/nb/create/learn/sdk): Referanse for PlayDrops nettleser-SDK: livssyklus, identitet og lagring, kontrollere, sosialt, flerspiller, butikk, annonser, topplister, ressurser og KI.
