# Konfiguration

Die Einstellungen auf dieser Seite befinden sich in `config.lua`. Ändere die Felder der vorhandenen Tabellen und starte die Ressource neu, um die Änderungen anzuwenden.

## Anfangswerte und gespeicherte Einstellungen

Die Studios und Fortschrittsregeln in der Datei dienen als Anfangskonfiguration. Sobald sie über das Administrationspanel gespeichert wurden, bleiben ihre wirksamen Werte über Neustarts hinweg erhalten. Änderungen in der Datei ersetzen gespeicherte Werte nicht automatisch: Verwende das Panel, um Studios, Regeln und Optionen des bereits initialisierten Systems zu aktualisieren.

Sprache, Provider, Bridges, Kamera und Vorschaukleidung werden in der Datei konfiguriert. Quellen und Tattoos werden unter [Katalog und Packs](https://docs.cxgstudios.com/docs/de/01-cxg-tattoos/04-catalogo.md) beschrieben.

## Globale Sprache

```lua
Config.Locale = 'es'
Config.LocaleFallback = 'en'
```

`Locale` legt die Sprache der Oberfläche und Nachrichten für alle Spieler fest. Starte die Ressource nach der Änderung neu; Spieler können die Sprache nicht in der NUI ändern. `LocaleFallback` ist die Ausweichsprache.

Enthaltene Sprachen: `en`, `es`, `pt-BR`, `fr`, `de`, `it`, `pl`, `ru`, `tr`, `th` und `ar`. Die arabische Oberfläche verwendet eine Schreibrichtung von rechts nach links.

## Identitätssystem

`Config.Identity` konfiguriert die Anbindung an das Identitätssystem des Servers. Hier wird festgelegt, wie die Kennung des Charakters oder Kontos ermittelt wird, die die Ressource zum Speichern und Abrufen von Tattoos, XP und Blueprints verwendet.

```lua
Config.Identity.mode = 'auto'
Config.Identity.qbxResource = 'qbx_core'
```

| Modus | Verwendung |
| --- | --- |
| `auto` | Verwendet in Qbox die Kennung des aktiven Charakters (`citizenid`). Auf anderen Servern wird die stabile FiveM-Kennung verwendet. |
| `qbx_character` | Verwendet ausdrücklich die Kennung des Qbox-Charakters (`citizenid`). |
| `license` | Verwendet die FiveM-Lizenz als Kontokennung. Charaktere desselben Kontos teilen Tattoos, XP und Blueprints. |

Lege den Modus fest, bevor du die Ressource für Spieler öffnest. Eine spätere Änderung verändert die Identität, mit der Daten abgefragt werden; Daten werden nicht automatisch zwischen Modi übertragen. Wähle `license` nicht, wenn Tattoos pro Charakter eines Kontos getrennt bleiben sollen.

## Interaktionshinweis

```lua
Config.HelpText.enabled = true
Config.HelpText.provider = 'auto'
Config.HelpText.position = 'left-center'
```

| Feld | Werte oder Wirkung |
| --- | --- |
| `enabled` | Zeigt den Interaktionshinweis an markierten Studios an oder blendet ihn aus. |
| `provider` | `auto`, `ox_lib` oder `native`. `auto` verwendet TextUI, wenn verfügbar, andernfalls den nativen Hinweis. |
| `position` | Für TextUI: `left-center`, `right-center`, `top-center` oder `bottom-center`. |
| `style` | Farben, Rahmen, Schatten, Schrift und Innenabstand der TextUI. |

Beispiel für einen Stil:

```lua
Config.HelpText.style.backgroundColor = '#172328'
Config.HelpText.style.color = '#eef3f3'
Config.HelpText.style.fontSize = '15px'
```

## Anfängliche Studios

`Config.Shops` enthält sechs Standorte. Behalte beim Ändern eines anfänglichen Eintrags dessen Struktur bei:

```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 },
    },
},
```

| Feld | Verwendung |
| --- | --- |
| `label` | Name des Studios. |
| `coords`, `heading` | Position und Ausrichtung. |
| `drawDistance` | Sichtweite des Markers. |
| `interactDistance` | Interaktionsabstand. |
| `shopRadius` | Radius, innerhalb dessen der Studiovorgang erlaubt ist. |
| `marker.type`, `scale`, `color` | Aussehen des Markers. |

Halte `interactDistance` innerhalb von `shopRadius`. Verwende für bereits erstellte Studios den Studio-Bereich des Administrationspanels; erwarte nicht, dass eine Dateiänderung diese Studios neu erstellt oder ersetzt.

## Level und XP

| Einstellung in `Config.Levels` | Anfangswert | Verwendung |
| --- | --- | --- |
| `enabled` | `true` | Aktiviert Fortschritt, Anforderungen und Rabatte. |
| `maxLevel` | `10` | Levelobergrenze. |
| `defaultXpPerTattoo` | `10` | XP für ein Tattoo ohne Angabe von `Xp`. |
| `thresholds` | Level 1 bis 10 | Kumulierte XP, die für jedes Level benötigt werden. |
| `formula.base`, `formula.exponent` | `100`, `1.5` | Parameter der alternativen Schwellenwertformel. |
| `zoneRequirements` | `1` für jede Zone | Zonenanforderung, sofern keine individuelle Anforderung vorhanden ist. |
| `discounts` | Aktiviert, `3` pro Level und höchstens `25` | Rabatt in Prozent. |
| `blueprintSlots` | Basis `5`, Zuwachs `3` | Blueprint-Plätze je nach Level. |

Die Schwellenwerte müssen bei Level 1 mit 0 XP beginnen, ohne Lücken fortlaufen und den erforderlichen XP-Wert erhöhen:

```lua
Config.Levels.thresholds = {
    { level = 1, xpRequired = 0 },
    { level = 2, xpRequired = 100 },
    { level = 3, xpRequired = 250 },
}
Config.Levels.maxLevel = 3
```

Der Rabatt wird als `Level × perLevel` berechnet und durch `maxDiscount` begrenzt. Mit den Anfangswerten erhält Level 5 einen Rabatt von 15 %, höchstens jedoch 25 %.

Die Anzahl der Plätze wird als `base + (level - 1) × perLevel` berechnet. Mit der Anfangskonfiguration hat Level 1 fünf und Level 5 siebzehn Plätze.

Ein individueller `RequiredLevel`-Wert im Katalog hat Vorrang vor der Zonenanforderung. Siehe [Katalogfelder](https://docs.cxgstudios.com/docs/de/01-cxg-tattoos/04-catalogo.md).

Wenn Level deaktiviert sind, gelten keine Level-Sperren, XP oder Rabatte; die Blueprint-Obergrenze verwendet `Config.Blueprints.maxPerPlayer`. Das Deaktivieren des Systems erhält gespeicherte XP. Aktualisiere bei bereits initialisierten Installationen auch den wirksamen Status im Panel.

## Blueprints

Blueprints speichern Tattoo-Gruppen und lassen sich über Codes teilen. Ihre Anfangsgrenzen stehen in `Config.Blueprints`:

| Feld | Anfangswert | Verwendung |
| --- | --- | --- |
| `enabled` | `true` | Aktiviert das System. |
| `codePrefix` | `INK` | Präfix der Codes, zum Beispiel `INK-A3X9`. |
| `codeLength` | `4` | Anzahl der Zeichen nach dem Präfix. |
| `maxPerPlayer` | `20` | Anzahl der Plätze bei inaktivem Fortschrittssystem. |
| `maxTattoosPerBlueprint` | `50` | Höchstzahl der Tattoos pro Gruppe. |
| `nameMaxLength` | `60` | Maximale Länge des Namens. |

Das Einlösen eines Codes fügt die Tattoos dem Kaufablauf hinzu; es gewährt keinen kostenlosen Kauf. Die Wirtschaft wird unter [Integrationen](https://docs.cxgstudios.com/docs/de/01-cxg-tattoos/05-integraciones.md) konfiguriert.

## Kamera

| Tabelle | Steuerung |
| --- | --- |
| `CameraOffsets` | Zielknochen, Abstand, Offsets und Sichtfeld je Zone. |
| `CameraFraming` | Allgemeine Bildkomposition und Verschiebung des Fokuspunktes. |
| `CameraFramingBySide` | Zusätzliche Einstellungen für Vorder- und Rückansicht. |
| `CameraManualControls` | Manuelle Steuerung, Bewegungsschritte, Drehung, Zoom und Grenzen. |

Konfigurierte Zonen: `ZONE_HEAD`, `ZONE_TORSO`, `ZONE_LEFT_ARM`, `ZONE_RIGHT_ARM`, `ZONE_LEFT_LEG` und `ZONE_RIGHT_LEG`.

Beispiele für gezielte Änderungen:

```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
```

Ein positiver `screenOffset` verschiebt den Charakter nach links, damit rechts Platz für das Menü bleibt. `lookAtOffsetX/Y/Z` verändert den Fokuspunkt; `camOffsetX/Y/Z` der Einstellungen pro Seite verändert die Kameraposition.

Bei der manuellen Steuerung passen `horizontalDegrees` und `rotationStepDegrees` die Drehung an. `ranges.y/z`, `radialClamp` und `maxDistance` begrenzen Verschiebungen. `zoomCompositionMinBias` passt die Zentrierung beim Heranzoomen an. Ändere jeweils nur einen Wert und teste alle sechs Zonen mit männlichen und weiblichen Charakteren.

## Vorschaukleidung

Mit `Config.PreviewOutfit` lassen sich tätowierte Bereiche freilegen, während die Oberfläche geöffnet ist:

```lua
Config.PreviewOutfit.enabled = true
Config.PreviewOutfit.useDefaultVariation = false
Config.PreviewOutfit.presets['mp_m_freemode_01'].components[11] = {
    drawable = 15,
    texture = 0,
}
```

Die enthaltenen Presets unterscheiden `mp_m_freemode_01` und `mp_f_freemode_01`. Jede Komponente gibt `drawable` und `texture` an; `clearProps` entfernt Accessoires während der Vorschau. Passe die Indizes an die auf deinem Server installierte Kleidung an. Lass `useDefaultVariation = false`, wenn nur die Komponenten des Presets angewendet werden sollen, ohne das Aussehen global zurückzusetzen.

## Berechtigungen, Wirtschaft und Qbox

`Config.Permissions`, `Config.AdminCommand`, `Config.Purchases` und `Config.QbxMulticharacterPreview` werden unter [Integrationen](https://docs.cxgstudios.com/docs/de/01-cxg-tattoos/05-integraciones.md) erklärt. Passe die Ressourcennamen an, wenn sie von den Standardnamen abweichen.

## Diagnose

`Config.Debug` aktiviert die allgemeine Diagnose. Mit `Config.Permissions.debug` lassen sich Zugriffsentscheidungen prüfen. Lass beide nach Abschluss deaktiviert.

`Config.DebugCommands.clientTattooCommand` ist anfangs deaktiviert. Aktiviere diesen visuellen Befehl nur zu Testzwecken: Er speichert keine Tattoos und ersetzt keinen Kauf.

[Weiter zum Katalog](https://docs.cxgstudios.com/docs/de/01-cxg-tattoos/04-catalogo.md).
