# Dövme kataloğu

Katalog, CXG Base dövmelerini ve kurduğunuz paketlerdeki dövmeleri bir araya getirir. Harici paketler isteğe bağlıdır: hiçbirini etkinleştirmeyebilir, birini veya birkaçını etkinleştirebilirsiniz. Bir paket yoksa ya da durdurulmuşsa dövmeleri mağazada gizlenir ve CXG Base kataloğu kullanılabilir kalır.

[Giriş](https://docs.cxgstudios.com/docs/tr/01-cxg-tattoos/01-introduccion.md), [Kurulum](https://docs.cxgstudios.com/docs/tr/01-cxg-tattoos/02-instalacion.md), [Yapılandırma](https://docs.cxgstudios.com/docs/tr/01-cxg-tattoos/03-configuracion.md), [Entegrasyonlar](https://docs.cxgstudios.com/docs/tr/01-cxg-tattoos/05-integraciones.md) ve [Arayüz](https://docs.cxgstudios.com/docs/tr/01-cxg-tattoos/06-interfaz.md) bölümlerine de bakın.

## İsteğe bağlı paketler

Başlangıç yapılandırması şu isteğe bağlı kaynakları içerir:

| ID | Kaynak | Katalog dosyası |
| --- | --- | --- |
| `xgc-classic` | `xgc_TattooClasic` | `tatoo_clasic_full_packconfigdump.json` |
| `xgc-gangs` | `xgc_TattooGangs` | `gangs_full_packconfigdump.json` |
| `xgc-japanese-mafia` | `xgc_TattooJapaneseMafia` | `japanese_mafia_full_packconfigdump.json` |
| `xgc-police` | `xgc_TattooPolice` | `police_full_packconfigdump.json` |
| `xgc-world-countries` | `xgc_TattooWorldCountries` | `world_country_full_packconfigdump.json` |
| `cxg-blackout` | `CXGtatoo_balckout` | `blackout_full_packconfigdump.json` |

Yalnızca sahip olduğunuz paketleri kurun ve `cxg-tattoos` kaynağından önce başlatın. Kaynak adını ve yolu sunucunuzda bulunduğu şekilde, büyük/küçük harfleri koruyarak kullanın. Bir kaynağı geçici olarak gizlemek için `enabled` değerini `false` yapın; yeniden göstermek için `true` yapın ve kaynağın başlatılmış olduğundan emin olun.

CXG Base, kaynağın içindeki `shared/tattoos.json` dosyasını kullanır. `native-game` kaynağı oyunun yerleşik dövme tasarımlarını alır ve başlangıçta devre dışıdır. Bunu kullanmak için doğrulama kaynaklarını da `native.serverMetas` içinde sunucunuzdaki gerçek kaynak ve dosyalarla yapılandırın. Örnek girdi `tatto` kaynağını ve `shop_tattoo.meta` dosyasını gösterir; bu kaynağın kurulu olduğunu varsaymaz. Yalnızca `enabled` değerini açmak, bu tasarımların satın alınabilmesini sağlamaz.

## JSON kaynağı ekleme

`Config.TattooCatalog.sources` içindeki her nesne bir kaynağı yapılandırır. Bu örnek paket kaynaklarının yapısını izler; gerçek kaynak adı ve dosyasıyla uyarlanabilir:

```lua
{
    id = 'mi-pack',
    label = 'Mi Pack',
    color = '#62b6cb',
    enabled = true,
    resource = 'mi_pack',
    path = 'tattoos.json',
    thumbnailPattern = 'miniatures/{Name}.webp',
    root = { mode = 'auto', field = 'Overlays' },
    defaults = {
        collection = 'mi_pack_overlays',
        zone = 'ZONE_TORSO',
        price = 5000,
        requiredLevel = 1,
        overlayTarget = 'male',
    },
}
```

`id`, kaynağı kalıcı biçimde tanımlamalıdır; arayüzde tanımak için `label` ve `color` kullanılır. `resource` ve `path` JSON dosyasını gösterir. Dosya, kullanılabilir bir kaynağın içinde bulunmalıdır. Tasarımın iki kez görünmesini istemiyorsanız aynı tasarımı iki kaynağa eklemeyin; `deduplicateAcrossSources` kaynaklar arasındaki kopyaları kaldırmayı sağlar.

Genel ayarlar `Config.TattooCatalog` içindedir:

| Alan | Başlangıç değeri | Kullanım |
| --- | --- | --- |
| `deduplicate` | `true` | Tek bir kaynak içindeki yinelenen tasarımları kaldırır. |
| `deduplicateAcrossSources` | `false` | Farklı kaynaklardaki tasarımların ayrı tutulmasını sağlar. |
| `serverFallback` | `true` | İstemcinin okuyamadığı bir kaynağı sunucudan ister. |
| `serverFallbackTimeoutMs` | `7000` | Bu isteğin milisaniye cinsinden en uzun bekleme süresi. |

Okuma için fallback, durdurulmuş bir paketi kullanılabilir hale getirmez.

## Her dövmenin biçimi

Dosya bir JSON dizisi veya bu diziyi içeren bir özelliğe sahip nesne olabilir. `root.mode = 'auto'` ile okuyucu her iki biçimi de kabul eder; `root.mode = 'field'` olduğunda liste konumunu `root.field` belirtir. `root.mode = 'array'`, kök düzeyinde dizi kullanılmasını zorunlu kılar.

Bu dizi JSON biçimini gösterir. Örnekteki koleksiyon ve hash değerleri temsilidir; bunları kurulu paketin gerçek adlarıyla değiştirin. Bir JSON girdisi eklemek grafik overlay dosyalarını kurmaz.

```json
[
  {
    "Collection": "mi_pack_overlays",
    "Name": "Rosa del desierto",
    "HashNameMale": "MP_MI_PACK_ROSE_M",
    "HashNameFemale": "MP_MI_PACK_ROSE_F",
    "Zone": "ZONE_TORSO",
    "Price": 5000,
    "Xp": 15,
    "RequiredLevel": 2
  }
]
```

Tasarımı tanımlamak için `Collection` ve en az bir overlay hash'i gerekir. Dövmenin her karakter için bir çeşidi varsa `HashNameMale` ile `HashNameFemale` alanlarını ekleyin. Şu bölgelerden birini kullanın: `ZONE_HEAD`, `ZONE_TORSO`, `ZONE_LEFT_ARM`, `ZONE_RIGHT_ARM`, `ZONE_LEFT_LEG` veya `ZONE_RIGHT_LEG`. `Name`, alıcının göreceği addır. `Price` belirtilmezse kaynağın varsayılan fiyatı; `RequiredLevel` belirtilmezse başlangıç değeri 1 olan `defaults.requiredLevel` kullanılır. XP, dövmeden veya seviye yapılandırmasından gelebilir.

Alan adları farklı olan dosyalarda `Config.TattooCatalog` içindeki `fields` değerini ayarlayın. Bu tablodaki her girdi, ilgili değeri bulmak için kontrol edilecek takma adların listesidir. Örneğin `OverlayHash`, `Cost` ve `BodyZone` kullanan bir dosya şöyle eşlenebilir:

```lua
fields = {
    collection = { 'Collection', 'CollectionName' },
    name = { 'Name', 'DisplayName' },
    overlay = { 'OverlayHash' },
    hashNameMale = { 'MaleOverlay' },
    hashNameFemale = { 'FemaleOverlay' },
    zone = { 'BodyZone' },
    price = { 'Cost' },
    xp = { 'Xp', 'Experience' },
    requiredLevel = { 'RequiredLevel' },
}
```

Ortak değerleri de `rootFields` ile atayabilirsiniz; örneğin koleksiyon adını veya kök nesnede bir kez tanımlanan bölgeyi. Her kaynağın `defaults` ayarları eksik değerleri tamamlar. JSON'unuzda `OverlayHash` gibi tek bir genel alan varsa `defaults.overlayTarget`, bunun erkek (`male`) veya kadın (`female`) dövmesi olarak yorumlanacağını belirler.

Çok farklı biçimler, yapılandırmadaki isteğe bağlı `converters.decode(decoded, settings)` veya `converters.entry(entry, context)` işlevleriyle dönüştürülebilir. İlki belgenin tamamını, ikincisi her bir tasarımı uyarlar. Normal eşleme için gerekli alanları hazırlanmış bir tablo döndürün.

## Küçük resimler

Aynı pakette bulunan görselleri kullanmak için o kaynakta `miniatures/` klasörünü koruyun ve şöyle bir kalıp tanımlayın:

```lua
thumbnailPattern = 'miniatures/{Name}.webp'
```

`{Name}`, `{HashNameMale}`, `{HashNameFemale}` ve `{HashName}` dövme verileriyle değiştirilir. Sonuçta oluşan dosya, örneğin `miniatures/Rosa del desierto.webp`, mevcut olmalı ve kaynak başlatılmış olmalıdır. Arayüz her küçük resmi gerektiğinde ister; görselleri CXG paketine kopyalamayın.

Bir girdide belirli bir görsel belirtmek için `Thumbnail` veya `ThumbnailUrl` da kullanabilirsiniz. `http://`, `https://` ve `data:` URL'leri olduğu gibi kullanılır. Paketteki yerel küçük resim yolu `thumbnailPattern` ile eşleşmelidir; dosya bulunmalı ve kaynak bunu NUI'a sunabilmelidir. Harici kaynakların kendi görsel dosyaları pakette kalmalıdır.

## Yapılandırmadan ve yönetim panelinden değişiklikler

Kaynak eklemek, okuma biçimini değiştirmek, paketleri etkinleştirmek veya devre dışı bırakmak ve varsayılan değerlerini ayarlamak için yapılandırmayı düzenleyin. JSON'u düzenlemeden dövmelerin adını, fiyatını, seviyesini ve kullanılabilirliğini değiştirmek için katalog yönetimini kullanın. Yönetim değişiklikleri kaydedilir ve katalog eşitlemelerinden sonra da korunur. Geri yükleme işlemi, dövmeyi kendi kaynağındaki değerlere döndürür.

Oyuncunun daha önce satın aldığı dövmeler, onları sağlayan paket geçici olarak kapatılsa bile karakterine bağlı kalır. Paket yeniden kullanılabilir olana kadar mağazada görünmez.
