Catalogo dei tatuaggi
Il catalogo raccoglie i tatuaggi di CXG Base e dei pacchetti installati. I pacchetti esterni sono facoltativi: puoi scegliere di non attivarne nessuno, attivarne uno o più di uno. Se un pacchetto manca o è arrestato, i suoi tatuaggi vengono nascosti nel negozio e il catalogo CXG Base resta disponibile.
Consulta anche Introduzione, Installazione, Configurazione, Integrazioni e Interfaccia.
Pacchetti opzionali
La configurazione iniziale include queste fonti facoltative:
| ID | Risorsa | File del catalogo |
|---|---|---|
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 |
Installa solo i pacchetti che possiedi e avviali prima di cxg-tattoos. Mantieni il nome della risorsa e il percorso come sono sul server, rispettando maiuscole e minuscole. Per nascondere temporaneamente una fonte, imposta enabled su false; per mostrarla di nuovo, impostalo su true e assicurati che la risorsa sia avviata.
CXG Base usa shared/tattoos.json all'interno della risorsa. La fonte native-game recupera i design dei tatuaggi nativi del gioco ed è disattivata per impostazione predefinita. Per usarla, configura anche le fonti di convalida in native.serverMetas con le risorse e i file effettivi del server. La voce di esempio punta a tatto e shop_tattoo.meta; non presuppone che tale risorsa sia installata. La sola attivazione di enabled non garantisce che questi design siano acquistabili.
Aggiungere una fonte JSON
Ogni oggetto di Config.TattooCatalog.sources configura una fonte. Questo esempio segue la struttura delle risorse dei pacchetti e può essere adattato usando il nome effettivo della risorsa e del relativo file:
{
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 deve identificare la fonte in modo stabile; label e color servono a riconoscerla nell'interfaccia. resource e path puntano al JSON. Il file deve trovarsi all'interno di una risorsa disponibile. Non aggiungere lo stesso design a due fonti, a meno che tu non voglia mostrarlo due volte; deduplicateAcrossSources permette di eliminare i duplicati tra le fonti.
Queste impostazioni generali si trovano in Config.TattooCatalog:
| Campo | Valore iniziale | Uso |
|---|---|---|
deduplicate | true | Elimina i design duplicati all'interno di una fonte. |
deduplicateAcrossSources | false | Permette di mantenere separati i design di fonti diverse. |
serverFallback | true | Chiede al server una fonte che il client non riesce a leggere. |
serverFallbackTimeoutMs | 7000 | Tempo massimo di attesa per la richiesta, in millisecondi. |
Il fallback di lettura non rende disponibile un pacchetto arrestato.
Formato di ogni tatuaggio
Il file può essere un array JSON o un oggetto la cui proprietà contiene l'array. Con root.mode = 'auto', il lettore accetta entrambi i formati; con root.mode = 'field', root.field indica dove si trova l'elenco. root.mode = 'array' forza un array alla radice.
Questo array mostra il formato JSON. La collezione e gli hash dell'esempio sono fittizi: sostituiscili con i nomi effettivi del pacchetto installato. Aggiungere una voce JSON non installa gli overlay grafici.
[
{
"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
}
]
Collection e almeno un hash di overlay sono necessari per identificare il design. Includi HashNameMale e HashNameFemale se il tatuaggio ha una variante per ciascun personaggio. Usa una di queste zone: ZONE_HEAD, ZONE_TORSO, ZONE_LEFT_ARM, ZONE_RIGHT_ARM, ZONE_LEFT_LEG o ZONE_RIGHT_LEG. Name è il nome mostrato all'acquirente. Se ometti Price, viene usato il prezzo predefinito della fonte; se ometti RequiredLevel, viene usato defaults.requiredLevel, il cui valore iniziale è 1. Gli XP possono provenire dal tatuaggio o dalla configurazione dei livelli.
Per i file con nomi di campo diversi, modifica fields in Config.TattooCatalog. Ogni voce di quella tabella è un elenco di alias consultati per trovare il valore corrispondente. Per esempio, un file che usa OverlayHash, Cost e BodyZone può essere mappato così:
fields = {
collection = { 'Collection', 'CollectionName' },
name = { 'Name', 'DisplayName' },
overlay = { 'OverlayHash' },
hashNameMale = { 'MaleOverlay' },
hashNameFemale = { 'FemaleOverlay' },
zone = { 'BodyZone' },
price = { 'Cost' },
xp = { 'Xp', 'Experience' },
requiredLevel = { 'RequiredLevel' },
}
Puoi anche assegnare valori comuni con rootFields, per esempio un nome di collezione o una zona definiti una sola volta nell'oggetto radice. defaults di ogni fonte completa i valori mancanti. Se il JSON contiene un solo campo generico, come OverlayHash, defaults.overlayTarget indica se trattarlo come tatuaggio maschile (male) o femminile (female).
I formati molto diversi possono essere trasformati con le funzioni facoltative converters.decode(decoded, settings) o converters.entry(entry, context) nella configurazione. La prima adatta l'intero documento; la seconda adatta ogni design. Restituisci una tabella con i campi già pronti per la mappatura normale.
Miniature
Per usare immagini presenti nello stesso pacchetto, mantieni la cartella miniatures/ in quella risorsa e definisci un modello come:
thumbnailPattern = 'miniatures/{Name}.webp'
{Name}, {HashNameMale}, {HashNameFemale} e {HashName} vengono sostituiti con i dati del tatuaggio. Il file risultante deve esistere nella risorsa, per esempio miniatures/Rosa del desierto.webp, e la risorsa deve essere avviata. L'interfaccia richiede ogni miniatura quando serve; non copiare le immagini nel pacchetto CXG.
Puoi anche impostare Thumbnail o ThumbnailUrl in una voce per indicare un'immagine specifica. Gli URL http://, https:// e data: vengono usati così come sono. Il percorso di una miniatura locale di un pacchetto deve corrispondere al relativo thumbnailPattern; il file deve esistere e la risorsa deve poterlo fornire alla NUI. Le risorse esterne devono mantenere il file all'interno del pacchetto.
Modifiche dalla configurazione e dall'amministrazione
Modifica la configurazione per aggiungere fonti, cambiare la modalità di lettura, attivare o disattivare pacchetti e regolarne i valori predefiniti. Usa la gestione del catalogo per cambiare nomi, prezzi, livelli e disponibilità dei tatuaggi senza modificare il JSON. Le modifiche amministrative vengono salvate e persistono dopo le sincronizzazioni del catalogo. L'azione di ripristino riporta quel tatuaggio ai valori della propria fonte.
I tatuaggi già acquistati da un giocatore restano associati al suo personaggio anche se il pacchetto che li forniva viene temporaneamente disattivato. Il pacchetto non compare nel negozio finché non torna disponibile.