Saltar para o conteúdo principal

Eventos de Elite Script

Os EliteScripts são baseados em eventos. Isso significa que são acionados quando um evento específico ocorre. Os seguintes são os eventos atualmente válidos:

EventoDetalhesAlvo Direto [?]
EliteMobDamagedByEliteMobEventElite danificada por outra eliteEntidade viva da elite atacante
EliteMobDamagedByPlayerEventElite danificada por um jogadorJogador atacante
EliteMobDamagedEventElite danificada por qualquer coisa❌
EliteMobDeathEventMorte da elite❌
EliteMobEnterCombatEventElite entra em combate com jogadorJogador em combate
EliteMobExitCombatEventElite sai do combate❌
EliteMobHealEventCura da elite (incluindo cura completa)❌
EliteMobSpawnEventSurgimento da elite❌
EliteMobTargetPlayerEventElite mira em um jogadorJogador mirado
PlayerDamagedByEliteMobEventElite causa dano a um jogadorJogador danificado
ElitePhaseSwitchEventBoss surge por troca de fase❌
ZoneEnterEvent (ScriptZoneEnterEvent)Entidade entra na zona. Requer que uma zona seja definida!Entidade que entrou na zona
ZoneLeaveEvent (ScriptZoneLeaveEvent)Entidade sai da zona. Requer que uma zona seja definida!Entidade que saiu da zona

«Elite» é uma entidade registada como elite pelo EliteMobs, incluindo bosses e reforços elite. Nota: ZoneEnterEvent e ZoneLeaveEvent são computacionalmente custosos, por favor use-os com moderação!

Direct Target é usado pelos Alvos de Script, mais informações aqui.

Em YAML, escreve ZoneEnterEvent e ZoneLeaveEvent. Os nomes entre parênteses, ScriptZoneEnterEvent e ScriptZoneLeaveEvent, são os eventos Java internos, não aliases aceites no YAML. Cancelar um evento cancelável impede os scripts e poderes Lua seguintes na ordem de execução desse evento, mas não as restantes ações do script já em execução. Os eventos de entrada e saída de zona não são canceláveis.

EliteMobDamagedEvent abrange dano de qualquer origem; EliteMobDamagedByPlayerEvent e EliteMobDamagedByEliteMobEvent abrangem as respetivas origens específicas. São eventos separados, não alternativas mutuamente exclusivas. Indicar um evento genérico e um específico pode executar o mesmo script várias vezes por golpe, se os tempos de recarga o permitirem. Dano já cancelado antes de o listener genérico atuar não o aciona.

Nota: os nomes dos eventos são comparados exatamente, caractere por caractere. elitemobdeathevent ou ELITEMOBDEATHEVENT são rejeitados com um aviso no console; apenas EliteMobDeathEvent funciona. Os nomes das seções no nível do script também diferenciam maiúsculas de minúsculas: Events, Actions, Zone, Conditions e Cooldowns têm de ser escritos exatamente assim. Um bloco Conditions aninhado sob uma ação é lido com qualquer capitalização. Tudo o que está dentro dessas seções (targetType, radius, borderRadius, isAlive, Target, ...) não diferencia maiúsculas de minúsculas, e todo valor de enum é uma constante convencional em UPPER_SNAKE_CASE com a caixa exata.

Estes também acionam os on_zone_enter / on_zone_leave do Lua

Listar ZoneEnterEvent ou ZoneLeaveEvent aqui é o que inicia o listener de zona por tick no chefe. Esse listener é a única coisa que dispara os hooks de nível superior on_zone_enter / on_zone_leave em um poder Lua no mesmo chefe. O próprio context.zones:watch_zone(...) de um poder Lua não os dispara.

ZoneEnterEvent e ZoneLeaveEvent acionam ações quando entidades entram ou saem da união das formas de zona geradas pelo script. O DIRECT_TARGET é a entidade que entrou ou saiu. O detetor não tem alvo direto, por isso não uses DIRECT_TARGET para definir a zona. Posições fixas e SELF / SELF_SPAWN são origens simples. Um seletor como NEARBY_PLAYERS também pode resolver origens sem alvo direto, mas a zona passa a mover-se com esses jogadores; as entradas e saídas refletem a presença na área móvel combinada.

O listener analisa a zona em cada tick, mesmo quando os tempos de recarga impedem novas ações. Estes reduzem as execuções das ações, não o custo de detetar entidades na zona. Ao iniciar, o listener considera as entidades já presentes na primeira análise como entradas.

Os eventos de zona identificam o boss e a entidade que cruza o limite, mas não o script nem a zona de origem. Uma transição detetada por um listener é enviada a todos os scripts e poderes Lua correspondentes desse boss. Vários listeners podem, por isso, causar ativações repetidas ou entre zonas diferentes. O filter da zona controla as entidades vivas analisadas; a predefinição é PLAYER.

Usa uma secção Events por script, com os acionadores suportados que forem necessários. Um script sem eventos não tem acionamento automático, mas pode ser chamado por outro script:

Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
- EliteMobTargetPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20

Este script faria a elite pular quando atingida por um jogador ou quando mira em um jogador.