Eventos de cliente
Os eventos desta página disparam só no cliente, dentro do jogo de um jogador. O próprio evento e seus handlers nunca atravessam essa fronteira. O protocolo pode relatar separadamente ao servidor a ação correspondente — como dano ou uma explosão — e também encaminha automaticamente as linhas digitadas no F8 depois dos manipuladores locais. Para enviar dados próprios, use triggerServerEvent.
Você registra um manipulador exatamente como faz no servidor:
addEventHandler("onClientVehicleExplode", root, function() outputDebugString(getVehicleName(source) .. " explodiu")end)addEventHandler, removeEventHandler, getEventHandlers, eventos personalizados e as regras de propagação estão descritos na página de Eventos e nas funções de eventos — funcionam do mesmo jeito aqui, e a página de cada função aponta onde o cliente difere. Esta página cobre só a lista de eventos que o cliente dispara sozinho.
São 106 nomes no total: 105 eventos que você pega com addEventHandler e o onClientSVGUpdate, que é o único que não passa pelo sistema de eventos — ele só chega à função que você registra.
Todos os manipuladores registrados por um resource somem quando ele para. Um manipulador preso diretamente a um elemento também é removido automaticamente logo depois do onClientElementDestroy daquele elemento.
Globais do manipulador
Seção intitulada “Globais do manipulador”Enquanto um manipulador está executando, quatro globais ficam disponíveis:
| Global | Conteúdo |
|---|---|
source | O elemento que originou o evento — o mesmo descrito na linha Source de cada evento abaixo. |
eventName | O nome do evento em execução, como texto. |
sourceResource | O resource cujo script chamou triggerEvent. É nil quando quem disparou foi a engine ou o servidor. |
sourceResourceRoot | O elemento raiz desse resource, nil nos mesmos casos. |
Cada manipulador recebe o próprio conjunto de valores e tem eles restaurados ao retornar, então um manipulador que dispara um evento aninhado continua vendo o seu próprio source na linha seguinte à chamada aninhada.
Não existe client no cliente: aqui não há “de qual jogador veio”, porque tudo acontece na máquina de um jogador só.
Globais do cliente
Seção intitulada “Globais do cliente”Três elementos ficam sempre à mão nos scripts de cliente e aparecem o tempo todo nos manipuladores:
| Global | Conteúdo |
|---|---|
localPlayer | O jogador desta máquina. É a resposta para “sou eu?” dentro de um manipulador. |
root | A raiz da árvore de elementos. Prender um manipulador aqui pega o evento venha ele de onde vier. |
resourceRoot | A raiz do seu resource. Serve para filtrar onClientResourceStart e onClientResourceStop para o seu próprio resource. |
O uso mais comum de localPlayer é separar o que aconteceu com você do que aconteceu com os outros:
addEventHandler("onClientVehicleEnter", root, function(ped, assento) if ped == localPlayer and assento == 0 then outputDebugString("assumi a direção de " .. getVehicleName(source)) endend)Cancelamento
Seção intitulada “Cancelamento”cancelEvent, wasEventCancelled e getCancelReason existem no cliente e funcionam nos eventos que você dispara com triggerEvent.
Vinte e seis eventos desta página também respondem ao cancelamento — o cliente olha para o resultado e desfaz, bloqueia ou reverte o que ia acontecer:
| Evento | O que o cancelamento faz |
|---|---|
onClientPlayerDamage · onClientPedDamage | Barra o golpe no ponto de aplicação e preserva vida e colete. |
onClientPlayerChoke | Interrompe o engasgo e ignora novos engasgos por um segundo e meio. |
onClientPlayerHeliKilled · onClientPedHeliKilled | A hélice não mata. |
onClientPlayerHitByWaterCannon · onClientPedHitByWaterCannon | O jato para de empurrar por meio segundo. |
onClientExplosion | A explosão não acontece. |
onClientWeaponFire | O tiro não deixa impacto. |
onClientPlayerWeaponSwitch | A arma volta para a que estava na mão. |
onClientPlayerStealthKill | O golpe pelas costas não sai. |
onClientPlayerRadioSwitch | A estação continua a mesma. |
onClientElementModelChange | O modelo antigo é mantido — só quando a troca veio de setElementModel. |
onClientVehicleStartEnter | A tarefa de entrar do jogador local não começa; para um ped criado por este cliente, setPedEnterVehicle devolve false. |
onClientVehicleStartExit | Só para um ped criado por este cliente: setPedExitVehicle devolve false. |
onClientVehicleEnter | Só para um ped criado por este cliente: ele é tirado de volta do veículo. |
onClientVehicleDamage | A vida anterior do veículo é restaurada. |
onClientWorldSound | O jogo nunca toca aquele som. |
onClientPauseMenuOpen | O menu principal não abre. |
onClientPlayerWeaponReload · onClientPedWeaponReload | A arma não é recarregada nesta máquina. |
onClientElementAttach · onClientElementDetach | O anexo ou a separação não é aplicado — um attachElements/detachElements local devolve false, e um anunciado pelo servidor é ignorado só nesta máquina. |
onClientKey | A tecla não chega a nenhum bind de bindKey. O jogo em si ainda a recebe. |
onClientDebugMessage | A mensagem não aparece no console de debug. |
onClientPlayerVoiceStart | O microfone do jogador local continua desligado; a fala de outro jogador é silenciada nesta máquina. |
Referência de eventos
Seção intitulada “Referência de eventos”Quadro
Quatro eventos disparam em todo quadro, sempre nesta ordem:
| Ordem | Evento | Para que serve |
|---|---|---|
| 1 | onClientPedsProcessed | Os personagens do mundo já foram atualizados. É o ponto mais cedo do quadro em que dá para ler posições e vida de todo mundo. |
| 2 | onClientPreRender | Recebe o tempo decorrido desde o quadro anterior. É onde entra o que precisa de um passo de tempo: interpolação, movimento de câmera, contadores. |
| 3 | onClientRender | O gancho de desenho. Tudo que você desenha aqui aparece sobre o mundo. |
| 4 | onClientHUDRender | O último do quadro. O que você desenha aqui fica por cima do que foi desenhado no onClientRender. |
Os quatro têm a raiz como source, nenhum é cancelável e as funções de desenho funcionam nos quatro. A diferença prática é só ordem: quem desenha depois cobre quem desenhou antes.
Entrada
Seção intitulada “Entrada”Janela e console
Seção intitulada “Janela e console”Jogadores e peds
Seção intitulada “Jogadores e peds”Combate
Seção intitulada “Combate”Movimento e manobras
Seção intitulada “Movimento e manobras”Veículos
Seção intitulada “Veículos”Objetos
Seção intitulada “Objetos”Elementos
Seção intitulada “Elementos”Áreas e marcadores
Seção intitulada “Áreas e marcadores”Áreas de colisão e marcadores são testados uma vez por quadro contra jogadores, peds, veículos e objetos. Os eventos disparam na transição — entrou ou saiu —, nunca continuamente enquanto o elemento fica dentro.
Cada toque em uma área gera dois eventos: um com a área como source e outro com o elemento como source. Marcadores geram um, mais o onClientPlayerMarkerHit na entrada e o onClientPlayerMarkerLeave na saída quando o elemento é um jogador.
Pickups
Seção intitulada “Pickups”Cada entrada em um pickup dispara dois eventos, nesta ordem: primeiro onClientPickupHit, depois onClientPlayerPickupHit. A saída faz o mesmo com o par de saída.
Resources
Seção intitulada “Resources”Downloads
Seção intitulada “Downloads”Estes avisam sobre o download de assets que acontece antes de um resource iniciar. São a base para você montar a sua própria tela de download, no lugar da caixa de transferência embutida.
Voz e rádio
Seção intitulada “Voz e rádio”Os quatro eventos de voz só existem quando o chat de voz está ligado na configuração do servidor.