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

# chest

> Sistema de baús (compartimentos de armazenamento) por proximidade: baús fixos, baús dinâmicos criados pelo painel admin, baús de organização/cargo e baús-item (malas, caixas de munição/armas, etc.).

O **chest** entrega pontos de armazenamento e itens-container abertos por interação (`sleepless_interact`). Cada baú tem inventário próprio (independente do jogador), persistido no servidor. Os tipos incluem compartimento de cargo (geral/pessoal), bandeja/reciclagem, baús temporários (helicrash/halloween/custom), baú-item (containers) e baús de organização (líder/membro/pessoal). O conteúdo fica em cache (60s) com persistência vRP, e os metadados (peso/slots/permissão) ficam na tabela `chests`.

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Baús por proximidade" icon="box">
    Pontos de armazenamento abertos por interação, cada um com inventário próprio e independente do jogador.
  </Card>

  <Card title="Múltiplos tipos" icon="boxes-stacked">
    Compartimentos de cargo, bandeja/reciclagem, baús temporários, baú-item e baús de organização.
  </Card>

  <Card title="Baús dinâmicos" icon="wand-magic-sparkles">
    Criados pelo painel admin via statebag `coreAdminChests` (integração com `five-admin`).
  </Card>

  <Card title="Cache e persistência" icon="database">
    Conteúdo em cache (60s) com persistência vRP; metadados (peso/slots/permissão) na tabela `chests`.
  </Card>
</CardGroup>

***

## Dependências

<CardGroup cols={3}>
  <Card title="vrp" icon="server" />

  <Card title="PolyZone" icon="draw-polygon" />

  <Card title="sleepless_interact" icon="hand-pointer" />

  <Card title="oxmysql" icon="database" />

  <Card title="keyboard" icon="keyboard" />

  <Card title="inventory" icon="boxes-stacked" />
</CardGroup>

<Info>
  **five-admin** é usado para os baús dinâmicos (via statebag `coreAdminChests`).
</Info>

***

## Configuração

<Info>
  Sem pasta `config/`: os valores ficam no código.
</Info>

<AccordionGroup>
  <Accordion title="client-side/core.lua → Chests — baús fixos" icon="map-pin">
    ```lua theme={null}
    { Name = "...", Coords = vec3(...), Mode = "1" }  -- Mode: "1"/"2"/"3"/"4" (ver Labels)
    ```
  </Accordion>

  <Accordion title="server-side/core.lua → ChestItens — baús-item" icon="box">
    ```lua theme={null}
    personalp = { Slots = ..., Weight = 100, Block = true },
    ammobox = { Slots = ..., Weight = ..., Itens = { ... } },  -- whitelist de itens
    -- suitcase, weaponbox, medicbag, chestgroup*, treasurebox...
    ```
  </Accordion>
</AccordionGroup>

<Note>
  Parâmetros embutidos: cooldown Helicrash 600s; compartimento pessoal cargo 25 slots/50kg; org pessoal 50/100kg; baú de org novo 5000kg/500 slots; Premium dobra o peso do baú padrão; abertura só com vida > 100.
</Note>

***

## Comandos

Nenhum — a interação é por proximidade.

***

## Exports

Não há exports Lua. O recurso expõe a interface Tunnel `chest`: `Permissions`, `Mount`, `Store`, `Take`, `Update`.

***

## Eventos

O servidor expõe a interface `chest` (`Tunnel.bindInterface`) com `Permissions`, `Mount`, `Store`, `Take`, `Update`.

### Recebidos no servidor

| Evento                 | Descrição                                                                  |
| ---------------------- | -------------------------------------------------------------------------- |
| `chest:Cooldown(Name)` | Aplica cooldown de 600s ao baú (ex.: helicrash).                           |
| `chest:Armour(Name)`   | Repõe colete (100) se o jogador tiver o serviço/permissão do baú de cargo. |
| `Disconnect`           | Limpa o estado de baú aberto do jogador ao desconectar.                    |

### Cliente

| Evento                                     | Descrição                                                               |
| ------------------------------------------ | ----------------------------------------------------------------------- |
| `chest:Open(Name,Mode,Item,Blocked,Force)` | Abre o baú indicado (compartimento, item-container, organização, etc.). |
| `chest:Item(Name)`                         | Abre um baú-item (container) após validar permissão e vida > 100.       |
| `chest:Recycle`                            | Abre a bandeja/reciclagem.                                              |
| `inventory:Close(Force)`                   | Fecha a UI do baú e encerra animação.                                   |
| `inventory:Closed(Name)`                   | Confirma o fechamento do baú e libera o estado.                         |

### NUI Callbacks

| Callback | Descrição                                |
| -------- | ---------------------------------------- |
| `Take`   | Retira item do baú para o jogador.       |
| `Store`  | Armazena item do jogador no baú.         |
| `Update` | Atualiza/sincroniza o conteúdo do baú.   |
| `Mount`  | Monta/carrega o inventário do baú na UI. |

***

## Banco de Dados

Os metadados ficam na tabela `chests` (`Name`, `Weight`, `Slots`, `Permission`). O conteúdo é persistido via `vRP.GetSrvData` em `entitydata` (chaves `Chest:<Name>`, `Personal:<Passport>`, `ChestLeader/Member/Personal:<Name>`, `Trash:<Name>`).

<Note>
  O item `diagram` expande o baú (`chests/UpdateWeight`: +10kg/+5 slots por unidade).
</Note>

***

## Customização

<CardGroup cols={2}>
  <Card title="Baús fixos" icon="map-pin">
    Tabela `Chests` em `client-side/core.lua`.
  </Card>

  <Card title="Baús-item" icon="box">
    Tabela `ChestItens` em `server-side/core.lua`.
  </Card>

  <Card title="Opções por modo" icon="list">
    Tabela `Labels`.
  </Card>

  <Card title="Baús dinâmicos" icon="wand-magic-sparkles">
    Via `five-admin` (statebag `coreAdminChests`).
  </Card>
</CardGroup>
