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

> Sistema de chamados/atendimento (ticket de suporte) entre jogadores e staff, com painel staff em NUI, ações administrativas, feedback por estrelas e ranking de atendimentos.

O **five-calls** é o sistema de chamados/atendimento do servidor. Qualquer jogador abre um chamado (`/chamado`) digitando uma mensagem, que vai em tempo real para a staff em serviço. A staff aceita (recebe blip + marcador no local) e tem um menu de ações. Ao finalizar, o jogador avalia de 1 a 5 estrelas; as avaliações alimentam perfil e ranking (geral e mensal).

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Abertura de chamados" icon="headset">
    O jogador abre um chamado com `/chamado` e a mensagem chega em tempo real à staff em serviço.
  </Card>

  <Card title="Ações da staff" icon="user-shield">
    Menu com reviver, teleportar até, puxar e enviar à garagem após aceitar o chamado.
  </Card>

  <Card title="Feedback por estrelas" icon="star">
    Ao finalizar, o jogador avalia o atendimento de 1 a 5 estrelas.
  </Card>

  <Card title="Perfil e ranking" icon="ranking-star">
    Avaliações alimentam o perfil e o ranking geral e mensal. Atendimentos dentro do tempo configurado contam como "rápidos".
  </Card>
</CardGroup>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vrp" icon="layer-group">
    Framework base (Tunnel/Proxy).
  </Card>

  <Card title="oxmysql" icon="database">
    Acesso ao banco de dados.
  </Card>
</CardGroup>

<Info>
  Opcionais: `five-vehicles` (ação "enviar para garagem", lê `config/garages.lua`) e `five_logs` (log `FINALIZOU-CHAMADO`).
</Info>

***

## Configuração

Todo o ajuste fica em `config/config.lua` (tabela `Calls`).

<AccordionGroup>
  <Accordion title="config/config.lua — Configuração completa" icon="sliders">
    ```lua theme={null}
    Calls.PlayerCommand = "chamado"           -- jogador abre chamado
    Calls.StaffCommand = "chamados"           -- staff abre painel
    Calls.ToggleCommand = "togglechamados"    -- liga/desliga toasts
    Calls.FinishCommand = "finalizarchamado"  -- finaliza atendimento

    Calls.StaffPermission = "Admin"   -- aceita "Grupo@Nivel" (ex.: "Admin@2")

    Calls.PlayerCooldown = 60   -- s entre chamados do mesmo jogador
    Calls.AcceptTimeout = 30    -- s que o toast fica visível
    Calls.FastThreshold = 60    -- atendimento "rápido" se finalizado até aqui

    Calls.AcceptKey = "Y"; Calls.DeclineKey = "U"; Calls.StaffMenuKey = "F2"; Calls.FinishKey = "F7"

    Calls.ThemeColor = "#0143bb"  -- Theme.main tem prioridade
    Calls.Blip = { Sprite = 280, Color = 5, Scale = 1.0, Name = "Atendimento" }

    Calls.Garage = { Resource = "five-vehicles", ConfigFile = "config/garages.lua", AllowedTypes = { NORMAL = true }, OnlyPublic = true }
    Calls.RankLabels = { }  -- sobrescreve nomes de rank na UI (opcional)
    ```
  </Accordion>
</AccordionGroup>

***

## Comandos

| Comando             | Acesso  | Descrição                               |
| ------------------- | ------- | --------------------------------------- |
| `/chamado`          | jogador | Abre o prompt para enviar um chamado.   |
| `/chamados`         | staff   | Abre o painel (lista, perfil, ranking). |
| `/togglechamados`   | staff   | Liga/desliga os toasts de chamado novo. |
| `/finalizarchamado` | staff   | Finaliza o chamado em atendimento.      |

<Note>
  Teclas de atalho (via `RegisterKeyMapping`, remapeáveis no menu do FiveM): aceitar chamado (`Calls.AcceptKey = Y`), recusar (`Calls.DeclineKey = U`), menu staff (`Calls.StaffMenuKey = F2`), finalizar (`Calls.FinishKey = F7`).
</Note>

***

## Localizações

O **five-calls** não possui locais fixos no mapa. As coordenadas usadas são dinâmicas: ao aceitar um chamado, a staff recebe um blip + marcador (`Calls.Blip`, sprite 280) na posição do jogador que abriu o chamado. A ação "enviar para garagem" não tem coordenadas próprias: lê as garagens públicas do tipo NORMAL diretamente de `five-vehicles` (`config/garages.lua`), conforme `Calls.Garage`.

***

## Exports

Não publica exports próprios. O Tunnel `five-calls` expõe `OpenTicket`, `AcceptTicket`, `StaffRevive`, `StaffTpTo`, `StaffPullPlayer`, `StaffSendToGarage`, `StaffFinish`, entre outros.

***

## Banco de Dados

A tabela `five_calls` é criada automaticamente: um registro por atendimento finalizado (`staff`, `fast`, `stars`, `period` MM-AA, `created_at`). Base do perfil/ranking (até 15 staffs por total de atendimentos).

***

## Customização

* **Comandos/permissão:** `Calls.*Command`, `Calls.StaffPermission`.
* **Tempos:** `PlayerCooldown`, `AcceptTimeout`, `FastThreshold`.
* **Teclas:** `AcceptKey`/`DeclineKey`/`StaffMenuKey`/`FinishKey` (remapeáveis).
* **Aparência:** `Calls.ThemeColor`, `Calls.Blip`, `Calls.RankLabels`.
* **Garagem:** `Calls.Garage`.
