Elite Script Abklingzeiten
Abklingzeiten steuern, wann ein Event dasselbe Skript erneut starten darf und wann andere teilnehmende Powers beginnen können. Skripte, die Abklingzeiten umgehen, und Lua-Callbacks ohne Abklingzeitprüfung bleiben unbeeinflusst.
Konfigurationsort
Abklingzeiten werden im Abschnitt Cooldowns eines Elite Scripts konfiguriert:
eliteScript:
ScriptName:
Events:
- [event configuration]
Actions:
- [action configuration]
Cooldowns:
local: [value or range]
global: [value or range]
Der Abschnitt muss exakt Cooldowns heißen. Innerhalb des Abschnitts spielt Groß-/Kleinschreibung keine Rolle (local, Local, LOCAL funktionieren). Verwende ganze Tickzahlen oder Ganzzahlbereiche, keine Dezimalwerte. Eine Dezimalzahl, ein umgekehrter Bereich wie 80~40 oder Text, der keine Zahl ist, führt dazu, dass EliteMobs das gesamte Skript überspringt und Skipped script <name> in <file> protokolliert.
Hinweis zu Einheiten: Alle Abklingzeitwerte werden in Ticks angegeben. In Minecraft gibt es 20 Ticks pro Sekunde, also:
- 20 Ticks = 1 Sekunde
- 60 Ticks = 3 Sekunden
- 100 Ticks = 5 Sekunden
- 99999 Ticks ≈ 83 Minuten
Standardwerte
Wenn der Abschnitt Cooldowns weggelassen wird, sind sowohl local als auch global standardmäßig 0, was bedeutet, dass das Script das Abklingzeitsystem vollständig umgeht.
Abklingzeit-Umgehung
Ein Skript wird durch das Abklingzeitsystem begrenzt, wenn local oder global größer als 0 ist. Ein begrenztes Skript läuft nicht, solange seine eigene lokale Abklingzeit aktiv ist oder sich der Boss in einer globalen Abklingzeit befindet. Fehlen beide Werte oder sind beide null oder negativ, entfällt die Abklingzeitprüfung; Event, Bedingungen und Power-Unterdrückung werden weiterhin geprüft. Verwende nicht negative Konfigurationswerte.
Nur local: 200 zu setzen begrenzt das Skript auf eine Ausführung alle 200 Ticks. Außerdem wartet das Skript dann, solange eine andere Power die globale Abklingzeit des Bosses hält.
Nur global: 20 zu setzen hält andere teilnehmende Powers nach der Ausführung des Skripts 20 Ticks lang zurück. Das Skript wartet auf dieselbe globale Abklingzeit und kann daher ebenfalls 20 Ticks lang nicht erneut laufen.
Diese Umgehung ist beabsichtigt: Sie ermöglicht ereignisgesteuertes Verhalten, das unabhängig vom Abklingzeitstatus des Bosses immer ausgeführt werden soll.
Beispiel:
eliteScript:
AlwaysTeleportOnCombatEnter:
Events:
- EliteMobEnterCombatEvent
Actions:
- action: TELEPORT
Target:
targetType: SELF
FinalTarget:
targetType: SELF_SPAWN
# No Cooldowns section - script always executes when event fires
Abklingzeiten haben zwei Werte:
local
local legt die Zeit in Ticks fest, bevor dasselbe Script erneut ausgeführt werden kann. Beispiel:
Beispiel
local: 60
Ermöglicht die erneute Ausführung der Power nach 3 Sekunden, sofern sich der Boss nicht in einer globalen Abklingzeit befindet und die übrigen Prüfungen erfolgreich sind.
global
global legt die Zeit in Ticks fest, bevor ein anderes Script oder eine andere Kraft erneut ausgeführt werden kann[1]. Beispiel:
Beispiel
global: 20
Blockiert den Start anderer teilnehmender Powers für 1 Sekunde.
[1] global setzt ein bossweites Abklingzeit-Flag. Andere Powers beachten es nur, wenn ihre eigenen Abklingzeitprüfungen daran teilnehmen. EliteMobs-Powers sind EliteScripts oder Lua-Powers. Eine Lua-Power verwendet dasselbe Zeitfenster, indem sie context.cooldowns:set_global(ticks) aufruft und vor dem Start context.cooldowns:global_ready() prüft. Ein häufig ausgelöstes Skript kann langsamere teilnehmende Powers warten lassen.
Eine längere lokale als globale Abklingzeit gibt anderen berechtigten Powers Zeit zur Ausführung. Sie garantiert keinen Wechsel: Jede Power benötigt weiterhin ihr eigenes Event und erfolgreiche Bedingungs- sowie Abklingzeitprüfungen.
Wenn deine Kraft außerdem eine bestimmte Dauer hat, während der sie aktiv ist, solltest du dieses System verwenden, um zu verhindern, dass andere Kräfte gleichzeitig ausgeführt werden und deine Kraft möglicherweise ruinieren.
Abklingzeiten beginnen beim Auslösen der Aktionen, nicht nach deren wait, Wiederholungen oder Wirkungsdauer. Fehlgeschlagene Bedingungen auf Skriptebene starten keine Abklingzeit. Scheitern einzelne Aktionen an ihren eigenen Bedingungen, kann die Abklingzeit des Skripts trotzdem gesetzt werden.
Jede Abklingzeit speichert den Tick, an dem sie endet. Wird eine Abklingzeit erneut angewendet, bleibt der spätere Endtick erhalten, sodass eine kürzere globale Abklingzeit einer anderen Power eine längere nie vorzeitig beendet. Lokale Abklingzeiten verhalten sich genauso, wenn ein anderes Skript dasselbe Skript direkt aufruft.
Zufallswerte
Sowohl die local- als auch die global-Abklingzeit unterstützen Zufallswerte mithilfe der Bereichssyntax. Dadurch können Abklingzeitdauern variieren, was dem Boss-Verhalten Unvorhersehbarkeit verleiht.
Beispiel:
Cooldowns:
local: 40~80
global: 10~30
Setzt die lokale Abklingzeit zufällig auf 40 bis 80 Ticks (2-4 Sekunden) und die globale Abklingzeit zufällig auf 10 bis 30 Ticks (0,5-1,5 Sekunden).
Die aktuelle Implementierung wählt jeden Bereichswert beim Erstellen der Skript-Laufzeit aus und speichert ihn auf dieser Power-Instanz. Bei jeder Anwendung der Abklingzeit wird der Bereich nicht erneut ausgewürfelt.
Skripte mit Abklingzeiten nur einmal ausführen
Um sicherzustellen, dass Scripts nur einmal ausgelöst werden, obwohl ein Event verwendet wird, das während eines Kampfes mehrfach auftreten kann, setze die lokale Abklingzeit auf eine hohe Zahl, z. B. 99999. Dieses Beispiel veranschaulicht das Konzept:
Beispiel
eliteScript:
SetMeOnFireOnlyOnce:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 60
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 99999
In diesem Szenario löst das EliteMobDamagedByPlayerEvent die SET_ON_FIRE-Aktion aus. Ohne Abklingzeiten würde die Aktion jedes Mal aktiviert, wenn der Spieler den Mob trifft.
Mit einer lokalen Abklingzeit von 99999 kann die Aktion höchstens einmal alle 99999 Ticks, also etwa 83 Minuten, ausgelöst werden. Das verhindert gewöhnlich eine zweite Ausführung während eines Kampfes, ist aber kein Flag für einmalige Ausführung pro Begegnung: Verlassen und erneutes Betreten des Kampfes setzt diesen Timer auf derselben Power-Instanz nicht zurück.
local allein aktiviert die Prüfung, daher braucht dieses Skript keinen global-Wert. Ohne global hält es außerdem die übrigen Powers des Bosses nie zurück.
Fehlerbehebung
Ungültige Abklingzeit-Schlüssel
Wenn du einen nicht erkannten Schlüssel im Abschnitt Cooldowns verwendest, erscheint eine Warnung in den Server-Logs:
Failed to parse cooldown entry for script name [ScriptName] in config file [FileName]
Gültige Schlüssel sind: local, global (ohne Beachtung der Groß-/Kleinschreibung)
Die oben beschriebene Abklingzeitprüfung gilt für die gewöhnliche Event-Ausführung. Über RUN_SCRIPT oder einen Lande-Callback aufgerufene Skripte prüfen ihre Bedingungen, führen vor dem Start aber nicht dieselbe Abklingzeitprüfung aus. Anschließend wenden sie ihre konfigurierten Abklingzeiten trotzdem an.