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.