> For the complete documentation index, see [llms.txt](https://striga.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://striga.gitbook.io/docs/striga-multicharacter/installation-and-configuration.md).

# Installation & Configuration

Install Striga Multicharacter and set up its config.

{% stepper %}
{% step %}

### Add the resource

Put the `striga-multichar` folder in your `resources` folder. Do not rename it.

The UI comes prebuilt. There is nothing to build.
{% endstep %}

{% step %}

### Turn off your old character menu

Do the step for your framework below. Two character menus at once will fight.
{% endstep %}

{% step %}

### Start it in server.cfg

`striga-core` must start **first**: after ox\_lib, oxmysql, your framework and your clothing resource, and before Striga Multicharacter.

```
ensure oxmysql
ensure ox_lib
ensure qb-core              # or qbx_core / es_extended
ensure illenium-appearance  # or your clothing resource
ensure striga-core
ensure striga-multichar
```

{% endstep %}

{% step %}

### Add the permissions

```
add_ace group.admin command.logout allow       # /logout (not on Qbox, it has its own)
add_ace group.admin command.deletechar allow   # /deletechar
add_ace group.admin command.mcscene allow      # /mcscene
add_ace group.vip striga.multichar.slots.5 allow   # optional: 5 character slots for a group
```

{% endstep %}

{% step %}

### Restart the server

Restart the whole server. The database tables are made by themselves, there is **no SQL to import**.
{% endstep %}
{% endstepper %}

***

## striga-core

Striga Multicharacter needs **striga-core 0.1.0 or newer**.

* If striga-core is missing, Striga Multicharacter does not start.
* If striga-core is too old, striga-core stops Striga Multicharacter and prints a red error in the server console.
* striga-core checks GitHub for updates. When a new version is out, you see a red `UPDATE` line with the download link in the console. To turn this off, set `"versionCheck": false` in `striga-core/config.json`. See [Updates & Versions](/docs/updates-and-versions.md).

Framework, clothing resource and weather sync are picked in `striga-core/config.json`, not here. A clothing resource striga-core does not know can be added with `exports['striga-core']:RegisterAdapter('appearance', ...)` (see [Integration: Appearance](/docs/striga-core/integration/appearance.md)).

{% hint style="warning" %}
FiveM stops this menu when striga-core stops. After `restart striga-core`, run `ensure striga-multichar` again.
{% endhint %}

***

## Turn off your old character menu

{% tabs %}
{% tab title="QBCore" %}

* Remove or stop `qb-multicharacter`.
* `qb-spawn` is not used anymore. It can stay installed.

{% hint style="warning" %}
`ensure [qb]` starts **everything** in that folder. Move `qb-multicharacter` out of `[qb]` or delete it.
{% endhint %}

Used when they run: `qb-apartments`, `qb-houses`, `qb-weathersync`.
{% endtab %}

{% tab title="Qbox" %}

* In `qbx_core/config/client.lua` set `useExternalCharacters = true`.
* Qbox keeps its own `/logout` command. It works with this menu.
* New characters: if `qbx_properties` has its starting apartment option on, its apartment picker opens right after the first spawn.
  {% endtab %}

{% tab title="ESX" %}

* Stop `esx_multicharacter`.
* In `es_extended/shared/config/main.lua` set `Config.Multichar = true`. ESX only turns it on by itself when a resource called `esx_multicharacter` exists. Without it, characters do not load and you get a red line in the server console.
* In `striga-core/config.json` check `esx`:
  * `dateFormat` must match the date format of esx\_identity
  * `charPrefix` is the identifier prefix (`char1:...`)
  * `defaultHeight` is used for new characters (the form has no height field)
    {% endtab %}
    {% endtabs %}

***

## Config

Everything you can change is in `editable/` (open, not escrowed):

| File                           | What is in it                       |
| ------------------------------ | ----------------------------------- |
| `editable/config.lua`          | All settings                        |
| `editable/nationalities.json`  | Nationality list of the create form |
| `editable/locales/<code>.json` | Every text, one file per language   |

### General

| Option   | Default  | What it does                                                                                                                                                   |
| -------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Locale` | `'auto'` | `'auto'` follows the striga-core server language. A code (e.g. `'tr'`) pins this script to `editable/locales/<code>.json`. See [Languages](/docs/languages.md) |
| `Debug`  | `false`  | Extra console logs                                                                                                                                             |

### Branding (`Config.Branding`)

| Option    | Default                          | What it does                                |
| --------- | -------------------------------- | ------------------------------------------- |
| `Name`    | `'Striga Roleplay'`              | Server name on the intro and select screens |
| `Tagline` | `'Every story starts somewhere'` | Line under the name                         |
| `Logo`    | `nil`                            | Image URL, or `nil`                         |

### Slots (`Config.Slots`)

| Option      | Default | What it does                                                     |
| ----------- | ------- | ---------------------------------------------------------------- |
| `Default`   | `3`     | Slots every player gets                                          |
| `Max`       | `10`    | Hard cap for every source below                                  |
| `Ace`       | `true`  | Slots by ACE: `add_ace group.vip striga.multichar.slots.5 allow` |
| `ByLicense` | `{}`    | Slots per license: `['license:xxxx'] = 5`                        |

Locked slots are never shown.

### Character creation (`Config.Create`)

| Option                | Default    | What it does                                                          |
| --------------------- | ---------- | --------------------------------------------------------------------- |
| `NameMin` / `NameMax` | `2` / `16` | First and last name length                                            |
| `MinYear`             | `1900`     | Oldest birth year                                                     |
| `MinAge`              | `18`       | Minimum age                                                           |
| `CustomNationality`   | `false`    | `true` = free text, `false` = list from `editable/nationalities.json` |
| `StarterItems`        | `true`     | Framework starter items for new characters (given by striga-core)     |
| `BlockedWords`        | list       | Words not allowed in first or last name (any case, any part)          |

### Spawn (`Config.Spawn`)

| Option              | Default  | What it does                                           |
| ------------------- | -------- | ------------------------------------------------------ |
| `Enabled`           | `true`   | `false` = no spawn screen, spawn at the last location  |
| `LastLocation`      | `true`   | Show the last location                                 |
| `Houses`            | `true`   | Show owned qb-houses                                   |
| `Apartments`        | `true`   | Show the owned qb-apartments apartment                 |
| `StarterApartments` | `true`   | New characters pick a qb-apartments starter apartment  |
| `Default`           | Airport  | Spawn for a new character with no starter apartment    |
| `Camera`            | -        | Fly-over camera: `height`, `distance`, `fov`, `interp` |
| `Points`            | 4 points | Spawn points: `id`, `label`, `description`, `coords`   |

{% hint style="info" %}
Background scenes, filters, weather, animations, music and color are on [Settings & Scenes](/docs/striga-multicharacter/settings-and-scenes.md).
{% endhint %}

### Commands (`Config.Commands`)

| Option                 | Default        | What it does           |
| ---------------------- | -------------- | ---------------------- |
| `Logout`               | `'logout'`     | Logout command         |
| `Delete`               | `'deletechar'` | Delete command         |
| `DeleteConfirmSeconds` | `30`           | Time to type `confirm` |
| `SceneHelper`          | `'mcscene'`    | Scene helper command   |

***

## Database

Made by themselves on start, no SQL to import:

| Table                       | What is in it                             |
| --------------------------- | ----------------------------------------- |
| `striga_multichar_settings` | Player settings, per license              |
| `striga_multichar_skins`    | Last good skin of each character (backup) |

Characters stay in your framework's own tables. If a character's skin goes missing, the backup is put back on the next spawn. A character with no skin at all gets the clothing creator instead of the default ped.

{% hint style="info" %}
Something not working? See [Troubleshooting & FAQ](/docs/striga-multicharacter/troubleshooting-and-faq.md).
{% endhint %}

{% content-ref url="/pages/R7iWUMzACmxzJE6dhphB" %}
[Settings & Scenes](/docs/striga-multicharacter/settings-and-scenes.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://striga.gitbook.io/docs/striga-multicharacter/installation-and-configuration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
