Tiempos de Reutilización de Elite Script
Los tiempos de reutilización controlan cuándo un evento puede volver a iniciar el mismo script y cuándo pueden comenzar otros poderes que participen en este sistema. No afectan a los scripts que los omiten ni a los callbacks Lua sin una comprobación de tiempo de reutilización.
Ubicación de la configuración
Los tiempos de reutilización se configuran dentro de la sección Cooldowns de un elite script:
eliteScript:
ScriptName:
Events:
- [event configuration]
Actions:
- [action configuration]
Cooldowns:
local: [value or range]
global: [value or range]
La sección debe llamarse Cooldowns, exactamente con esas mayúsculas. Dentro, las claves no distinguen mayúsculas de minúsculas (local, Local, LOCAL funcionan). Usa cantidades enteras de ticks o intervalos de enteros, no decimales. Un decimal, un intervalo invertido como 80~40 o un texto que no sea un número hacen que EliteMobs omita todo el script y registre Skipped script <name> in <file>.
Nota sobre las unidades: Todos los valores de tiempo de reutilización se especifican en ticks. En Minecraft, hay 20 ticks por segundo, por lo que:
- 20 ticks = 1 segundo
- 60 ticks = 3 segundos
- 100 ticks = 5 segundos
- 99999 ticks ≈ 83 minutos
Valores predeterminados
Si se omite la sección Cooldowns, tanto local como global toman el valor predeterminado de 0, lo que significa que el script omite por completo el sistema de tiempos de reutilización.
Omisión del tiempo de reutilización
El sistema limita un script cuando local o global es mayor que 0. Un script limitado no se ejecuta mientras su propio tiempo de reutilización local esté activo ni mientras el jefe esté en un tiempo de reutilización global. Si ambos valores faltan, son cero o negativos, se omite la comprobación de tiempo de reutilización; siguen aplicándose el evento, las condiciones y la supresión de poderes. Usa valores no negativos en la configuración.
Configurar solo local: 200 limita el script a una ejecución cada 200 ticks. Además, hace que el script espere mientras cualquier otro poder mantenga el tiempo de reutilización global del jefe.
Configurar solo global: 20 retrasa otros poderes participantes durante 20 ticks después de ejecutarse el script. El script espera a ese mismo tiempo global, así que tampoco puede volver a ejecutarse durante 20 ticks.
Esta omisión es deliberada: permite comportamientos activados por eventos que deben ejecutarse siempre, independientemente del tiempo de reutilización del jefe.
Ejemplo:
eliteScript:
AlwaysTeleportOnCombatEnter:
Events:
- EliteMobEnterCombatEvent
Actions:
- action: TELEPORT
Target:
targetType: SELF
FinalTarget:
targetType: SELF_SPAWN
# No Cooldowns section - script always executes when event fires
Los tiempos de reutilización tienen dos valores:
local
local establece el tiempo, en ticks, antes de que el mismo script pueda volver a ocurrir. Ejemplo:
Ejemplo
local: 60
Permite que el poder vuelva a ejecutarse después de 3 segundos, siempre que el jefe no esté en un tiempo de reutilización global y supere las demás comprobaciones.
global
global establece el tiempo, en ticks, antes de que cualquier otro script o poder pueda volver a ocurrir[1]. Ejemplo:
Ejemplo
global: 20
Impide que otros poderes participantes se inicien durante 1 segundo.
[1] global establece una marca de tiempo de reutilización para todo el jefe. Otros poderes solo la respetan cuando sus propias comprobaciones participan en el sistema. Los poderes de EliteMobs están escritos como EliteScripts o poderes Lua; un poder Lua participa en la misma ventana llamando a context.cooldowns:set_global(ticks) y comprobando context.cooldowns:global_ready() antes de iniciarse. Un script que se active con frecuencia puede mantener a la espera a poderes participantes más lentos.
Un tiempo de reutilización local más largo que el global da tiempo a otros poderes elegibles para ejecutarse. No garantiza alternancia: cada poder sigue necesitando que se produzca su propio evento y que se cumplan sus condiciones y comprobaciones de reutilización.
Además, si tu poder tiene una duración específica durante la cual está activo, debes usar este sistema para evitar que otros poderes se ejecuten simultáneamente y potencialmente arruinen tu poder.
Los tiempos de reutilización comienzan cuando el script despacha sus acciones, no cuando terminan su wait, repeticiones o duración. Si fallan las condiciones del script, no se inicia el tiempo de reutilización; si fallan las condiciones de acciones individuales, el tiempo del script puede aplicarse igualmente.
Cada tiempo de reutilización guarda el tick en el que termina. Al aplicar de nuevo un tiempo de reutilización se conserva el tick final más tardío, así que un tiempo global más corto de otro poder nunca acorta uno más largo. Los tiempos locales se comportan igual cuando otro script llama directamente al mismo script.
Aleatorización
Tanto los tiempos de reutilización local como global admiten la aleatorización usando la sintaxis de rango. Esto permite que las duraciones de los tiempos de reutilización varíen, añadiendo imprevisibilidad al comportamiento del jefe.
Ejemplo:
Cooldowns:
local: 40~80
global: 10~30
Establece el tiempo de reutilización local para que sea aleatoriamente entre 40 y 80 ticks (2-4 segundos) y el tiempo de reutilización global para que sea aleatoriamente entre 10 y 30 ticks (0.5-1.5 segundos).
La implementación actual selecciona cada valor del intervalo al construir el entorno de ejecución del script y lo guarda en esa instancia del poder. No vuelve a sortearlo cada vez que aplica el tiempo de reutilización.
Ejecutar scripts una sola vez con tiempos de reutilización
Para asegurarte de que los scripts se activen solo una vez mientras sigues usando un Evento que puede ocurrir varias veces durante una pelea, establece el tiempo de reutilización local en un número alto, como 99999. Este ejemplo demuestra el concepto:
Ejemplo
eliteScript:
SetMeOnFireOnlyOnce:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 60
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 99999
En este escenario, el EliteMobDamagedByPlayerEvent activa la acción SET_ON_FIRE. Sin tiempos de reutilización, la acción se activaría cada vez que el jugador golpea al mob.
Con un tiempo de reutilización local de 99999, la acción puede activarse como máximo una vez cada 99999 ticks, unos 83 minutos. Esto suele impedir una segunda ejecución durante una pelea, pero no es una marca de una vez por encuentro: salir y volver a entrar en combate no restablece este temporizador en la misma instancia del poder.
local por sí solo activa la comprobación, así que este script no necesita un valor global. Omitir global también significa que nunca retrasa los demás poderes del jefe.
Solución de problemas
Claves de tiempo de reutilización no válidas
Si usas una clave no reconocida en la sección Cooldowns, aparecerá una advertencia en los registros del servidor:
Failed to parse cooldown entry for script name [ScriptName] in config file [FileName]
Las claves válidas son: local, global (no distinguen entre mayúsculas y minúsculas)
La comprobación de tiempos de reutilización descrita arriba se aplica al despacho ordinario de eventos. Los scripts invocados mediante RUN_SCRIPT o un callback de aterrizaje comprueban sus condiciones, pero no realizan esta misma comprobación de tiempo de reutilización antes de ejecutarse. Aun así, aplican sus tiempos de reutilización configurados después.