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

# Eventos

> Eventos e estados do Five Game disponíveis para integração com outros scripts.

O Five Game registra o comando definido em `globalConfig.system.command` (padrão `fivegame`) para abrir o tablet. Para integrar com outros recursos, use o comando, os eventos ou os estados descritos abaixo.

***

## Abrir o tablet

A forma mais simples é executar o comando registrado pelo recurso.

<CodeGroup>
  ```lua Server theme={null}
  ExecuteCommand(("%s %d"):format(globalConfig.system.command, source))
  ```

  ```lua Client theme={null}
  ExecuteCommand(globalConfig.system.command)
  ```
</CodeGroup>

Você também pode disparar diretamente o evento client que abre o tablet. O primeiro parâmetro define se abre ou fecha, e o segundo é o identificador do jogador (passport).

```lua Server theme={null}
TriggerClientEvent("fiveGame:openTablet", source, true, passport)
```

<Note>
  É o mesmo evento usado pelo comando e pelos markers. Útil quando você quer abrir o tablet a partir de outro ponto da sua interface, como um item, um totem ou um menu próprio.
</Note>

***

## Eventos do recurso

| Evento                         | Lado   | Parâmetros                                | Descrição                                                                                                                      |
| ------------------------------ | ------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `fiveGame:openTablet`          | Client | `status` (`boolean`), `userId` (`number`) | Abre ou fecha o tablet do jogador.                                                                                             |
| `fiveGame:matchLoading`        | Client | —                                         | Exibe a tela de carregamento da partida. Disparado pelo recurso ao iniciar.                                                    |
| `hud:Active`                   | Client | `status` (`boolean`)                      | Disparado **pelo** Five Game para esconder e mostrar o HUD da sua base. Adaptável em `server/class/adapter.lua`.               |
| `five-skins:TryApplyComponent` | Server | `weaponName` (`string`)                   | Disparado **pelo** Five Game após cada entrega de arma, para aplicar a skin equipada. Adaptável em `client/class/adapter.lua`. |

<Info>
  Os dois últimos são eventos que o Five Game dispara para fora. Se a sua base usa outros nomes, troque as chamadas nos arquivos `adapter.lua` indicados.
</Info>

***

## Saber se o jogador está em partida

Essa é a peça central para integrar o Five Game com a sua base. Enquanto o jogador está em uma partida, o recurso mantém estados no jogador, replicados para o client. Com eles você consegue interceptar comportamentos da base, como telas de morte, roda de armas e bloqueios diversos.

| Estado                    | Tipo      | Descrição                                          |
| ------------------------- | --------- | -------------------------------------------------- |
| `inFiveGameMatch`         | `boolean` | `true` enquanto o jogador está em uma partida.     |
| `inFiveGameMatchId`       | `number`  | Identificador da partida atual do jogador.         |
| `inFiveGameMatchEconomic` | `boolean` | `true` quando a partida atual usa o modo economia. |

No **client**, leia o estado direto do jogador local. É o caminho ideal para telas de morte, HUDs e roda de armas, que vivem no lado do cliente.

```lua Client theme={null}
if LocalPlayer.state.inFiveGameMatch then
    -- o jogador está em partida
end
```

No **server**, use o export `isPlayingGame`. Veja a página de [Exports](/five-game/api/exports).

```lua Server theme={null}
if exports["five-game"]:isPlayingGame(source) then
    -- o jogador está em partida
end
```

<Tip>
  Os estados voltam ao normal automaticamente quando a partida termina ou quando o jogador sai. Você não precisa limpar nada manualmente.
</Tip>

***

## Interceptar comportamentos da base

Os exemplos abaixo mostram os casos mais comuns. A ideia é sempre a mesma: antes de aplicar um comportamento padrão da base, verifique se o jogador está em partida e ajuste o fluxo.

<AccordionGroup>
  <Accordion title="Parar a tela de morte" icon="skull">
    Telas de morte normalmente vivem no client. Verifique o estado antes de exibir a sua e deixe o Five Game cuidar do round.

    ```lua Client theme={null}
    AddEventHandler("baseMorte:aoMorrer", function()
        if LocalPlayer.state.inFiveGameMatch then
            return -- não mostra a tela de morte da base durante a partida
        end

        -- fluxo normal da sua tela de morte
    end)
    ```
  </Accordion>

  <Accordion title="Liberar a roda de armas" icon="gun">
    Muitas bases bloqueiam a seleção de armas desabilitando o controle 37 a cada frame. Condicione esse bloqueio a estar fora da partida — dentro dela, o Five Game usa a própria hotbar.

    ```lua Client theme={null}
    CreateThread(function()
        while true do
            if not LocalPlayer.state.inFiveGameMatch then
                DisableControlAction(0, 37, true)
            end

            Wait(0)
        end
    end)
    ```
  </Accordion>

  <Accordion title="Esconder o HUD da base" icon="display">
    O Five Game já dispara `hud:Active` ao entrar e sair da partida. Se o seu HUD escuta outro evento, troque as duas chamadas em `adapter.savePlayerInfos` e `adapter.applyPlayerInfos`.

    ```lua Client theme={null}
    RegisterNetEvent("hud:Active", function(status)
        -- status = false ao entrar na partida, true ao sair
    end)
    ```
  </Accordion>

  <Accordion title="Bloquear ações no servidor" icon="ban">
    Para inventário, empregos, comandos e checagens de anticheat, use o export no servidor.

    ```lua Server theme={null}
    RegisterNetEvent("meuJob:iniciarServico", function()
        local src = source

        if exports["five-game"]:isPlayingGame(src) then
            return -- ignora enquanto a partida está em andamento
        end

        -- segue o fluxo normal
    end)
    ```
  </Accordion>
</AccordionGroup>

***

## Exemplo de integração

Abrir o tablet a partir de um ponto de interação próprio e impedir que o jogador use um item enquanto está em partida.

```lua theme={null}
-- Abrir o tablet pelo seu próprio menu (client)
RegisterNetEvent("meuMenu:abrirPartidas", function()
    ExecuteCommand(globalConfig.system.command)
end)

-- Bloquear o uso de um item durante a partida (server)
RegisterNetEvent("meuInventario:usarItem", function(item)
    local src = source

    if exports["five-game"]:isPlayingGame(src) then
        return -- ignora o uso enquanto a partida está em andamento
    end

    -- segue o fluxo normal do item
end)
```
