Zum Hauptinhalt springen

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.

ZieltypDetailsBesonderheiten
NEARBY_PLAYERSSpieler in ReichweiteErfordert range
NEARBY_MOBSMobs in ReichweiteErfordert range
NEARBY_ELITESElites in ReichweiteErfordert range
WORLD_PLAYERSSpieler in der Welt
ALL_PLAYERSSpieler auf dem Server
DIRECT_TARGETSpieler im EventErfordert kompatibles Event
SELFElite, die die Fähigkeit benutzt
SELF_SPAWNZielt auf die Spawn-Position eines Bosses
LOCATIONSpezifischer StandortErfordert location
LOCATIONSMehrere spezifische StandorteErfordert locations
ZONE_FULLZiele innerhalb der ZoneErfordert Zone
ZONE_BORDERZiele am Rand der ZoneErfordert Zone
ACTION_TARGETÜbernimmt die Ziele von einer Aktion.Kann nur für Aktions-Bedingungen und Relative Vektoren verwendet werden!!
LANDING_LOCATIONZielt 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ührtKann nur ausgeführt werden, wenn das Script von einem anderen Script aufgerufen wurde!
INHERIT_SCRIPT_ZONE_FULLZiele innerhalb der Zone, die vom Script übernommen wurde, das dieses Script ausführtErfordert Zone in dem Script, das dieses Script aufruft!
INHERIT_SCRIPT_ZONE_BORDERZiele am Rand der Zone, die vom Script übernommen wurde, das dieses Script ausführtErfordert 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.

WerteDetailsBesonderheiten
offsetSetzt 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.

WerteDetailsStandard
rangeLegt 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.

WerteDetailsStandard
locationLegt 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.

WerteDetailsStandard
locationsLegt 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.

WerteDetailsStandard
trackLegt 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).

WerteDetailsStandard
coverageLegt 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

  1. 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.

  1. 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.

  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, 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_FULL oder ZONE_BORDER als Ziel gesetzt ist. Das bedeutet, dass jedes Script an denselben Standorten agiert.