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:
| Evento | Detalhes | Alvo Direto [?] |
|---|---|---|
| EliteMobDamagedByEliteMobEvent | Elite danificada por outra elite | Entidade viva da elite atacante |
| EliteMobDamagedByPlayerEvent | Elite danificada por um jogador | Jogador atacante |
| EliteMobDamagedEvent | Elite danificada por qualquer coisa | ❌ |
| EliteMobDeathEvent | Morte da elite | ❌ |
| EliteMobEnterCombatEvent | Elite entra em combate com jogador | Jogador em combate |
| EliteMobExitCombatEvent | Elite sai do combate | ❌ |
| EliteMobHealEvent | Cura da elite (incluindo cura completa) | ❌ |
| EliteMobSpawnEvent | Surgimento da elite | ❌ |
| EliteMobTargetPlayerEvent | Elite mira em um jogador | Jogador mirado |
| PlayerDamagedByEliteMobEvent | Elite causa dano a um jogador | Jogador danificado |
| ElitePhaseSwitchEvent | Boss 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.
on_zone_enter / on_zone_leave do LuaListar 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.