Zum Hauptinhalt springen

Elite-Skript-Ereignisse

EliteScripts sind ereignisbasiert. Das bedeutet, dass sie ausgelöst werden, wenn ein bestimmtes Ereignis eintritt. Die folgenden sind die derzeit gültigen Ereignisse:

EreignisDetailsDirektes Ziel [?]
EliteMobDamagedByEliteMobEventElite wurde von einem anderen Elite beschädigtLebende Entity des angreifenden Elites
EliteMobDamagedByPlayerEventElite wurde von einem Spieler beschädigtAngreifender Spieler
EliteMobDamagedEventElite wurde von irgendetwas beschädigt❌
EliteMobDeathEventTod der Elite❌
EliteMobEnterCombatEventElite beginnt Kampf mit SpielerKampfbeteiligter Spieler
EliteMobExitCombatEventElite verlässt den Kampf❌
EliteMobHealEventElite heilt sich (einschließlich vollständiger Heilung)❌
EliteMobSpawnEventElite erscheint❌
EliteMobTargetPlayerEventElite visiert Spieler anAnvisierter Spieler
PlayerDamagedByEliteMobEventElite beschädigt SpielerBeschädigter Spieler
ElitePhaseSwitchEventBoss erscheint durch Phasenwechsel❌
ZoneEnterEvent (ScriptZoneEnterEvent)Entität betritt Zone. Erfordert eine festgelegte Zone!Entität, die die Zone betreten hat
ZoneLeaveEvent (ScriptZoneLeaveEvent)Entität verlässt Zone. Erfordert eine festgelegte Zone!Entität, die die Zone verlassen hat

„Elite“ bezeichnet eine von EliteMobs als Elite erfasste Entity, einschließlich Bossen und Elite-Verstärkungen. Hinweis: ZoneEnterEvent und ZoneLeaveEvent sind rechenintensiv, bitte verwende diese sparsam!

Direct Target wird von den Skript-Zielen verwendet, mehr dazu hier.

Schreibe in YAML ZoneEnterEvent und ZoneLeaveEvent. Die eingeklammerten Namen ScriptZoneEnterEvent und ScriptZoneLeaveEvent bezeichnen die Java-Events und sind keine akzeptierten YAML-Aliasse. Das Abbrechen eines abbrechbaren Events stoppt nachfolgende Skripte und Lua-Powers in dessen Ausführungsreihenfolge, aber nicht die verbleibenden Aktionen des bereits laufenden Skripts. Zonen-Eintritts- und Austrittsereignisse selbst sind nicht abbrechbar.

EliteMobDamagedEvent erfasst Schaden aus beliebiger Quelle; EliteMobDamagedByPlayerEvent und EliteMobDamagedByEliteMobEvent erfassen ihre jeweiligen Quellen. Sie werden separat ausgelöst und schließen sich nicht gegenseitig aus. Wer ein allgemeines und ein spezifisches Schadensereignis angibt, kann dasselbe Skript bei einem Treffer mehrfach auslösen, sofern die Abklingzeiten es zulassen. Bereits vor dem allgemeinen Listener abgebrochener Schaden löst ihn nicht aus.

Hinweis: Event-Namen müssen Zeichen für Zeichen exakt übereinstimmen. elitemobdeathevent oder ELITEMOBDEATHEVENT werden mit einer Konsolenwarnung abgelehnt; nur EliteMobDeathEvent funktioniert. Auch die Abschnittsnamen auf Skriptebene unterscheiden Groß- und Kleinschreibung: Events, Actions, Zone, Conditions und Cooldowns müssen genau so geschrieben werden. Ein unter einer Aktion verschachtelter Conditions-Block wird in beliebiger Schreibweise gelesen. Alles innerhalb dieser Abschnitte (targetType, radius, borderRadius, isAlive, Target, ...) ignoriert die Groß- und Kleinschreibung, und jeder Enum-Wert ist eine übliche, exakt geschriebene UPPER_SNAKE_CASE-Konstante.

Diese Events steuern auch Lua on_zone_enter / on_zone_leave

Ein hier eingetragenes ZoneEnterEvent oder ZoneLeaveEvent startet den Zonen-Listener des Bosses, der jeden Tick läuft. Nur dieser Listener löst die obersten Hooks on_zone_enter / on_zone_leave einer Lua-Power desselben Bosses aus. Das eigene context.zones:watch_zone(...) einer Lua-Power löst sie nicht aus.

ZoneEnterEvent und ZoneLeaveEvent lösen Aktionen aus, wenn Entities die Vereinigung der erzeugten Zonenformen des Skripts betreten oder verlassen. Ihr DIRECT_TARGET ist die ein- oder austretende Entity. Der Scanner selbst hat kein direktes Ziel; verwende daher DIRECT_TARGET nicht zur Definition seiner Zone. Feste Positionen sowie SELF / SELF_SPAWN eignen sich als einfache Zonenursprünge. Ein Selektor wie NEARBY_PLAYERS kann Ursprünge ebenfalls ohne direktes Ziel auflösen. Dann bewegt sich die Zone mit den ausgewählten Spielern, und Ein-/Austritte spiegeln die Zugehörigkeit zum vereinigten beweglichen Bereich wider.

Der Zonen-Listener scannt jeden Tick, selbst wenn Skript-Abklingzeiten den Start von Aktionen verhindern. Abklingzeiten verringern die Anzahl der Aktionsausführungen, nicht die Kosten der Erkennung der Zonenmitgliedschaft. Ein neu gestarteter Listener behandelt Entities, die beim ersten Scan bereits innerhalb der Zone sind, als eintretend.

Zonenereignisse identifizieren den Boss und die ein- oder austretende Entity, aber nicht das ursprüngliche Skript oder die Zone. Ein von einem Listener erkannter Übergang wird an alle passenden Skripte und Lua-Powers dieses Bosses weitergegeben. Mehrere Listener können deshalb wiederholte oder zonenübergreifende Aktivierungen verursachen. Der filter der Zone bestimmt, welche lebenden Entities geprüft werden; standardmäßig gilt PLAYER.

Verwende einen Events-Abschnitt pro Skript und liste die benötigten unterstützten Auslöser auf. Ein Skript ohne Ereignisse startet nicht automatisch, kann aber von einem anderen Skript aufgerufen werden:

Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
- EliteMobTargetPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20

Dieses Skript lässt die Elite springen, wenn sie von einem Spieler getroffen wird oder wenn sie einen Spieler anvisiert.