> ## 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-wardrobe

> Sistema de armário (guarda-roupa) para vRP. Salva a vestimenta atual em slots, veste, atualiza, remove, compartilha via código e importa roupas de outros jogadores, com preview em ped clonado e slots extras por gemas.

O **five-wardrobe** registra a roupa vestida pelo personagem em "slots" persistidos por `Passport`. Ao abrir (`/wardrobe`), cria um **ped de preview** clonado do jogador. As ações (selecionar, vestir, salvar, atualizar, remover, compartilhar, importar, desbloquear slot) vão para o servidor via `five-wardrobe:handleAction`. Ao vestir, grava em `five-creator/setCharacterData` e dispara `five-creator:Client:Skinshop:SaveDefault` (integração com **five-creator**). Cada roupa guarda o gênero (`male`/`female`); roupas de gênero incompatível não podem ser vestidas/importadas.

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Salvar em slots" icon="floppy-disk">
    Guarda a vestimenta atual do personagem em slots persistidos por `Passport`.
  </Card>

  <Card title="Vestir e atualizar" icon="shirt">
    Veste, atualiza e remove roupas salvas, com aplicação via five-creator.
  </Card>

  <Card title="Preview em ped clonado" icon="user">
    Cria um ped de preview clonado do jogador ao abrir o armário.
  </Card>

  <Card title="Compartilhar e importar" icon="share-nodes">
    Compartilha roupas via código e importa roupas de outros jogadores.
  </Card>

  <Card title="Slots extras por gemas" icon="gem">
    Desbloqueio de slots adicionais pagando com gemas.
  </Card>

  <Card title="Controle por gênero" icon="venus-mars">
    Cada roupa guarda o gênero; roupas incompatíveis não podem ser vestidas/importadas.
  </Card>
</CardGroup>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vRP" icon="cube">
    `@vrp/lib/utils.lua`, `@vrp/config/Global.lua`. Funções: `Passport`, `Query`, `Update`, `Prepare`, `HasGroup`, `PaymentGems`.
  </Card>

  <Card title="oxmysql" icon="database">
    `@oxmysql/lib/MySQL.lua`. Acesso ao banco de dados.
  </Card>

  <Card title="five-creator" icon="palette">
    Aplica a skin ao vestir.
  </Card>

  <Card title="[scripts]/dynamic" icon="bars">
    Acesso pelo menu de interação (evento `five-wardrobe:open`).
  </Card>
</CardGroup>

***

## Configuração

<AccordionGroup>
  <Accordion title="config/config.lua — Configurações principais" icon="sliders">
    ```lua theme={null}
    Config.OpenCommand = "wardrobe"   -- comando (só registra se AllowOpenCommand=true)
    Config.ThemeColor = "#0143bb"     -- cor da UI (Theme.main tem prioridade)
    Config.MaxSlots = 8               -- teto absoluto de slots
    Config.DefaultSlots = 3           -- slots liberados por padrão
    Config.SlotPriceGems = 40         -- preço (gemas) por slot adicional
    Config.AllowOpenCommand = true    -- registra o comando?
    Config.AllowOpenWhenDead = false  -- abrir com vida <= 101? (false = bloqueia)

    Config.Cargos = {
        [1] = { grupo = "Admin", quantidade_de_roupas = 999 },
    }
    -- Slots extras por grupo (vRP.HasGroup). Vale o MAIOR valor entre os grupos (não soma). Limitado a MaxSlots.
    ```

    Total de slots = `DefaultSlots + bônus_de_cargo + slots_comprados` (limitado a `MaxSlots`).
  </Accordion>
</AccordionGroup>

***

## Comandos

O recurso registra apenas um comando de chat.

| Comando     | Permissão                                                                                                   | Descrição                                      |
| ----------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `/wardrobe` | Nenhuma (só registrado se `Config.AllowOpenCommand = true`; respeita `CanOpenWardrobe`/`AllowOpenWhenDead`) | Abre o armário (nome em `Config.OpenCommand`). |

***

## Localizações

Não possui pontos fixos no mapa. O armário é aberto por comando/export ou pelo menu de interação do `[scripts]/dynamic` (evento `five-wardrobe:open`); o ped de preview é criado a partir do próprio jogador (10 metros abaixo dele, em `client-side/core.lua`), sem peds, blips, lojas ou zonas com coordenadas no config.

***

## Exports

```lua theme={null}
exports["five-wardrobe"]:OpenWardrobe()  -- abre o armário (respeita CanOpenWardrobe)
```

***

## Eventos

* **Cliente:** `five-wardrobe:open` (abre), `five-wardrobe:openPanel`, `five-wardrobe:response`.
* **Servidor:** `five-wardrobe:requestOpen`, `five-wardrobe:handleAction(action, data)`: ponto único das ações (`selectOutfit`, `wearOutfit`, `addOutfit`, `updateOutfit`, `removeOutfit`, `unlockSlot`, `shareOutfit`/`confirmShare`, `importCode`).
* **Externos:** `Notify`, `five-creator:Client:Skinshop:SaveDefault`.

***

## Banco de Dados

As tabelas abaixo são criadas automaticamente.

| Tabela                | Conteúdo                                                                                            |
| --------------------- | --------------------------------------------------------------------------------------------------- |
| `five_wardrobe`       | Roupas salvas (`Passport`, `name`, `clothing_data` JSON, `gender`, `share_code` único de 10 chars). |
| `five_wardrobe_slots` | Slots extras comprados (`Passport`, `extra_slots`).                                                 |

***

## Customização

* **Comando:** `Config.OpenCommand` / `Config.AllowOpenCommand`.
* **Slots:** `Config.DefaultSlots`, `Config.MaxSlots`, `Config.SlotPriceGems`.
* **Slots por cargo (VIP):** `Config.Cargos` (vale o maior `quantidade_de_roupas`).
* **Cor:** `Config.ThemeColor` (ou `Theme.main`).
* **Abrir morto:** `Config.AllowOpenWhenDead`.
