Pular para o conteúdo

Eventos

Eventos são o principal meio de reagir ao que acontece no jogo. Você registra uma função e o MTAX a chama quando algo ocorre.

addEventHandler("onPlayerJoin", root, function()
outputDebugString(getPlayerName(source) .. " entrou")
end)

Assim como as funções, os eventos são separados por lado — e um evento não atravessa a fronteira sozinho.

Um manipulador registrado no servidor nunca recebe um evento de cliente, e vice-versa. Para mandar informação de um lado ao outro você usa triggerServerEvent e triggerClientEvent, que estão documentados nas respectivas páginas.

Cada evento tem a sua própria página, em …/events/<lado>/<onNomeDoEvento>/, dizendo onde ele dispara, se cancelEvent tem efeito sobre ele, qual é o source, os parâmetros por posição e um exemplo. As duas páginas acima são o índice de cada lado: explicam como os manipuladores funcionam e listam os eventos por área.

Enquanto um manipulador roda, algumas variáveis globais ficam preenchidas:

GlobalOnde existeConteúdo
sourceambosO elemento que originou o evento.
eventNameambosO nome do evento em execução.
clientservidorO jogador que enviou o evento, quando ele veio do cliente.
sourceResourceambosO resource cujo script disparou o evento; nil quando quem disparou foi a engine ou a rede.
sourceResourceRootambosO elemento raiz desse resource, pela mesma regra.

Fora do manipulador, todas voltam a ser nil.

O segundo argumento de addEventHandler define em qual parte da árvore você quer escutar:

addEventHandler("onPlayerJoin", root, handler) -- todos os jogadores
addEventHandler("onVehicleExplode", meuVeiculo, handler) -- só este veículo

Um manipulador é chamado quando o elemento em que ele foi registrado é o próprio source, é um ancestral do source, ou é a raiz. Registrar em root alcança tudo. Os eventos também descem: um manipulador num descendente do source roda também. No servidor isso vale para todo evento; no cliente, vale para os eventos disparados por scripts ou enviados pelo servidor e para a maioria dos internos.

Você também pode criar os seus:

addEvent("onMeuEventoPersonalizado", false)
addEventHandler("onMeuEventoPersonalizado", root, function(quantia)
outputDebugString("recebi " .. quantia)
end)
triggerEvent("onMeuEventoPersonalizado", root, 100)

O segundo argumento de addEvent controla se o evento pode ser disparado remotamente pelo outro lado. Mantenha false a menos que precise — e, quando precisar, valide tudo o que chegar.