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

# arena

> Arena PvP / deathmatch (Airsoft) com loadouts fixos por modalidade, respawn automático, killstreak e killfeed. Ao entrar, o personagem é guardado e substituído por inventário/vida temporários; ao sair, tudo é restaurado.

A **arena** é um sistema de PvP / deathmatch (Airsoft) com loadouts fixos por modalidade, respawn automático, killstreak e killfeed. Ao entrar, o personagem é guardado e substituído por inventário e vida temporários; ao sair, tudo é restaurado.

***

## Como funciona

<Steps>
  <Step title="Entrada via NPC">
    O jogador interage com um NPC (`u_m_y_juggernaut_01`) no ponto de entrada (`Init.Coords`) via `ox_target`, escolhendo uma das 3 modalidades: Pistolas, Sub-Metralhadoras ou Rifles.
  </Step>

  <Step title="Guardar e equipar (arena:Enter)">
    Ao entrar, o servidor faz `vRP.SaveTemporary`: guarda inventário, vida, colete, status e posição reais; zera o inventário; define vida 200/colete 100/status cheios; entrega o loadout e teleporta para um respawn aleatório, isolado num bucket por `Route` (`900001`/`900002`/`900003`).
  </Step>

  <Step title="Contagem de jogadores">
    `GlobalState["Arena:<Route>"]` mantém a contagem de jogadores por modalidade.
  </Step>

  <Step title="Mortes e killfeed">
    Morte via `gameEventTriggered`: incrementa killstreak do atacante e dispara `arena:Death` (killfeed). Respawn/reset de streak vêm do `survival`.
  </Step>

  <Step title="Saída e restauração">
    Sair da `PolyZone` (ou `arena:Exit`) restaura tudo (`vRP.ApplyTemporary`), revive e teleporta de volta. Dentro da arena há stamina infinita e `state.Arena` desativa lógicas de outros recursos (paramédico, sangramento, dano padrão).
  </Step>
</Steps>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vrp" icon="gears">
    `SaveTemporary` / `ApplyTemporary` / `Bucket`.
  </Card>

  <Card title="PolyZone" icon="map-pin">
    Delimita a área da arena.
  </Card>

  <Card title="ox_target" icon="hand-pointer">
    Menu de entrada no NPC.
  </Card>

  <Card title="survival" icon="heart-pulse">
    `Revive`; `arena:Respawn` / `ResetStreek`.
  </Card>

  <Card title="inventory" icon="box">
    `SaveArena` / `ApplyArena` / `CleanWeapons`.
  </Card>

  <Card title="domination" icon="crosshairs">
    `KillFeed`.
  </Card>
</CardGroup>

***

## Configuração

`shared-side/shared.lua` e `client-side/config.lua`:

* `Init.Model` / `Init.Coords`: NPC e posição de entrada (blip sprite 433).
* `Zones["1".."3"]`: por modalidade: `Respawn` (lista vec3, sorteado), `Route` (bucket), `Attachs` (acessórios por arma), `Ammos` (munição por tipo), `Itens` (armas com `Amount`/`Slot`).
* `Polyz["1".."3"]` (`config.lua`): polígono `PolyZone` que delimita a arena.

***

## Eventos

### Interfaces Tunnel

Publica `arena` em ambos os lados: `CheckEnter(Table)`/`CheckExit()` (servidor), `Config(Number)` (cliente).

### Recebidos no servidor

| Evento        | Descrição                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------ |
| `arena:Death` | Recebe `OtherSource`/`Route`; registra a morte e dispara `domination:KillFeed` na mesma `Route`. |

### Cliente

| Evento               | Descrição                                                                                                            |
| -------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `arena:Enter`        | Recebe `Number` (modalidade); valida via `vSERVER.CheckEnter`, entra na arena e teleporta para um respawn aleatório. |
| `arena:Exit`         | Sai da arena: revive, limpa armas, restaura e teleporta de volta.                                                    |
| `arena:Respawn`      | Revive (200) e reposiciona em um respawn aleatório.                                                                  |
| `arena:ResetStreek`  | Zera o killstreak e atualiza a NUI.                                                                                  |
| `gameEventTriggered` | Detecta dano/morte (`CEventNetworkEntityDamage`) para contar killstreak.                                             |

Também registra `AddStateBagChangeHandler("Arena:<Route>")` por modalidade para atualizar a contagem de jogadores na NUI.

***

## Customização

* **Modalidades:** novas entradas em `Zones` (+ `Route`/`Polyz`) e opções no menu `ox_target`.
* **Loadouts:** `Itens`, `Attachs`, `Ammos` de cada zona.
* **Reposicionar:** `Init.Coords`, pontos de `Respawn`, vértices de `Polyz`.
* **Vida/colete de entrada (200/100):** em `vRP.SaveTemporary`.

<Note>
  Sem exports e sem persistência em banco.
</Note>
