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).
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 conremotoentruepuede 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
sourcecomo 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
clientindica el jugador cuya conexión envió el paquete. Usa siempreclient— nuncasourceni 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 unplayer, una tabla de jugadores o un elemento del árbol (todos los jugadores debajo de él). Si se omitepara, el evento se envía a todos los jugadores conectados.- Para volúmenes grandes de datos,
triggerLatentServerEventytriggerLatentClientEventlos envían de forma gradual dentro de un límite de ancho de banda.
Ejemplo completo
Servidor:
addEvent("onShopBuy", true)
addEventHandler("onShopBuy", resourceRoot, function(itemId)
if type(itemId) ~= "string" then return end
triggerClientEvent(client, "onShopBought", resourceRoot, itemId)
end)Cliente:
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) hace que el servidor dispare onPlayerTriggerEventThreshold. La acción a tomar queda a cargo del script, por ejemplo expulsar al jugador con kickPlayer.