M MY Multiplayer: Wiki

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

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 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:

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.