Tempos de Recarga de Elite Script
Os tempos de recarga controlam quando um evento pode voltar a iniciar o mesmo script e quando outros poderes participantes podem começar. Scripts que ignoram a recarga e callbacks Lua sem essa verificação não são afetados.
Localização da configuração
Os tempos de recarga são configurados na secção Cooldowns de um elite script:
eliteScript:
ScriptName:
Events:
- [event configuration]
Actions:
- [action configuration]
Cooldowns:
local: [value or range]
global: [value or range]
A secção tem de se chamar exatamente Cooldowns. Dentro dela, as chaves não distinguem maiúsculas de minúsculas (local, Local, LOCAL funcionam). Usa quantidades inteiras de ticks ou intervalos de inteiros, não decimais. Um decimal, um intervalo invertido como 80~40, ou texto que não seja um número faz o EliteMobs ignorar o script inteiro e registar Skipped script <name> in <file>.
Nota sobre as unidades: Todos os valores de tempo de recarga são especificados em ticks. No Minecraft, existem 20 ticks por segundo, portanto:
- 20 ticks = 1 segundo
- 60 ticks = 3 segundos
- 100 ticks = 5 segundos
- 99999 ticks ≈ 83 minutos
Valores predefinidos
Se a secção Cooldowns for omitida, tanto local como global assumem o valor predefinido de 0, o que significa que o script ignora totalmente o sistema de tempos de recarga.
Ignorar o tempo de recarga
Um script é limitado pelo sistema de recarga quando local ou global é superior a 0. Um script limitado não se executa enquanto a sua própria recarga local estiver ativa nem enquanto o boss estiver numa recarga global. Se ambos os valores faltarem, forem zero ou negativos, a verificação de recarga é ignorada; as verificações do evento, das condições e da supressão de poderes continuam a aplicar-se. Usa valores não negativos.
Definir apenas local: 200 limita o script a uma execução a cada 200 ticks. Também faz o script esperar enquanto qualquer outro poder mantiver a recarga global do boss.
Definir apenas global: 20 atrasa os outros poderes participantes durante 20 ticks depois de o script se executar. O script espera por essa mesma recarga global, por isso também não pode voltar a executar-se durante 20 ticks.
Esta exceção é intencional: permite comportamentos acionados por eventos que devem executar independentemente do estado de recarga do boss.
Exemplo:
eliteScript:
AlwaysTeleportOnCombatEnter:
Events:
- EliteMobEnterCombatEvent
Actions:
- action: TELEPORT
Target:
targetType: SELF
FinalTarget:
targetType: SELF_SPAWN
# No Cooldowns section - script always executes when event fires
Os tempos de recarga têm dois valores:
local
local define o tempo, em ticks, antes de o mesmo script poder voltar a acontecer. Exemplo:
Exemplo
local: 60
Permite voltar a executar o poder após 3 segundos, desde que o boss não esteja numa recarga global e as restantes verificações sejam satisfeitas.
global
global define o tempo, em ticks, antes de qualquer outro script ou poder poder voltar a acontecer[1]. Exemplo:
Exemplo
global: 20
Impede outros poderes participantes de iniciar durante 1 segundo.
[1] global define um indicador de recarga para todo o boss. Outros poderes só o respeitam se as suas próprias verificações participarem no sistema. Os poderes EliteMobs são EliteScripts ou poderes Lua; um poder Lua participa no mesmo período chamando context.cooldowns:set_global(ticks) e verificando context.cooldowns:global_ready() antes de começar. Um script frequente pode manter poderes participantes mais lentos à espera.
Uma recarga local maior do que a global dá tempo aos outros poderes elegíveis. Não garante alternância: cada poder continua a precisar do seu evento e de satisfazer as condições e verificações de recarga.
Além disso, se o seu poder tiver uma duração específica durante a qual está ativo, deve usar este sistema para impedir que outros poderes sejam executados em simultâneo e potencialmente estraguem o seu poder.
As recargas começam quando o script lança as ações, não quando terminam o respetivo wait, repetições ou duração. Condições do script que falhem não iniciam recarga; ações individuais que falhem as suas próprias condições podem, ainda assim, deixar a recarga do script aplicada.
Cada recarga guarda o tick em que termina. Aplicar de novo uma recarga mantém o tick de fim mais tardio, pelo que uma recarga global mais curta de outro poder nunca encurta uma mais longa. As recargas locais comportam-se da mesma forma quando outro script chama diretamente o mesmo script.
Aleatorização
Tanto os tempos de recarga local como global suportam aleatorização usando a sintaxe de intervalo. Isto permite que as durações dos tempos de recarga variem, adicionando imprevisibilidade ao comportamento do boss.
Exemplo:
Cooldowns:
local: 40~80
global: 10~30
Define o tempo de recarga local para ser aleatoriamente entre 40 e 80 ticks (2-4 segundos) e o tempo de recarga global para ser aleatoriamente entre 10 e 30 ticks (0.5-1.5 segundos).
A implementação atual escolhe cada valor do intervalo ao construir a instância do script e guarda-o nessa instância do poder. Não volta a sortear o valor a cada aplicação da recarga.
Executar scripts apenas uma vez com tempos de recarga
Para garantir que os scripts são acionados apenas uma vez, mesmo usando um Evento que pode ocorrer várias vezes durante um combate, defina o tempo de recarga local para um número elevado, como 99999. Este exemplo demonstra o conceito:
Exemplo
eliteScript:
SetMeOnFireOnlyOnce:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 60
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 99999
Neste cenário, o EliteMobDamagedByPlayerEvent aciona a ação SET_ON_FIRE. Sem tempos de recarga, a ação seria ativada sempre que o jogador atingisse o mob.
Com local: 99999, a ação pode ocorrer no máximo uma vez a cada 99999 ticks, cerca de 83 minutos. Isto costuma impedir uma segunda execução no mesmo combate, mas não é uma marca de «uma vez por encontro»: sair e voltar ao combate não reinicia o temporizador na mesma instância do poder.
local sozinho ativa a verificação, por isso este script não precisa de um valor global. Omitir global também significa que nunca atrasa os outros poderes do boss.
Resolução de problemas
Chaves de tempo de recarga inválidas
Se usar uma chave não reconhecida na secção Cooldowns, aparecerá um aviso nos registos do servidor:
Failed to parse cooldown entry for script name [ScriptName] in config file [FileName]
As chaves válidas são: local, global (não diferenciam maiúsculas de minúsculas)
A verificação acima aplica-se ao processamento normal de eventos. Scripts chamados por RUN_SCRIPT ou por um callback de aterragem verificam as condições, mas não fazem esta mesma verificação de recarga antes de executar. Ainda assim, aplicam as recargas configuradas depois.