FiveMobileFiveMobile

Eventos cliente e servidor

Servidor e cliente conversam por eventos: um lado dispara, o outro escuta.

Do servidor para o cliente

servidor.lua:

addCommandHandler("aviso", function(jogador, _, ...)
    local texto = table.concat({...}, " ")
    triggerClientEvent(root, "meuServidor:aviso", resourceRoot, texto)
end)

cliente.lua:

addEvent("meuServidor:aviso", true)  -- true = pode vir da rede
addEventHandler("meuServidor:aviso", resourceRoot, function(texto)
    outputChatBox("[AVISO] " .. texto, 255, 80, 80)
end)

Do cliente para o servidor

cliente.lua:

triggerServerEvent("meuServidor:comprar", resourceRoot, "agua")

servidor.lua:

addEvent("meuServidor:comprar", true)
addEventHandler("meuServidor:comprar", resourceRoot, function(item)
    local jogador = client  -- quem enviou de verdade (não confie em parâmetros)
    -- valide tudo aqui: o item existe? o jogador tem dinheiro? está perto da loja?
end)

Segurança

  • Use client (no servidor) para saber quem disparou o evento. Nunca aceite "o jogador" como parâmetro vindo do cliente.
  • Valide cada valor recebido: tipo, tamanho, se faz sentido no estado atual do jogo.
  • Dê nomes com prefixo aos seus eventos (meuServidor:...) para não colidir com outros recursos.