Zum Hauptinhalt springen

Elite Script Ziele

Ziele sind ein zentraler Bestandteil von Elite Scripts und werden benötigt, damit Aktionen und Zonen funktionieren.

Zieltypen

Zieltypen legen fest, welche Entitäten oder Orte von einem Script angesteuert werden.

Target TypeDetailsSpecial
NEARBY_PLAYERSSpieler in rangeBenötigt range
NEARBY_MOBSMobs in rangeBenötigt range
NEARBY_ELITESElites in rangeBenötigt range
WORLD_PLAYERSSpieler in der Welt
ALL_PLAYERSSpieler auf dem Server
DIRECT_TARGETSpieler im EventBenötigt ein kompatibles Event
SELFElite, der die Kraft einsetzt
SELF_SPAWNZielt auf den Spawn-Ort eines Bosses
LOCATIONBestimmter OrtBenötigt location
LOCATIONSMehrere bestimmte OrteBenötigt locations
ZONE_FULLZielt auf das Innere der ZoneBenötigt Zone
ZONE_BORDERZielt auf den Rand der ZoneBenötigt Zone
ACTION_TARGETErbt die Ziele von einer Aktion.Kann nur für Aktions-Bedingungen und Relative Vektoren verwendet werden!!
LANDING_LOCATIONZielt auf den Ort, an dem ein Block oder eine Entität gelandet ist.Kann nur in den landingScripts der Aktionen SPAWN_FALLING_BLOCK und SUMMON_ENTITY verwendet werden!
INHERIT_SCRIPT_TARGETErbt das Ziel vom Script, das dieses Script ausführtKann nur ausgeführt werden, wenn das Script von einem anderen Script aufgerufen wurde!
INHERIT_SCRIPT_ZONE_FULLZielt auf das Innere der Zone, die vom Script geerbt wird, das dieses Script ausführtBenötigt eine Zone im Script, das dieses Script aufruft!
INHERIT_SCRIPT_ZONE_BORDERZielt auf den Rand der Zone, die vom Script geerbt wird, das dieses Script ausführtBenötigt eine Zone im Script, das dieses Script aufruft!
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hello World!"

Dies sendet eine Nachricht an das Ziel. Da das Ziel auf ALL_PLAYERS gesetzt ist, wird die Nachricht an alle Spieler gesendet, die online sind.


Gemeinsame Attribute

Die folgenden Einstellungen können auf alle Ziele angewendet werden.

ValuesDetailsSpecial
offsetLegt den Versatz für den Zielort fest.Kann keine Entitäten anvisieren!
relativeOffsetLegt einen relativen Versatz für den Zielort fest. Akzeptiert eine relative-Vektor-Vorlage, sodass der Versatz relativ zur Blickrichtung des Bosses berechnet werden kann.Kann keine Entitäten anvisieren!
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"

Dies lässt 2 Blöcke über dem Boss einen Blitz einschlagen. Beachte, dass STRIKE_LIGHTNING Orte verwendet und keine Entitäten beeinflusst, weshalb es Versätze haben kann.

Du kannst keinen Versatz festlegen, um eine Nachricht zu senden, da Nachrichten an Spieler gesendet werden. Du kannst jedoch einen Versatz für eine Zone festlegen, die dann Entitäten anvisieren kann.


range

Legt die Reichweite fest, in der beim Zieltyp NEARBY_PLAYERS nach Spielern in der Nähe gesucht wird.

ValuesDetailsDefault
rangeLegt die Reichweite in Blöcken fest, in der nach Spielerzielen gesucht wird.20.0
Beispiel
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"

Dies sendet eine Nachricht an Spieler im Umkreis von 25 Blöcken um den Boss, wenn der Boss stirbt.

location

Legt den Ort für den Zieltyp LOCATION fest.

ValuesDetailsDefault
locationLegt den Weltort fest, der anvisiert wird.none

Hierfür wird das Format location: worldname,x,y,z,pitch,yaw für den Ort verwendet.

Beachte, dass same_as_boss ein gültiger Platzhalter für den Weltnamen ist; so wäre z. B. same_as_boss,100,64,100,0,0 ein gültiger Ort, der auf dieselbe Welt zielt, 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 lässt einen Blitz am Ort x=100, y=64, z=200 einer Welt namens myWorld einschlagen.


locations

Legt die Orte für den Zieltyp LOCATIONS fest.

ValuesDetailsDefault
locationsLegt die Liste der Weltorte fest, die anvisiert werden.none

Hierfür wird das Format worldname,x,y,z,pitch,yaw für den Ort verwendet.

Beachte, dass same_as_boss ein gültiger Platzhalter für den Weltnamen ist; so wäre z. B. same_as_boss,100,64,100,0,0 ein gültiger Ort, der auf dieselbe Welt zielt, 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 lässt einen Blitz am Ort x=100, y=64, z=200 einer Welt namens myWorld einschlagen und einen weiteren Blitz in derselben Welt wie der Boss am Ort x=-100, y=12 und z=130.


Zonen anvisieren

Zonen haben mehrere Ziele, und es ist wichtig zu verstehen, wie sie funktionieren, um das Elite Scripting voll auszuschöpfen.

Zonen funktionieren in zwei Teilen:

Teil 1 – Festlegen, wo die Zone hinkommt

Zonen müssen wissen, wo sie sich befinden sollen, und dafür verwendest du das Zielsystem auf dieselbe Weise wie bei jedem anderen ortsbasierten Effekt, etwa einem 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 zylinderförmige Zone um den Boss. Beachte, dass in diesem Beispiel noch keine Aktionen festgelegt sind; das wird weiter unten behandelt.

Einige Zonen, wie STATIC_RAY, haben zwei oder mehr Ziele. Das liegt daran, dass Strahlen Linien sind und Linien durch zwei Punkte definiert werden. Dies wird ausführlicher auf der Zonen-Seite behandelt, aber im Grunde funktionieren sie alle auf dieselbe Weise.

Teil 2 – Das Innere der Zone anvisieren

Da die Zone nun weiß, wo sie sich befindet, muss die Aktion wissen, dass ihr Ziel die von uns definierte Zone ist. Genau 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

Unter Verwendung derselben Zone aus dem ersten Teil fügen wir nun die Aktion hinzu. Das Ziel dieser Aktion ist ZONE_FULL, was bedeutet, dass Partikel innerhalb der gesamten Zone erzeugt werden.

Beachte, dass ZONE_BORDER nicht für jede Zone verfügbar ist. Mehr dazu auf der Seite Script-Zonen.

Zone-Track

Legt fest, ob sich die Zone mit dem Ziel mitbewegt, z. B. ob sich die Zone bei targetType: SELF bewegt, wenn sich der Boss bewegt.

ValuesDetailsDefault
trackLegt fest, ob sich die Zone mit dem Ziel mitbewegt.true

Beachte, 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

Unter Verwendung desselben Beispiels aus Teil 1 und Teil 2 ist die Zone nun so eingestellt, dass sie nicht trackt. Das bedeutet, dass die Zone am Boss-Ort erscheint, aber selbst wenn sich der Boss weiter entfernt, bleibt die Zone dort, wo sie zuerst erschienen ist.

Beachte schließlich, dass eine Zone, die auf „nicht tracken“ gesetzt ist, ihren Ort in dem Moment registriert, in dem das Script aufgerufen wird.

Als Beispiel: Wenn du für dein Script eine Warnphase und eine Schadensphase haben möchtest, musst du sicherstellen, dass du alle Aktionen zu Beginn ausführst und allen Aktionen, die mit Schaden zusammenhängen und die du später einzeln ausführen möchtest, eine Wartezeit gibst. Du solltest aus technischen Gründen kein ganzes Script verzögern, das du über RUN_SCRIPT aufrufst.

Im Folgenden findest du ein korrektes Beispiel für eine Kraft mit Warn- und Schadensphase, entnommen 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 eine Menge Dinge, ist aber in zwei klar getrennte Scripts aufgeteilt: VisualCylinder und DamageCylinder.

VisualCylinder läuft zuerst und enthält die Aktion RUN_SCRIPT, die sofort auch DamageCylinder gleichzeitig mit dem laufenden VisualCylinder ausführt.

Allerdings ist jede einzelne Aktion in DamageCylinder so eingestellt, dass sie 60 Ticks bzw. 3 Sekunden wartet.

Das bedeutet, dass der Boss eine Warnphase von 3 Sekunden hat und dann eine Schadensphase ausführt; und obwohl die Zonen auf „nicht tracken“ eingestellt sind, befinden sich die Warnzone und die Schadenszone am selben Ort.

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 Ortsziele (funktioniert nicht beim Anvisieren von Spielern oder anderen Entitäten).

ValuesDetailsDefault
coverageLegt den Prozentsatz der Zone fest, der abgedeckt wird. Du kannst diesen Wert mit ~ zufällig gestalten, 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 weiterzugeben.

Beispielhafte Verwendungen

  1. Verbesserte Script-Runner

Script-Runner sind Scripts, deren einzige Funktion darin besteht, eine Menge anderer Scripts auszuführen. Sie werden verwendet, um die Verwaltung von Scripts zu erleichtern, insbesondere beim Umgang mit mehreren Scripts, die ein präzises Timing erfordern.

Mit Zielvererbung können mehrere Scripts dieselbe Zone oder dasselbe Ziel verwenden, was potenziell Hunderte von Zeilen sich wiederholenden Scriptings einspart.

  1. Matrjoschka-Zielfilterung / Filterung wie bei russischen Schachtelpuppen

Filterbedingungen können auf Ziele in einer Aktion angewendet werden. Indem man die Ziele an ein anderes Script mit anderen Filtern weitergibt, wird es möglich, die Bedingungen zu schichten und unterschiedliche Effekte auf denselben Pool von Zielen anhand zunehmend spezifischer Kriterien anzuwenden.

Als Beispiel ist es möglich, eine Zone zu erstellen, die nach Spielern sucht, und eine Aktion zu erstellen, die prüft, ob alle Spieler in der Zone einen bestimmten Tag haben. Die gültigen Ziele können dann an ein anderes Script weitergegeben werden, in dem eine weitere Aktion eine Zufallsprüfungs-Bedingung ausführen und basierend auf dieser Wahrscheinlichkeit einen Effekt anwenden kann. Die Ziele können dann weiter an ein anderes Script weitergereicht werden, in dem eine weitere Bedingung prüfen kann, ob die Ziele noch am Leben sind, und ein besonderes Verhalten ausführen kann, falls sie tot sind.

Dies sind natürlich nur Beispiele. Es ist ein hochgradig flexibles System.

  1. 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, halb-zufällige Zonen zu erstellen, indem man die Script-Bedingungen und die Möglichkeit nutzt, aus den Script-Aktionen nur eines der aufgelisteten Scripts auszuführen.

Hinweis: In diesem Abschnitt bezieht sich „Eltern-Script“ auf das Script, das das „erbende Script“ ausführt, also das Script, das die geerbten Ziele verwendet.

Bei der Verwendung von Zielvererbung ist es wichtig, das Eltern-Script sorgfältig zu betrachten, um sicherzustellen, dass die richtigen Daten weitergegeben werden.

INHERIT_SCRIPT_TARGET

Bei der Verwendung von INHERIT_SCRIPT_TARGET werden die Ziele aus dem Eltern-Script an das erbende Script weitergegeben. Dies hat ein paar Einschränkungen:

  • Beim Weitergeben von Entitätszielen ist es möglich, Aktionen auszuführen, die Orte erfordern (z. B. das Erzeugen von Partikeln), da der Ort der Entitäten verwendet wird. Natürlich ist es ebenso möglich, Aktionen zu verwenden, die Entitäten erfordern.

  • Beim Weitergeben von Ortszielen ist es nur möglich, Orte zu verwenden. Die einzige Möglichkeit, aus einem Ort eine Entität zu bekommen, besteht darin, an diesem Ort eine Zone zu erstellen und nach Entitäten zu suchen. Es ist also nicht unmöglich, einen Ort weiterzugeben und dann Entitäten zu erhalten, aber es erfordert ein wenig zusätzlichen Aufwand.

Zonen vererben

Bei der Verwendung von INHERIT_SCRIPT_ZONE_FULL oder INHERIT_SCRIPT_ZONE_BORDER ist es zwingend erforderlich, dass das Eltern-Script eine Zone definiert, da das erbende Script sonst nicht korrekt ausgeführt werden kann.

Zusätzlich können Zonen optional getrackt werden. Auch dies wird zusammen mit der Zone weitergegeben.

  • Eine nicht getrackte Zone erstellt immer eine Zone dort, wo es vom erbenden Script definiert ist. Das bedeutet, dass die Zonen-Einstellungen von den Aktionen in den erbenden Scripts verwendet werden, um bei jeder Ausführung einer Aktion brandneue Zonen zu erstellen, und der Ort dieser Zonen wird von der Aktion festgelegt.

  • Eine getrackte Zone kann denselben exakten Zonen-Ort an alle erbenden Scripts weitergeben, sofern das Eltern-Script darauf eingestellt ist, ZONE_FULL oder ZONE_BORDER anzuvisieren. Das bedeutet, dass jedes Script auf denselben Orten agiert.