# Eventos entre cliente y servidor

> Cómo registrar eventos personalizados con addEvent y enviarlos entre cliente y servidor usando triggerServerEvent, triggerClientEvent y eventos latentes en MY Multiplayer (MYMP).

- **Plataforma**: MY Multiplayer (MYMP) — Lua 5.4
- **Secciones**: Documentación › Guías
- **Idioma**: Español
- **URL**: https://docs.mymp.gg/es/docs/custom-events

En **MY Multiplayer** (**MYMP**), los scripts de cliente y de servidor se comunican por red registrando eventos propios y disparándolos hacia el otro lado.

## Crear y escuchar un evento

- `addEvent(nombre, remoto)` registra un evento. Solo un evento creado con `remoto` en `true` puede recibirse por red desde el otro lado; cualquier otro evento remoto entrante se descarta y queda registrado en el log.
- `addEventHandler(nombre, elemento, funcion)` asocia una función Lua al evento en el árbol de elementos.

## Del cliente al servidor

`triggerServerEvent(nombre, source, ...)` envía un evento desde el cliente al servidor.

- **Solo elementos conocidos por el servidor**: tanto `source` como cualquier elemento incluido en los argumentos deben existir en el servidor. Pasar un elemento creado únicamente en el cliente produce un error.
- **Identificación segura del remitente**: en el servidor, la [variable global](https://docs.mymp.gg/es/docs/globals.md) `client` indica el jugador cuya conexión envió el paquete. Usa siempre `client` — nunca `source` ni un argumento — para saber quién realizó la acción, ya que el cliente elige esos dos valores.

## Del servidor al cliente

`triggerClientEvent([para,] nombre, source, ...)` envía un evento desde el servidor hacia uno o varios clientes:

- `para`: puede ser un `player`, una tabla de jugadores o un elemento del árbol (todos los jugadores debajo de él). Si se omite `para`, el evento se envía a **todos los jugadores conectados**.
- Para volúmenes grandes de datos, `triggerLatentServerEvent` y `triggerLatentClientEvent` los envían de forma gradual dentro de un límite de ancho de banda.

## Ejemplo 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("Compraste " .. itemId)
end)

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

## Límite de eventos por jugador

Un jugador que dispara más de `max_player_triggered_events_per_interval` eventos (por defecto: `100`) dentro de `player_triggered_event_interval` ms (por defecto: `1000`, ambos configurables en [server.cfg](https://docs.mymp.gg/es/docs/server-config.md)) hace que el servidor dispare `onPlayerTriggerEventThreshold`. La acción a tomar queda a cargo del script, por ejemplo expulsar al jugador con `kickPlayer`.
