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).
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 comremotoigual atruepodem 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
sourcee 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
clientcontém o jogador real cuja conexão enviou o pacote. Sempre valideclient— e nãosourcenem argumentos da função — para identificar o autor da ação, poissourcee 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 umplayer, 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
triggerLatentServerEventetriggerLatentClientEvent, que transmitem os dados gradualmente respeitando um limite de banda sem bloquear o tráfego normal.
Exemplo 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("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), o servidor dispara o evento onPlayerTriggerEventThreshold. Cabe ao script decidir a ação tomada, como desconectar o jogador com kickPlayer.