Elite Script Ziele
Ziele sind ein zentraler Bestandteil von Elite Scripts und sind erforderlich, damit Aktionen und Zonen funktionieren.
Zieltypen
Zieltypen legen fest, welche Entitäten oder Standorte von einem Script anvisiert werden.
| Zieltyp | Details | Besonderheiten |
|---|---|---|
NEARBY_PLAYERS | Spieler in Reichweite | Erfordert range |
NEARBY_MOBS | Mobs in Reichweite | Erfordert range |
NEARBY_ELITES | Elites in Reichweite | Erfordert range |
WORLD_PLAYERS | Spieler in der Welt | ❌ |
ALL_PLAYERS | Spieler auf dem Server | ❌ |
DIRECT_TARGET | Spieler im Event | Erfordert kompatibles Event |
SELF | Elite, die die Fähigkeit benutzt | ❌ |
SELF_SPAWN | Zielt auf die Spawn-Position eines Bosses | ❌ |
LOCATION | Spezifischer Standort | Erfordert location |
LOCATIONS | Mehrere spezifische Standorte | Erfordert locations |
ZONE_FULL | Ziele innerhalb der Zone | Erfordert Zone |
ZONE_BORDER | Ziele am Rand der Zone | Erfordert Zone |
ACTION_TARGET | Übernimmt die Ziele von einer Aktion. | Kann nur für Aktions-Bedingungen und Relative Vektoren verwendet werden!! |
LANDING_LOCATION | Zielt auf den Standort, auf den ein Block gefallen ist. | Kann nur für die SPAWN_FALLING_BLOCK Aktion verwendet werden! |
INHERIT_SCRIPT_TARGET | Übernimmt das Ziel von dem Script, das dieses Script ausführt | Kann nur ausgeführt werden, wenn das Script von einem anderen Script aufgerufen wurde! |
INHERIT_SCRIPT_ZONE_FULL | Ziele innerhalb der Zone, die vom Script übernommen wurde, das dieses Script ausführt | Erfordert Zone in dem Script, das dieses Script aufruft! |
INHERIT_SCRIPT_ZONE_BORDER | Ziele am Rand der Zone, die vom Script übernommen wurde, das dieses Script ausführt | Erfordert Zone in dem Script, das dieses Script aufruft! |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hallo Welt!"
Dies sendet eine Nachricht an das Ziel. Da das Ziel auf ALL_PLAYERS gesetzt ist, wird diese Nachricht an alle Online-Spieler gesendet.
Gemeinsame Attribute
Die folgenden Einstellungen können auf alle Ziele angewendet werden.
| Werte | Details | Besonderheiten |
|---|---|---|
offset | Setzt den Versatz für den Zielstandort. | Kann keine Entitäten anvisieren! |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"
Dies lässt einen Blitz 2 Blöcke über dem Boss einschlagen. Beachten Sie, dass STRIKE_LIGHTNING Standorte verwendet und keine Entitäten beeinflusst, daher können Versätze verwendet werden.
Sie können keinen Versatz setzen, um eine Nachricht zu senden, da Nachrichten an Spieler gesendet werden. Sie können jedoch einen Versatz für eine Zone setzen, die dann Entitäten anvisieren kann.
range
Legt die Reichweite fest, um nach nahen Spielern im NEARBY_PLAYERS Zieltyp zu suchen.
| Werte | Details | Standard |
|---|---|---|
range | Legt die Reichweite in Blöcken fest, um nach Spielerzielen zu suchen. | 20.0 |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Spieler im Umkreis von 25 Blöcken anvisiert!"
Dies sendet eine Nachricht an Spieler im Umkreis von 25 Blöcken vom Boss, wenn der Boss stirbt.
location
Legt den Standort für den LOCATION Zieltyp fest.
| Werte | Details | Standard |
|---|---|---|
location | Legt den Weltstandort fest, der anvisiert wird. | none |
Dies verwendet das Format location: weltname,x,y,z,pitch,yaw für den Standort.
Beachten Sie, dass same_as_boss ein gültiger Platzhalter für den Weltnamen ist, sodass same_as_boss,100,64,100,0,0 ein gültiger Standort wäre, der dieselbe Welt anvisiert, in der sich der Boss befindet.
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATION
location: "myWorld,100,64,200,0,0"
Dies erzeugt einen Blitzeinschlag am Standort x=100, y=64, z=200 einer Welt namens myWorld.
locations
Legt die Standorte für den LOCATIONS Zieltyp fest.
| Werte | Details | Standard |
|---|---|---|
locations | Legt die Liste der Weltstandorte fest, die anvisiert werden. | none |
Dies verwendet das Format weltname,x,y,z,pitch,yaw für den Standort.
Beachten Sie, dass same_as_boss ein gültiger Platzhalter für den Weltnamen ist, sodass same_as_boss,100,64,100,0,0 ein gültiger Standort wäre, der dieselbe Welt anvisiert, in der sich der Boss befindet.
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATIONS
locations:
- "myWorld,100,64,200,0,0"
- "same_as_boss,-100,12,130,0,0"
Dies erzeugt einen Blitzeinschlag am Standort x=100, y=64, z=200 einer Welt namens myWorld und einen weiteren Blitzeinschlag in derselben Welt wie der Boss am Standort x=-100, y=12 und z=130.
Zonen anvisieren
Zonen haben mehrere Ziele, und es ist wichtig zu verstehen, wie sie funktionieren, um Elite Scripting in vollem Umfang nutzen zu können.
Zonen funktionieren in zwei Teilen:
Teil 1 - Festlegen, wo die Zone hingeht
Zonen müssen wissen, wo sie platziert werden sollen, und dazu verwenden Sie das Zielsystem genauso wie für jeden anderen standortbasierten Effekt, wie z.B. einen Blitzeinschlag.
Beispiel
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Dies erzeugt eine zylindrische Zone um den Boss. Beachten Sie, dass in diesem Beispiel noch keine Aktionen festgelegt sind, das wird unten behandelt.
Einige Zonen, wie STATIC_RAY, haben zwei oder mehr Ziele. Dies liegt daran, dass Strahlen Linien sind und Linien durch zwei Punkte definiert werden. Dies wird ausführlicher auf der Zonenseite behandelt, aber sie funktionieren alle grundsätzlich auf die gleiche Weise.
Teil 2 - Das Innere der Zone anvisieren
Jetzt, da die Zone weiß, wo sie sich befindet, muss die Aktion wissen, dass ihr Ziel die Zone ist, die wir definiert haben. Dafür sind targetType: ZONE_FULL und targetType:ZONE_BORDER da.
Beispiel
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
Mit derselben Zone aus dem ersten Teil fügen wir nun die Aktion hinzu. Das Ziel für diese Aktion ist ZONE_FULL, was bedeutet, dass Partikel innerhalb der gesamten Zone erzeugt werden.
Beachten Sie, dass ZONE_BORDER nicht für jede Zone verfügbar ist. Mehr dazu auf der Seite Script-Zonen.
Zonen-Tracking
Legt fest, ob sich die Zone mit dem Ziel bewegt, z.B. ob sich die Zone bewegt, wenn sich der Boss bei targetType: SELF bewegt.
| Werte | Details | Standard |
|---|---|---|
track | Legt fest, ob sich die Zone mit dem Ziel bewegt. | true |
Beachten Sie, dass animierbare Zonen nicht tracken können. Mehr dazu hier.
Beispiel
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
Mit demselben Beispiel aus Teil 1 und Teil 2 ist die Zone nun so eingestellt, dass sie nicht trackt. Das bedeutet, dass die Zone am Standort des Bosses erscheint, aber auch wenn sich der Boss weiterbewegt, bleibt die Zone dort, wo sie ursprünglich erschienen ist.
Beachten Sie schließlich, dass, wenn eine Zone so eingestellt ist, dass sie nicht trackt, sie ihren Standort in dem Moment registriert, in dem das Script aufgerufen wird.
Als Beispiel: Wenn Sie eine Warnphase und eine Schadensphase für Ihr Script haben möchten, müssen Sie sicherstellen, dass Sie alle Aktionen zu Beginn ausführen und individuell eine Wartezeit für alle schadensbezogenen Aktionen setzen, die Sie später ausführen möchten. Sie sollten nicht ein ganzes Script verzögern, das Sie über RUN_SCRIPT aufrufen, aus technischen Gründen.
Das Folgende ist ein korrektes Beispiel für eine Fähigkeit mit einer Warn- und einer Schadensphase aus dem Frost Palace Sanctum.
Beispiel
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
- action: SPAWN_PARTICLE
wait: 60
times: 13
repeatEvery: 3
particles:
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: -0.5
speed: 0.2
Target:
targetType: ZONE_FULL
track: false
- action: RUN_SCRIPT
scripts:
- DamageCylinder
- action: PLAY_ANIMATION
sValue: fire_zone
Target:
targetType: SELF
- action: SET_MOB_AI
duration: 100
bValue: false
Target:
targetType: SELF
Cooldowns:
local: 1200
global: 300
DamageCylinder:
Zone:
radius: 10.0
shape: CYLINDER
height: 10
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
offset: 0,-1,0
Actions:
- action: DAMAGE
wait: 60
repeatEvery: 10
times: 4
multiplier: 4
Target:
targetType: ZONE_FULL
track: false
- action: SET_ON_FIRE
wait: 60
duration: 80
Target:
targetType: ZONE_FULL
track: false
Dieses Script macht viele Dinge, ist aber in zwei klare Scripts unterteilt: VisualCylinder und DamageCylinder.
VisualCylinder wird zuerst ausgeführt und hat die RUN_SCRIPT Aktion, die sofort auch den DamageCylinder gleichzeitig mit dem VisualCylinder ausführt.
Allerdings ist jede einzelne Aktion in DamageCylinder so eingestellt, dass sie 60 Ticks oder 3 Sekunden wartet.
Das bedeutet, dass der Boss eine Warnphase von 3 Sekunden hat und dann eine Schadensphase ausführt, und obwohl die Zonen so eingestellt sind, dass sie nicht tracken, befinden sich die Warnzone und die Schadenszone am selben Standort.
Zonenspezifische Zieleigenschaften
Zonen haben die folgenden spezifischen Eigenschaften:
coverage
Legt den Prozentsatz der Zone fest, der tatsächlich für die Aktion verwendet wird. Funktioniert nur für Standortziele (funktioniert nicht beim Anvisieren von Spielern oder anderen Entitäten).
| Werte | Details | Standard |
|---|---|---|
coverage | Legt den Prozentsatz der Zone fest, der abgedeckt wird. Sie können diesen Wert randomisieren, indem Sie ~ verwenden, Beispiel: 1.0~0.3. | 1.0 |
Beispiel
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
coverage: 0.5
In diesem Fall werden nur 50% der Zone mit Partikeln bedeckt.
Ziele vererben
Wenn ein Script ein anderes Script ausführt (oder dieses Script "aufruft"), ist es möglich, Zonen- und Zielinformationen vom ersten Script an das zweite zu übergeben.
Beispielverwendungen
- Verbesserte Script-Runner
Script-Runner sind Scripts, deren einzige Funktion darin besteht, viele andere Scripts auszuführen. Sie werden verwendet, um die Verwaltung von Scripts zu erleichtern, insbesondere beim Umgang mit mehreren Scripts, die präzises Timing erfordern.
Mit Zielvererbung können mehrere Scripts dieselbe Zone oder dasselbe Ziel verwenden, wodurch möglicherweise Hunderte von Zeilen sich wiederholenden Scriptings eingespart werden.
- Matroschka-Zielfilterung / Russische Puppen-Zielfilterung
Filterbedingungen können auf Ziele in einer Aktion angewendet werden. Durch Übergabe der Ziele an ein anderes Script mit anderen Filtern wird es möglich, die Bedingungen zu schichten und verschiedene Effekte auf denselben Pool von Zielen basierend auf zunehmend spezifischen Kriterien anzuwenden.
Als Beispiel ist es möglich, eine Zone zu erstellen, die nach Spielern sucht, und eine Aktion zu erstellen, die überprüft, ob alle Spieler in der Zone ein bestimmtes Tag haben. Die gültigen Ziele können dann an ein anderes Script übergeben werden, wo eine weitere Aktion dann eine zufällige Bedingungsprüfung durchführen und einen Effekt basierend auf dieser Chance anwenden kann. Die Ziele können dann weiter an ein anderes Script übergeben werden, wo eine weitere Bedingung überprüfen kann, ob die Ziele noch am Leben sind, und ein spezielles Verhalten ausführen kann, wenn sie tot sind.
Dies sind natürlich nur Beispiele. Es ist ein hochflexibles System.
- Komplexe Zonen
Schließlich ist es möglich, Ziele zu schichten, um komplexe Zonen zu erstellen, optional unter Verwendung von Bedingungen, falls erforderlich, und es ist sogar möglich, semi-randomisierte Zonen unter Verwendung der Script-Bedingungen und der Fähigkeit zu erstellen, nur eines der aufgelisteten Scripts aus den Script-Aktionen auszuführen.
Hinweis: Für diesen Abschnitt bezieht sich "Eltern-Script" auf das Script, das das "vererbende Script" ausführt, welches das Script ist, das die vererbten Ziele verwenden wird.
Bei Verwendung der Zielvererbung ist es wichtig, das Eltern-Script sorgfältig zu betrachten, um sicherzustellen, dass die korrekten Daten weitergegeben werden.
INHERIT_SCRIPT_TARGET
Bei Verwendung von INHERIT_SCRIPT_TARGET werden die Ziele vom Eltern-Script an das vererbende Script weitergegeben. Dies hat einige Vorbehalte:
-
Beim Übergeben von Entitätszielen ist es möglich, Aktionen auszuführen, die Standorte erfordern (wie das Erzeugen von Partikeln), da der Standort der Entitäten verwendet wird. Es ist natürlich auch möglich, Aktionen zu verwenden, die Entitäten erfordern.
-
Beim Übergeben von Standortzielen ist es nur möglich, Standorte zu verwenden. Der einzige Weg, eine Entität von einem Standort zu erhalten, besteht darin, an diesem Standort eine Zone zu erstellen und nach Entitäten zu suchen. Während es also nicht unmöglich ist, einen Standort zu übergeben und dann Entitäten zu erhalten, erfordert dies etwas zusätzliche Arbeit.
Zonen vererben
Bei Verwendung von INHERIT_SCRIPT_ZONE_FULL oder INHERIT_SCRIPT_ZONE_BORDER ist es unerlässlich, dass das Eltern-Script eine Zone definiert, sonst kann das vererbende Script nicht korrekt ausgeführt werden.
Zusätzlich können Zonen optional getrackt werden. Dies wird auch zusammen mit der Zone weitergegeben.
-
Eine nicht-getrackte Zone erstellt immer eine Zone dort, wo sie vom vererbenden Script definiert wird. Das bedeutet, dass die Zoneneinstellungen von den Aktionen in den vererbenden Scripts verwendet werden, um jedes Mal, wenn eine Aktion ausgeführt wird, brandneue Zonen zu erstellen, und der Standort dieser Zonen wird durch die Aktion definiert.
-
Eine getrackte Zone kann denselben exakten Zonenstandort an alle vererbenden Scripts weitergeben, wenn das Eltern-Script auf
ZONE_FULLoderZONE_BORDERals Ziel gesetzt ist. Das bedeutet, dass jedes Script an denselben Standorten agiert.