# Eventos entre cliente e servidor

> Como registrar eventos customizados com addEvent e enviá-los entre cliente e servidor com triggerServerEvent, triggerClientEvent e eventos latentes no MY Multiplayer (MYMP).

- **Plataforma**: MY Multiplayer (MYMP) — Lua 5.4
- **Seções**: Documentação › Guias
- **Idioma**: Português
- **URL**: https://wiki.mymp.gg/pt/docs/custom-events

No **MY Multiplayer** (**MYMP**), scripts de cliente e de servidor se comunicam pela rede registrando eventos customizados e disparando-os no lado oposto.

## Criar e ouvir um evento

- `addEvent(nome, remoto)` registra um novo nome de evento. Apenas eventos registrados com `remoto` igual a `true` podem ser recebidos pela rede vindos do outro lado; qualquer evento remoto não autorizado é descartado e registrado no log.
- `addEventHandler(nome, elemento, funcao)` conecta uma função Lua ao evento na árvore de elementos.

## Do cliente para o servidor

`triggerServerEvent(nome, source, ...)` envia um evento do cliente ao servidor.

- **Restrição de elementos**: o elemento `source` e quaisquer elementos passados nos argumentos precisam existir no servidor. Passar um elemento criado apenas no cliente gera erro.
- **Identificação segura do remetente**: no servidor, a [variável global](https://wiki.mymp.gg/pt/docs/globals.md) `client` contém o jogador real cuja conexão enviou o pacote. Sempre valide `client` — e não `source` nem argumentos da função — para identificar o autor da ação, pois `source` e os argumentos são escolhidos pelo cliente.

## Do servidor para o cliente

`triggerClientEvent([para,] nome, source, ...)` envia um evento do servidor para um ou mais clientes:

- `para`: pode ser um `player`, uma tabela de jogadores ou um elemento da árvore (envia a todos os jogadores abaixo dele). Quando omitido, o evento é enviado a **todos os jogadores conectados**.
- Para cargas maiores de dados, use `triggerLatentServerEvent` e `triggerLatentClientEvent`, que transmitem os dados gradualmente respeitando um limite de banda sem bloquear o tráfego normal.

## Exemplo completo

Servidor:

```lua
addEvent("onShopBuy", true)

addEventHandler("onShopBuy", resourceRoot, function(itemId)
    if type(itemId) ~= "string" then return end
    triggerClientEvent(client, "onShopBought", resourceRoot, itemId)
end)
```

Cliente:

```lua
addEvent("onShopBought", true)

addEventHandler("onShopBought", resourceRoot, function(itemId)
    outputDebugString("Você comprou " .. itemId)
end)

triggerServerEvent("onShopBuy", resourceRoot, "burger")
```

## Limite de eventos por jogador

Quando um jogador dispara mais de `max_player_triggered_events_per_interval` eventos (padrão: `100`) dentro da janela `player_triggered_event_interval` em milissegundos (padrão: `1000`, ambos configuráveis no [server.cfg](https://wiki.mymp.gg/pt/docs/server-config.md)), o servidor dispara o evento `onPlayerTriggerEventThreshold`. Cabe ao script decidir a ação tomada, como desconectar o jogador com `kickPlayer`.
