> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fivenetwork.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# five-creator

> Criação e seleção de personagens da Five Network: criador (genética, rosto, cabelo), seletor multichar, barbearia, loja de roupas (skinshop), estúdio de tatuagem e escolha de local de spawn.

O **five-creator** controla todo o fluxo visual do personagem desde o primeiro login. O fluxo é automático: ao entrar, após 10s o cliente chama `five-creator:Server:Spawn`. Se já há personagens na licença, abre o **Selector**; senão, abre o **Creator**. A UI é React/Vite compilada em `web-side/dist/`.

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Selector" icon="users">
    Tela de seleção (multichar) com peds animados e câmeras cinemáticas; criar, selecionar e deletar.
  </Card>

  <Card title="Creator" icon="user-pen">
    Criação com genética (pai/mãe, tom de pele, gênero, nome, idade), rosto, aparência e cabelo, com cutscene opcional.
  </Card>

  <Card title="Skinshop" icon="shirt">
    Loja de roupas com cobrança por peça alterada.
  </Card>

  <Card title="Barbershop" icon="scissors">
    Barbearia (cabelo, barba, maquiagem) com cobrança por item.
  </Card>

  <Card title="Tattooshop" icon="pen-nib">
    Estúdio de tatuagem por gênero e parte do corpo.
  </Card>

  <Card title="Spawn" icon="map-pin">
    Escolha do local de nascimento após selecionar o personagem.
  </Card>
</CardGroup>

<Note>
  As imagens de preview (pais/mães, roupas, cortes, tatuagens, spawns) vêm de uma CDN externa em `Config.AssetsUrl`.
</Note>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vRP" icon="cube">
    Framework base.
  </Card>

  <Card title="oxmysql" icon="database">
    Banco (`exports.oxmysql:single_async` no Selector).
  </Card>
</CardGroup>

<Info>
  Opcionais (runtime): `sleepless_interact` (pontos de interação das lojas), `fortal-dui` (DUI 3D nos pontos), `survival` (login de vida).
</Info>

***

## Configuração

<AccordionGroup>
  <Accordion title="Config.lua — tema e câmeras" icon="palette">
    ```lua theme={null}
    Config.AssetsUrl = "https://cdn.fivenetwork.dev/CorePerson/"  -- URL base das imagens
    Config.Logo = "https://cdn.fivenetwork.dev/CorePerson/logo.png"
    Config.ThemeColor = "#0143bb"
    Config.Color = { 1, 67, 187 }  -- RGB dos marcadores 3D
    ```

    `Config.Cameras` define posições de câmera por foco (`fullbody`, `face`, `torso`, `eyes`, `hair`, etc.), cada uma com `distance`, `height` e `pointOffSet`.
  </Accordion>

  <Accordion title="config/Creator.lua" icon="user-pen">
    ```lua theme={null}
    Config.Creator = {
        Coords = { x=-793.42, y=326.06, z=210.79, h=357.17 },  -- onde o ped fica na criação
        Spawn  = { x=-1038.18, y=-2738.68, z=13.82, h=330.54}, -- spawn do recém-criado
        Cutscene = true,  -- cutscene de introdução (mp_intro_concat) ao finalizar
    }
    ```

    Também define `Default.Appearance` (traços faciais iniciais; `-1` = nenhum), `Default.Clothes` (roupa inicial por gênero `m`/`f`), listas `Fathers`/`Mothers` (genética), e os sliders `Characteristics`, `Appearance` e `Hair` (cada um com `title`, `min`, `max`, `step`, `camera`).

    <Note>
      Validação na criação: idade entre **18 e 60**, nome e sobrenome com **≥ 4 caracteres**.
    </Note>
  </Accordion>

  <Accordion title="config/Selector.lua" icon="users">
    ```lua theme={null}
    Config.Selector = {
        Main = vec3(-777.54,331.47,211.4),  -- onde o ped fica na seleção
        Command = { Name = "spawn" },        -- comando que reabre o seletor
        Vip = {
            Groups = { "Diamante","Ouro","Prata","Bronze","Streamer","Booster" },
            Time = 30  -- duração do VIP em dias
        },
    }
    ```

    Define também `Spawns` (5 poses de exibição dos personagens) e `Cameras` (5 sequências cinemáticas).

    <Note>
      A quantidade de slots vem de `vRP.Account(...)["Characters"]` (não deste config). `Config.Selector.Price` (preço de slot) não está definido por padrão, defina se quiser exibir um valor.
    </Note>
  </Accordion>

  <Accordion title="config/Spawn.lua" icon="map-pin">
    ```lua theme={null}
    Config.Spawn = {
        Locations = {
            { id = "pracamaldivas", name = "PRAÇA", coords = vec3(185.02,-913.7,29.45) },
            { id = "hospitalmaldivas", name = "HOSPITAL SUL", coords = vec3(-1012.74,-440.61,39.61) },
        },
        CamHeights = { [1]=1500, [2]=1000, [3]=750, [4]=400, [5]=100 }  -- descida da câmera
    }
    ```

    Cada local: `id` (também a imagem `spawn/<id>.png`), `name`, `coords`.
  </Accordion>

  <Accordion title="Lojas (Barbershop, Skinshop, Tattooshop)" icon="store">
    Cada loja tem `MarkerTitle`, um bloco `Command` (`Name` + `Permissions`), um `Map` (itens/peças com preços) e `Locations` (pontos com `radius` e `viewRadius`).

    * **Barbershop**: `Map` em `hair` e `makeup`; todos os itens custam **250**. 8 localizações.
    * **Skinshop**: `Map` por peça (`mask`=500, `watch`=700, `arms`=300, etc.). 18 localizações.
    * **Tattooshop**: `Map[gênero][parteDoCorpo]` com `Price` (250), `Camera` e `List` de overlays. 8 localizações.

    O preço é cobrado por item **alterado** em relação ao atual. Dentro do criador, o preço é `0`.
  </Accordion>
</AccordionGroup>

***

## Comandos

Comandos administrativos para reabrir o seletor e as lojas, e para resetar personagens.

| Comando           | Permissão     | Função                                                                          |
| ----------------- | ------------- | ------------------------------------------------------------------------------- |
| `/spawn [id]`     | Admin/Mod     | Logout do personagem e reabre o Selector. Admin/Mod podem forçar outro jogador. |
| `/barbershop`     | Admin hier. 4 | Abre a barbearia para si.                                                       |
| `/skinshop`       | Admin hier. 4 | Abre a loja de roupas para si.                                                  |
| `/tattooshop`     | Admin hier. 4 | Abre o estúdio de tatuagem para si.                                             |
| `/resetchar [id]` | Admin hier. 1 | Envia outro jogador de volta ao Creator (com confirmação).                      |

<Note>
  `Config.Resetchar` não vem definido por padrão, então `/resetchar` usa o nome e a permissão de fallback (`Admin` hier. 1). Defina `Config.Resetchar = { Command = ..., Permissions = {...} }` para customizar.
</Note>

***

## Localizações

### Pontos do criador e seletor

| Local                                      | Coordenadas (x, y, z, h)          | Tipo                             |
| ------------------------------------------ | --------------------------------- | -------------------------------- |
| Ped da seleção (`Config.Selector.Main`)    | -777.54, 331.47, 211.4            | Posição dos peds no Selector     |
| Ped do criador (`Config.Creator.Coords`)   | -793.42, 326.06, 210.79, 357.17   | Posição do ped na criação        |
| Spawn pós-criação (`Config.Creator.Spawn`) | -1038.18, -2738.68, 13.82, 330.54 | Spawn do personagem recém-criado |

<Note>
  O Selector usa 5 poses de exibição (`Config.Selector.Spawns`) na faixa de -789 a -802 / 330 a 341 / z \~202-206, com câmeras cinemáticas próprias.
</Note>

### Locais de spawn (Config.Spawn.Locations)

| Local                   | Coordenadas (x, y, z)    | Tipo                |
| ----------------------- | ------------------------ | ------------------- |
| PRAÇA                   | 185.02, -913.7, 29.45    | Ponto de nascimento |
| GARAGEM PALETO          | -768.68, 5586.85, 33.48  | Ponto de nascimento |
| DEPARTAMENTO DE POLÍCIA | 2545.69, -330.48, 93.11  | Ponto de nascimento |
| HOSPITAL SUL            | -1012.74, -440.61, 39.61 | Ponto de nascimento |

### Barbearia (Config.Barbershop.Locations)

| Local       | Coordenadas (x, y, z)    | Tipo               |
| ----------- | ------------------------ | ------------------ |
| Barbearia 1 | -815.59, -182.16, 37.56  | Ponto da barbearia |
| Barbearia 2 | 138.72, -1705.26, 29.3   | Ponto da barbearia |
| Barbearia 3 | -1282.00, -1118.86, 7.00 | Ponto da barbearia |
| Barbearia 4 | 1934.11, 3730.73, 32.85  | Ponto da barbearia |
| Barbearia 5 | 1211.07, -475.00, 66.21  | Ponto da barbearia |
| Barbearia 6 | -34.97, -150.90, 57.08   | Ponto da barbearia |
| Barbearia 7 | -280.37, 6227.01, 31.70  | Ponto da barbearia |
| Barbearia 8 | -1740.94, 225.48, 60.31  | Ponto da barbearia |

### Loja de roupas (Config.Skinshop.Locations)

| Local                         | Coordenadas (x, y, z)    | Tipo          |
| ----------------------------- | ------------------------ | ------------- |
| Skinshop 1                    | 71.29, -1398.68, 29.37   | Ponto da loja |
| Skinshop 2                    | -708.56, -160.5, 37.41   | Ponto da loja |
| Skinshop 3                    | -158.76, -296.94, 39.73  | Ponto da loja |
| Skinshop 4                    | -829.08, -1073.27, 11.32 | Ponto da loja |
| Skinshop 5                    | -1192.23, -771.74, 17.32 | Ponto da loja |
| Skinshop 6                    | -1456.98, -241.17, 49.81 | Ponto da loja |
| Skinshop 7                    | 11.87, 6513.59, 31.88    | Ponto da loja |
| Skinshop 8                    | 1696.92, 4829.24, 42.06  | Ponto da loja |
| Skinshop 9                    | 122.93, -221.48, 54.56   | Ponto da loja |
| Skinshop 10                   | 617.77, 2761.81, 42.09   | Ponto da loja |
| Skinshop 11                   | 1190.79, 2714.29, 38.22  | Ponto da loja |
| Skinshop 12                   | -3173.28, 1046.04, 20.86 | Ponto da loja |
| Skinshop 13                   | -1108.61, 2709.59, 19.11 | Ponto da loja |
| Skinshop 14                   | 429.67, -800.14, 29.49   | Ponto da loja |
| Skinshop 15                   | 1736.21, 3626.01, 34.58  | Ponto da loja |
| Skinshop 16                   | -1029.57, -441.63, 46.13 | Ponto da loja |
| Skinshop 17 (Polícia Militar) | 2531.4, -292.95, 93.11   | Ponto da loja |
| Skinshop 18 (Polícia Civil)   | -980.58, -2015.1, 13.31  | Ponto da loja |

### Estúdio de tatuagem (Config.Tattooshop.Locations)

| Local        | Coordenadas (x, y, z)    | Tipo             |
| ------------ | ------------------------ | ---------------- |
| Tattooshop 1 | -1156.73, -1422.05, 4.77 | Ponto do estúdio |
| Tattooshop 2 | 1321.89, -1654.0, 52.27  | Ponto do estúdio |
| Tattooshop 3 | -1155.09, -1427.6, 4.95  | Ponto do estúdio |
| Tattooshop 4 | -1155.04, -1427.7, 4.95  | Ponto do estúdio |
| Tattooshop 5 | -3170.07, 1077.63, 20.83 | Ponto do estúdio |
| Tattooshop 6 | 1865.2, 3747.41, 33.03   | Ponto do estúdio |
| Tattooshop 7 | -294.71, 6200.06, 31.49  | Ponto do estúdio |
| Tattooshop 8 | 324.44, 180.68, 103.59   | Ponto do estúdio |

***

## Exports

Funções via **Tunnel** (interface `five-creator`, tabela `vFunc`):

| Função               | Retorno | Descrição                      |
| -------------------- | ------- | ------------------------------ |
| `getCustomization()` | tabela  | Roupa atual do personagem.     |
| `checkBackpack()`    | boolean | `true` se está usando mochila. |

Eventos de integração públicos: `barbershop:Open`, `skinshop:Open`, `tattooshop:Open`, `barbershop:Apply`, `skinshop:Apply`, `tattooshop:Apply`, `skinshop:setHat`/`setMask`/`setGlasses`, etc.

***

## Banco de Dados

O recurso utiliza duas tabelas para armazenar personagens e seus dados serializados.

| Tabela       | Descrição                                                                                                                                                  |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `characters` | Personagens por licença (`id`, `License`, `Name`, `Lastname`, `Sex`, `Blood`, `Phone`, `Skin`, `Bank`, `Deleted`, `vipDate`). Telefone único `DDD-DDDD`.   |
| `playerdata` | Dados serializados (JSON) por categoria: `Barbershop` (aparência), `Clothings` (roupas), `Tattooshop` (tatuagens), `Datatable` (posição/vida ao deslogar). |

***

## Customização

### Trocar imagens (CDN)

Todas as imagens vêm de `Config.AssetsUrl`. Caminhos montados automaticamente:

* Pais: `creator/fathers/<name>.png` | Mães: `creator/mothers/<name>.png`
* Roupas: `skinshop/<section>/<genero>/<index>.webp`
* Cabelos: `barbershop/<genero>/<index>.webp`
* Tatuagens: `tattooshop/<genero>/<overlay>.webp`
* Spawn: `spawn/<id>.png`

Hospede suas imagens nessa estrutura e altere `Config.AssetsUrl`.

### Outros ajustes

* **Tema:** `Config.ThemeColor` / `Config.Color` (sobrescritos por `Theme.main` se existir).
* **Locais:** adicione/remova em `Locations` (lojas) e `Config.Spawn.Locations`.
* **Preços:** campo `price`/`Price` de cada item (0 = grátis). Cobra primeiro da carteira (`dollars`), depois do banco.
* **Cutscene:** `Config.Creator.Cutscene = false` pula a introdução.
