Temps de Recharge des Elite Scripts
Les temps de recharge contrôlent quand un événement peut relancer le même script et quand les autres pouvoirs participants peuvent démarrer. Les scripts qui les contournent et les callbacks Lua sans contrôle de recharge ne sont pas affectés.
Emplacement de Configuration
Les temps de recharge sont configurés dans la section Cooldowns d'un elite script :
eliteScript:
ScriptName:
Events:
- [event configuration]
Actions:
- [action configuration]
Cooldowns:
local: [value or range]
global: [value or range]
La section doit s'appeler exactement Cooldowns. À l'intérieur, les clés sont insensibles à la casse (local, Local, LOCAL fonctionnent). Utilisez des nombres entiers de ticks ou des plages d'entiers, pas des valeurs décimales. Une valeur décimale, une plage inversée comme 80~40 ou un texte qui n'est pas un nombre fait ignorer tout le script par EliteMobs, qui enregistre Skipped script <name> in <file>.
Note sur les Unités : Toutes les valeurs de temps de recharge sont spécifiées en ticks. Dans Minecraft, il y a 20 ticks par seconde, donc :
- 20 ticks = 1 seconde
- 60 ticks = 3 secondes
- 100 ticks = 5 secondes
- 99999 ticks ≈ 83 minutes
Valeurs par Défaut
Si la section Cooldowns est omise, local et global sont tous deux à 0 par défaut, ce qui signifie que le script contourne entièrement le système de temps de recharge.
Contournement du Temps de Recharge
Un script est soumis au système de recharge lorsque local ou global est supérieur à 0. Un tel script ne s'exécute pas tant que sa propre recharge locale est active ou que le boss est en recharge globale. Si les deux valeurs manquent, valent zéro ou sont négatives, le contrôle de recharge est ignoré ; les vérifications d'événement, de conditions et de suppression des pouvoirs restent actives. Utilisez des valeurs non négatives.
Définir uniquement local: 200 limite le script à une exécution tous les 200 ticks. Le script attend aussi tant qu'un autre pouvoir maintient la recharge globale du boss.
Définir uniquement global: 20 retient les autres pouvoirs participants pendant 20 ticks après l'exécution du script. Le script attend cette même recharge globale : il ne peut donc pas non plus se relancer avant 20 ticks.
Ce contournement est délibéré : il permet des comportements déclenchés par événement qui doivent toujours s'exécuter quel que soit l'état de temps de recharge du boss.
Exemple :
eliteScript:
AlwaysTeleportOnCombatEnter:
Events:
- EliteMobEnterCombatEvent
Actions:
- action: TELEPORT
Target:
targetType: SELF
FinalTarget:
targetType: SELF_SPAWN
# No Cooldowns section - script always executes when event fires
Les temps de recharge ont deux valeurs :
local
local définit le temps, en ticks, avant que le même script puisse se relancer. Exemple :
Exemple
local: 60
Permet de relancer le pouvoir après 3 secondes, à condition que le boss ne soit pas en recharge globale et que les autres contrôles réussissent.
global
global définit le temps, en ticks, avant que tout autre script ou pouvoir puisse se relancer[1]. Exemple :
Exemple
global: 20
Empêche les autres pouvoirs participants de démarrer pendant 1 seconde.
[1] global définit un indicateur de recharge pour tout le boss. Les autres pouvoirs ne le respectent que si leurs propres contrôles participent au système. Les pouvoirs EliteMobs sont des EliteScripts ou des pouvoirs Lua ; un pouvoir Lua utilise la même période en appelant context.cooldowns:set_global(ticks) et en vérifiant context.cooldowns:global_ready() avant de démarrer. Un script souvent déclenché peut faire attendre les pouvoirs participants plus lents.
Une recharge locale plus longue que la globale donne du temps aux autres pouvoirs admissibles. Elle ne garantit pas l'alternance : chaque pouvoir doit toujours recevoir son événement et satisfaire ses conditions et contrôles de recharge.
De plus, si votre pouvoir a une durée spécifique pendant laquelle il est actif, vous devriez utiliser ce système pour empêcher d'autres pouvoirs de s'exécuter simultanément et de potentiellement ruiner votre pouvoir.
Les temps de recharge commencent lorsque le script lance ses actions, et non après leur wait, leurs répétitions ou leur durée. Des conditions de script non satisfaites ne démarrent pas de recharge, mais des actions individuelles qui échouent à leurs propres conditions peuvent tout de même laisser la recharge du script s'appliquer.
Chaque recharge enregistre le tick auquel elle se termine. Appliquer de nouveau une recharge conserve le tick de fin le plus tardif : une recharge globale plus courte venant d'un autre pouvoir n'écourte donc jamais une recharge plus longue. Les recharges locales se comportent de la même façon lorsqu'un autre script appelle directement le même script.
Aléatoire
Les temps de recharge local et global supportent tous deux l'aléatoire en utilisant la syntaxe de plage. Cela permet aux durées de temps de recharge de varier, ajoutant de l'imprévisibilité au comportement du boss.
Exemple :
Cooldowns:
local: 40~80
global: 10~30
Définit le temps de recharge local aléatoirement entre 40 et 80 ticks (2-4 secondes) et le global aléatoirement entre 10 et 30 ticks (0,5-1,5 secondes).
L'implémentation actuelle choisit chaque valeur de plage lors de la construction de l'instance du script et la conserve sur cette instance de pouvoir. Elle ne refait pas le tirage à chaque application de la recharge.
Exécuter des Scripts une Seule Fois avec les Temps de Recharge
Pour s'assurer que les scripts ne se déclenchent qu'une seule fois tout en utilisant un Événement qui peut se produire plusieurs fois pendant un combat, définissez le temps de recharge local à un nombre élevé, comme 99999. Cet exemple illustre le concept :
Exemple
eliteScript:
SetMeOnFireOnlyOnce:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 60
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 99999
Dans ce scénario, l'EliteMobDamagedByPlayerEvent déclenche l'action SET_ON_FIRE. Sans temps de recharge, l'action s'activerait à chaque fois que le joueur frappe le mob.
Avec local: 99999, l'action se déclenche au maximum une fois tous les 99999 ticks, soit environ 83 minutes. Cela évite généralement une deuxième exécution dans le même combat, mais ce n'est pas un indicateur « une fois par rencontre » : quitter puis reprendre le combat ne réinitialise pas cette minuterie sur la même instance de pouvoir.
local suffit à lui seul à armer la barrière : ce script n'a donc pas besoin de valeur global. Omettre global signifie aussi qu'il ne retient jamais les autres pouvoirs du boss.
Dépannage
Clés de Temps de Recharge Invalides
Si vous utilisez une clé non reconnue dans la section Cooldowns, un avertissement apparaîtra dans les logs du serveur :
Failed to parse cooldown entry for script name [ScriptName] in config file [FileName]
Les clés valides sont : local, global (insensible à la casse)
Le contrôle de recharge décrit ci-dessus concerne la distribution normale des événements. Les scripts appelés par RUN_SCRIPT ou par un callback d'atterrissage vérifient leurs conditions, mais pas ce même contrôle de recharge avant l'exécution. Ils appliquent tout de même leurs recharges configurées ensuite.