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

# markers

> Blips dinâmicos no mapa que mostram a localização de jogadores de um grupo/permissão (ex.: polícia em serviço, corredores) para outros membros do mesmo grupo. Controlado por outros recursos via exports Enter/Exit.

O **markers** mantém no servidor uma lista de jogadores "ativos" (`Players`) com `Permission` e `Level`. Quando um entra, os clientes criam um blip: `AddBlipForEntity` (jogador renderizado, nome `! <Permission> : <Nível>`) ou `AddBlipForCoord` (no mapa do menu de pausa, posição via `vSERVER.Users()`).

Um jogador só **vê** os blips de um grupo se possuir a permissão (StateBag `player:<Source>`) ou uma permissão "pai" em `ParentGroups`. A renderização exige `state.Active` e `state.Markers` verdadeiros e o minimapa/mapa aberto. A cor do blip vem do campo `Markers` do grupo em `vrp/config/Global.lua`; grupos sem `Markers` não geram blips.

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Blips dinâmicos" icon="map-pin">
    Mostra a localização de jogadores de um grupo no minimapa e no mapa de pausa.
  </Card>

  <Card title="Visibilidade por permissão" icon="lock">
    Só vê os blips quem tem a permissão do grupo (StateBag) ou um grupo pai.
  </Card>

  <Card title="Herança de grupos" icon="sitemap">
    `ParentGroups` permite que um grupo pai enxergue os blips das permissões filhas.
  </Card>

  <Card title="Cores por grupo" icon="palette">
    Cor definida pelo campo `Markers` do grupo em `vrp/config/Global.lua`.
  </Card>
</CardGroup>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vrp" icon="layer-group">
    Configs `Groups`/`Hierarchy` e StateBags.
  </Card>

  <Card title="PolyZone" icon="draw-polygon">
    Suporte de zonas.
  </Card>
</CardGroup>

***

## Configuração

<AccordionGroup>
  <Accordion title="shared-side/shared.lua — ParentGroups" icon="sitemap">
    Tabela `ParentGroups`: mapeia um grupo pai para permissões filhas (quem tem o pai enxerga os blips das filhas).

    ```lua theme={null}
    ParentGroups = {
        Policia = { "Militar","Civil","CORE","BOPE","PRF","Corredor","Boosting" }
    }
    ```
  </Accordion>
</AccordionGroup>

***

## Exports

Ambos **server-side**.

### `Enter(source, Permission, Level)`

Adiciona/atualiza o jogador na lista. `Permission` obrigatória; `Level` padrão `1`. Avisa os demais (`markers:Add`) e envia a lista ao próprio (`markers:Full`).

```lua theme={null}
exports.markers:Enter(source, "PM", 5)
```

### `Exit(source)`

Remove o jogador e dispara `markers:Remove`.

```lua theme={null}
exports.markers:Exit(source)
```

<Note>O cliente também consome `vSERVER.Users()` (Tunnel `markers`), que devolve `{ Level, Permission, Coords }` de cada ativo.</Note>

***

## Eventos

Publica a interface Tunnel `markers` (tabela `Core`) no servidor, expõe `Users()` ao cliente.

| Evento           | Lado     | Descrição                                                               |
| ---------------- | -------- | ----------------------------------------------------------------------- |
| `markers:Exit`   | Servidor | Remove o jogador da lista de ativos (mesma lógica do export `Exit`).    |
| `Disconnect`     | Servidor | Chama `Exit` ao jogador desconectar, limpando seus blips.               |
| `markers:Add`    | Cliente  | Cria/atualiza o blip de um jogador recém-adicionado (`Source`, `Data`). |
| `markers:Full`   | Cliente  | Recebe a lista completa de ativos e cria todos os blips.                |
| `markers:Remove` | Cliente  | Remove o blip do jogador (`Source`).                                    |

***

## Customização

* **`ParentGroups`** (`shared-side/shared.lua`): herança de visibilidade.
* **`Groups[Permission].Markers` / `Hierarchy`** (`vrp/config/Global.lua`): habilita o blip, define cor e nomes de nível.
* **Aparência** (`CreateOrUpdateBlip`): sprite `1`, display `4`, escala `0.65`.
