# Configurazione

Le impostazioni di questa pagina si trovano in `config.lua`. Modifica i campi delle tabelle esistenti e riavvia la risorsa per applicare le modifiche.

## Valori iniziali e impostazioni salvate

I negozi e le regole di progressione del file fungono da configurazione iniziale. Una volta salvati dal pannello amministrativo, i relativi valori effettivi vengono mantenuti tra i riavvii. Modificarli nel file non sostituisce automaticamente i valori salvati: usa il pannello per aggiornare negozi, regole e opzioni del sistema già inizializzate.

La lingua, i provider, i bridge, la telecamera e gli abiti di anteprima si configurano nel file. Le fonti e i tatuaggi sono descritti in [catalogo e pacchetti](https://docs.cxgstudios.com/docs/it/01-cxg-tattoos/04-catalogo.md).

## Lingua globale

```lua
Config.Locale = 'es'
Config.LocaleFallback = 'en'
```

`Locale` imposta la lingua dell'interfaccia e dei messaggi per tutti i giocatori. Riavvia la risorsa dopo averla modificata; il giocatore non può cambiarla dalla NUI. `LocaleFallback` è la lingua di riserva.

Lingue incluse: `en`, `es`, `pt-BR`, `fr`, `de`, `it`, `pl`, `ru`, `tr`, `th` e `ar`. L'interfaccia araba usa la direzione di lettura da destra a sinistra.

## Sistema di identità

`Config.Identity` configura l'integrazione con il sistema di identità del server. Definisce come ricavare l'identificatore del personaggio o dell'account usato dalla risorsa per salvare e recuperare tatuaggi, XP e blueprint.

```lua
Config.Identity.mode = 'auto'
Config.Identity.qbxResource = 'qbx_core'
```

| Modalità | Uso |
| --- | --- |
| `auto` | In Qbox usa l'identificatore del personaggio attivo (`citizenid`). Sugli altri server usa l'identificatore FiveM stabile. |
| `qbx_character` | Usa esplicitamente l'identificatore del personaggio Qbox (`citizenid`). |
| `license` | Usa la licenza FiveM come identificatore dell'account. I personaggi di quell'account condividono tatuaggi, XP e blueprint. |

Seleziona la modalità prima di aprire la risorsa ai giocatori. Modificarla in seguito cambia l'identità usata per consultare i dati; i dati non vengono trasferiti automaticamente tra modalità. Non selezionare `license` se vuoi separare i tatuaggi tra i personaggi di uno stesso account.

## Avviso di interazione

```lua
Config.HelpText.enabled = true
Config.HelpText.provider = 'auto'
Config.HelpText.position = 'left-center'
```

| Campo | Valori o effetto |
| --- | --- |
| `enabled` | Mostra o nasconde l'avviso di interazione dei negozi con indicatore. |
| `provider` | `auto`, `ox_lib` o `native`. `auto` usa TextUI se disponibile e l'avviso nativo in caso contrario. |
| `position` | `left-center`, `right-center`, `top-center` o `bottom-center`, per TextUI. |
| `style` | Colori, bordo, ombra, tipografia e spaziatura interna di TextUI. |

Esempio di stile:

```lua
Config.HelpText.style.backgroundColor = '#172328'
Config.HelpText.style.color = '#eef3f3'
Config.HelpText.style.fontSize = '15px'
```

## Negozi iniziali

`Config.Shops` include sei posizioni. Per modificare una voce iniziale, mantienine la struttura:

```lua
{
    label = 'Tattoo Studio',
    coords = vector3(322.62, 180.34, 103.59),
    heading = 156.2,
    drawDistance = 10.0,
    interactDistance = 1.5,
    shopRadius = 4.0,
    marker = {
        type = 1,
        scale = vector3(1.0, 1.0, 1.0),
        color = { r = 255, g = 100, b = 0, a = 100 },
    },
},
```

| Campo | Uso |
| --- | --- |
| `label` | Nome del negozio. |
| `coords`, `heading` | Posizione e orientamento. |
| `drawDistance` | Distanza di visualizzazione dell'indicatore. |
| `interactDistance` | Distanza alla quale è possibile interagire. |
| `shopRadius` | Raggio entro cui è autorizzata l'operazione del negozio. |
| `marker.type`, `scale`, `color` | Aspetto dell'indicatore. |

Mantieni `interactDistance` entro `shopRadius`. Per i negozi già creati, usa la sezione negozi del pannello amministrativo; una modifica al file non ricrea né sostituisce quei negozi.

## Livelli e XP

| Impostazione di `Config.Levels` | Valore iniziale | Uso |
| --- | --- | --- |
| `enabled` | `true` | Attiva progressione, requisiti e sconti. |
| `maxLevel` | `10` | Livello massimo. |
| `defaultXpPerTattoo` | `10` | XP per un tatuaggio senza `Xp`. |
| `thresholds` | Livelli da 1 a 10 | XP cumulativi necessari per ogni livello. |
| `formula.base`, `formula.exponent` | `100`, `1.5` | Parametri della formula alternativa per le soglie. |
| `zoneRequirements` | `1` per ogni zona | Requisito per zona quando non ne esiste uno specifico. |
| `discounts` | Attivato, `3` per livello e massimo `25` | Sconto percentuale. |
| `blueprintSlots` | Base `5`, incremento `3` | Posti blueprint in base al livello. |

Le soglie devono iniziare dal livello 1 con 0 XP, proseguire senza salti e aumentare la quantità di XP richiesta:

```lua
Config.Levels.thresholds = {
    { level = 1, xpRequired = 0 },
    { level = 2, xpRequired = 100 },
    { level = 3, xpRequired = 250 },
}
Config.Levels.maxLevel = 3
```

Lo sconto si calcola come `livello × perLevel`, fino a `maxDiscount`. Con i valori iniziali, al livello 5 si ottiene il 15% e lo sconto massimo è del 25%.

I posti si calcolano come `base + (livello - 1) × perLevel`. Con la configurazione iniziale, al livello 1 sono disponibili 5 posti e al livello 5 sono 17.

Un `RequiredLevel` specifico del catalogo ha la precedenza sul requisito della zona. Consulta [campi del catalogo](https://docs.cxgstudios.com/docs/it/01-cxg-tattoos/04-catalogo.md).

Disattivando i livelli, non si applicano restrizioni di livello, XP o sconti; il limite dei blueprint usa `Config.Blueprints.maxPerPlayer`. La disattivazione del sistema mantiene gli XP salvati. Nelle installazioni già inizializzate, aggiorna anche lo stato effettivo dal pannello.

## Blueprint

I blueprint salvano gruppi di tatuaggi e permettono di condividerli tramite codici. I limiti iniziali si trovano in `Config.Blueprints`:

| Campo | Valore iniziale | Uso |
| --- | --- | --- |
| `enabled` | `true` | Attiva il sistema. |
| `codePrefix` | `INK` | Prefisso dei codici, per esempio `INK-A3X9`. |
| `codeLength` | `4` | Numero di caratteri dopo il prefisso. |
| `maxPerPlayer` | `20` | Posti usati quando la progressione non è attiva. |
| `maxTattoosPerBlueprint` | `50` | Numero massimo di tatuaggi per gruppo. |
| `nameMaxLength` | `60` | Lunghezza massima del nome. |

Riscattare un codice prepara i tatuaggi nel flusso di acquisto; non concede un acquisto gratuito. L'economia si configura in [integrazioni](https://docs.cxgstudios.com/docs/it/01-cxg-tattoos/05-integraciones.md).

## Telecamera

| Tabella | Cosa controlla |
| --- | --- |
| `CameraOffsets` | Osso di destinazione, distanza, offset e campo visivo per zona. |
| `CameraFraming` | Composizione generale e spostamento del punto di messa a fuoco. |
| `CameraFramingBySide` | Impostazioni aggiuntive per le viste frontale e posteriore. |
| `CameraManualControls` | Comandi manuali, incrementi di movimento, rotazione, zoom e limiti. |

Le zone configurate sono `ZONE_HEAD`, `ZONE_TORSO`, `ZONE_LEFT_ARM`, `ZONE_RIGHT_ARM`, `ZONE_LEFT_LEG` e `ZONE_RIGHT_LEG`.

Esempi di modifiche puntuali:

```lua
Config.CameraOffsets['ZONE_TORSO'].fov = 50.0
Config.CameraFraming.screenOffset = 0.35
Config.CameraManualControls.enabled = true
Config.CameraManualControls.step = 0.035
Config.CameraManualControls.zoomStep = 0.08
```

Un valore positivo di `screenOffset` sposta il personaggio verso sinistra per lasciare spazio al menu a destra. `lookAtOffsetX/Y/Z` modifica il punto di messa a fuoco; `camOffsetX/Y/Z` delle impostazioni per lato modifica la posizione della telecamera.

Nei controlli manuali, `horizontalDegrees` e `rotationStepDegrees` regolano la rotazione. `ranges.y/z`, `radialClamp` e `maxDistance` limitano gli spostamenti. `zoomCompositionMinBias` regola il centramento quando si aumenta lo zoom. Modifica un valore alla volta e prova tutte e sei le zone con personaggi maschili e femminili.

## Abiti di anteprima

`Config.PreviewOutfit` permette di scoprire le zone tatuate mentre l'interfaccia è aperta:

```lua
Config.PreviewOutfit.enabled = true
Config.PreviewOutfit.useDefaultVariation = false
Config.PreviewOutfit.presets['mp_m_freemode_01'].components[11] = {
    drawable = 15,
    texture = 0,
}
```

I preset inclusi distinguono `mp_m_freemode_01` e `mp_f_freemode_01`. Ogni componente indica `drawable` e `texture`; `clearProps` rimuove gli accessori durante l'anteprima. Adatta gli indici agli abiti installati sul server. Mantieni `useDefaultVariation = false` se vuoi applicare solo i componenti del preset senza reimpostare globalmente l'aspetto.

## Permessi, economia e Qbox

`Config.Permissions`, `Config.AdminCommand`, `Config.Purchases` e `Config.QbxMulticharacterPreview` sono descritti in [integrazioni](https://docs.cxgstudios.com/docs/it/01-cxg-tattoos/05-integraciones.md). Configura i nomi effettivi delle risorse quando differiscono da quelli predefiniti.

## Diagnostica

`Config.Debug` attiva la diagnostica generale. `Config.Permissions.debug` permette di esaminare le decisioni di accesso. Disattivali al termine.

`Config.DebugCommands.clientTattooCommand` è disattivato inizialmente. Attiva quel comando visivo solo per i test: non salva i tatuaggi né sostituisce un acquisto.

[Continua con il catalogo](https://docs.cxgstudios.com/docs/it/01-cxg-tattoos/04-catalogo.md).
