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

# banned

> Sistema de reclusão (ban): confina jogadores banidos em uma zona-prisão, decrementa o tempo de banimento em tempo real e impede a conexão de contas com ban permanente.

O **banned** é o sistema de reclusão (ban) da base. Ele confina jogadores banidos em uma zona-prisão, decrementa o tempo de banimento em tempo real e impede a conexão de contas com ban permanente.

Este recurso é a camada de **confinamento e contagem de tempo**. A aplicação, verificação e persistência do ban ficam no core vRP (`modules/banned.lua` e `base.lua`); este recurso reage ao estado `Banned`.

***

## Como funciona

<Steps>
  <Step title="Statebag">
    Banido quando `LocalPlayer.state.Banned == true` (definido no servidor).
  </Step>

  <Step title="Confinamento (cliente)">
    Uma `PolyZone` `"Banned"` (centro `vec3(-1670.08,-3168.85,13.99)`) prende o jogador; se ele sair, é teleportado de volta ao centro.
  </Step>

  <Step title="Auto-revive">
    Vida `<= 100` → após 15s teleporta ao centro e revive via `exports.survival:Revive(200)`.
  </Step>

  <Step title="Decremento">
    A cada 60s o cliente dispara `banned:Service`; o servidor chama `vRP.UpdateBanned(Passport)`, reduz o saldo e libera quando zera.
  </Step>

  <Step title="Bloqueio no connect">
    `vRP.Banned(source,Account)` recusa a conexão se `Account.Banned == -1` (permanente), exibindo motivo/tempo.
  </Step>

  <Step title="HWID">
    `vRP.Banned` percorre identificadores e tokens de hardware na tabela `hwid`, propagando o ban por hardware.
  </Step>
</Steps>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vrp" icon="gears">
    `vRP.UpdateBanned`, tabela `Banned` em `config/Global.lua`.
  </Card>

  <Card title="PolyZone" icon="map-pin">
    Define a zona-prisão de confinamento.
  </Card>

  <Card title="survival" icon="heart-pulse">
    `Revive` no auto-revive.
  </Card>

  <Card title="pma-voice" icon="microphone-slash">
    Mute do jogador banido.
  </Card>
</CardGroup>

***

## Eventos

| Evento                 | Lado     | Descrição                                                                                                                          |
| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `banned:Service`       | Servidor | Disparado pelo cliente a cada 60s; aplica cooldown de 60s/passaporte e chama `vRP.UpdateBanned`. Ignora se `Identity.Banned <= 0`. |
| `onClientResourceStop` | Cliente  | Reage à parada do próprio recurso.                                                                                                 |
| `onResourceStop`       | Cliente  | Reage à parada de recursos no servidor.                                                                                            |

***

## Banco de Dados

Não cria tabelas próprias; usa estruturas do core.

| Campo             | Valores                                                     | Descrição                                                                |
| ----------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------ |
| `accounts.Banned` | `0` = sem ban, `> 0` = minutos restantes, `-1` = permanente | Estado/saldo do banimento.                                               |
| `accounts.Reason` | texto                                                       | Motivo do banimento.                                                     |
| `hwid.Banned`     | —                                                           | Marca tokens/identificadores de contas banidas (banimento por hardware). |

***

## Customização

Em `vrp/config/Global.lua`, tabela `Banned`: `Mute` (`true`), `Route` (`9999998`, bucket do banido), `Leave` (`vec3(242.71,-392.01,46.30)`, saída ao fim). No recurso (`client-side/core.lua`): `Center` da prisão e vértices da `PolyZone`.
