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

# shops

> Lojas (NUI): pontos de interação no mapa onde o jogador compra ou vende itens, pagando com dinheiro, item de troca (consumo) ou gemas.

O **shops** cria pontos via `sleepless_interact` que abrem uma loja (reaproveitando a NUI do inventário). Cada loja tem um **modo** (`Buy`/`Sell`), um **tipo de pagamento** (`Cash`/`Consume`/`Gemstone`) e uma lista de itens com preços.

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Compra e Venda" icon="cart-shopping">
    Cada loja opera em modo `Buy` ou `Sell`, definindo se o jogador compra itens ou vende para o estabelecimento.
  </Card>

  <Card title="3 Formas de Pagamento" icon="money-bill-wave">
    Pague em dinheiro (`Cash`), item de troca consumido (`Consume`) ou gemas/diamantes (`Gemstone`).
  </Card>

  <Card title="Interação Nativa" icon="hand-pointer">
    Pontos no mapa abertos via `sleepless_interact`, reaproveitando a NUI do inventário.
  </Card>

  <Card title="Restrições por Acesso" icon="lock">
    Permissões por serviço (`Permission`) e routing bucket (`Route`) controlam quem acessa cada loja.
  </Card>
</CardGroup>

***

## Dependências

<CardGroup cols={3} />

<Info>
  Opcional: **core\_logs**.
</Info>

***

## Configuração

Configurações em `shared-side/shared.lua`.

<AccordionGroup>
  <Accordion title="Location e List — pontos e definição das lojas" icon="store">
    ```lua theme={null}
    Location = {                          -- pontos no mapa
        { Coords = vec3(24.51,-1346.75,29.49), Mode = "Departament" },
        { Coords = vec3(...), Mode = "Banned", Route = 9999998 },  -- Route: routing bucket exigido
    }

    List = {                              -- definição das lojas (chave = Mode)
        Departament = {
            Label = "Loja de Conveniência",
            Mode = "Buy",                 -- "Buy" | "Sell"
            Type = "Cash",                -- "Cash" | "Consume" | "Gemstone"
            -- Item = "dirtydollar",         -- moeda quando Type = "Consume"
            -- Permission = "policia",        -- exige vRP.HasService
            List = { postit = 20, cigarette = 15 },  -- item = preço
        },
    }
    ```
  </Accordion>

  <Accordion title="Tipos de pagamento (Type)" icon="money-bill-wave">
    | `Type`     | Comportamento                                |
    | ---------- | -------------------------------------------- |
    | `Cash`     | Buy: cobra dinheiro; Sell: paga em `dollar`. |
    | `Consume`  | Usa `Item` como moeda (consome/gera).        |
    | `Gemstone` | Cobra diamantes (só Buy).                    |
  </Accordion>
</AccordionGroup>

### Adicionar uma loja

<Steps>
  <Step title="Definir a loja">
    Defina em `List` (`Label`, `Mode`, `Type`, `List` de itens).
  </Step>

  <Step title="Criar o ponto no mapa">
    Crie o ponto em `Location` (`Coords`, `Mode`).
  </Step>
</Steps>

***

## Comandos

Este recurso não registra comandos. A interação é feita por `sleepless_interact` ou pelo evento `shops:Open`.

***

## Exports

Não publica exports próprios. A interface Tunnel `shops` expõe: `Permission`, `Mount`, `Take` (comprar), `Store` (vender).

***

## Eventos

| Evento            | Lado     | Descrição                                     |
| ----------------- | -------- | --------------------------------------------- |
| `shops` (Tunnel)  | Servidor | Interface exposta via `Tunnel.bindInterface`. |
| `shops:Open`      | Cliente  | Abre a loja (NUI do inventário) pelo índice.  |
| `inventory:Close` | Cliente  | Fecha a loja aberta.                          |
| `Mount`           | NUI      | Monta a lista de itens/preços na NUI.         |
| `Take`            | NUI      | Compra item da loja.                          |
| `Store`           | NUI      | Vende item para a loja.                       |

***

## Banco de Dados

Este recurso não cria tabelas. Lê `five_characters_vehicles` e `propertys` (descrições de itens). Transações via `vRP.*`.

***

## Customização

* **Itens/preços:** tabelas `List`.
* **Pagamento:** campo `Type` (+ `Item` para `Consume`).
* **Restrições:** `Permission` (serviço) e `Route` (routing bucket).
* **Bloqueio por impostos/multas:** padrão p/ todas exceto `Banned` (em `Core.Permission`).
