Elite Script Bedingungen
Mit Bedingungen können Scripter dafür sorgen, dass Scripts und/oder Aktionen abhängig von bestimmten Voraussetzungen nicht ausgeführt werden.
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Conditions:
isAlive: true
conditionType: BLOCKING
Target:
targetType: SELF
Actions:
- action: PLACE_BLOCK
Target:
targetType: DIRECT_TARGET
duration: 20
material: DIRT
offset: 0,3,0
Conditions:
locationIsAir: true
conditionType: BLOCKING
Target:
targetType: ACTION_TARGET
Cooldowns:
local: 60
global: 20
In diesem Beispiel wird das Script Example nur ausgeführt, wenn der Elite noch am Leben ist, und es platziert einen Erdblock nur dann 3 Blöcke über der Position des Elites, wenn sich dort ein Luftblock befindet. Einzelne Aktionen können eigene Bedingungen haben.
Target
Bedingungen verwenden das Targets-System, um festzulegen, welche Entität oder welcher Standort den Bedingungen unterliegt. Das bedeutet, dass du Bedingungen mit dem Boss, mit Spielern oder mit allem anderen verknüpfen kannst, das du anvisieren kannst.
Bedingungstyp
| Key | Details | Values |
|---|---|---|
conditionType | Legt den Typ der Bedingung fest | BLOCKING / FILTERING |
Es gibt zwei Arten von Bedingungen: BLOCKING und FILTERING. BLOCKING-Bedingungen sorgen dafür, dass Scripts oder Aktionen ihre Ausführung stoppen. FILTERING-Bedingungen sorgen dafür, dass Aktionen Ziele überspringen, die die Bedingung nicht erfüllen. Das heißt: Wenn du nur Blöcke anvisieren möchtest, die keine Luft sind, brauchst du eine FILTERING-Bedingung; wenn du eine Aktion stoppen möchtest, falls ein Spieler tot ist, brauchst du eine BLOCKING-Bedingung.
Bedingungen außerhalb von Aktionen sind immer BLOCKING. Bedingungen innerhalb von Aktionen können BLOCKING oder FILTERING sein.
Hinweis: Wenn das Ziel SELF (der Boss) ist und die Bedingungsprüfung isAlive lautet, ist die Prüfung immer BLOCKING! Dies kann innerhalb einer FILTERING-Bedingung stehen und sorgt trotzdem dafür, dass sich genau dieser Teil wie BLOCKING verhält.
Bedingungen innerhalb von Aktionen sind standardmäßig auf FILTERING gesetzt.
Platzierung von Bedingungsblöcken
Du kannst Bedingungsblöcke auf zwei Arten platzieren oder verschachteln:
-
Unter einzelnen Aktionen – Die Bedingung gilt nur für eine bestimmte Aktion. Ist die Bedingung erfüllt, wird die Aktion ausgeführt; andernfalls nicht.
-
Unter dem gesamten Script – Die Bedingung gilt für alle Aktionen innerhalb des Scripts. Ist die Bedingung nicht erfüllt, wird keine der Aktionen ausgeführt.
Nachfolgend findest du Beispiele, die zeigen, wie man Bedingungsblöcke sowohl für einzelne Aktionen als auch für das gesamte Script verschachtelt.
Unter einzelnen Aktionen:
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
Prüft, ob der Standort 2 Blöcke über der Position des Bosses Luft ist, und führt – falls ja – die SET_WEATHER-Aktion aus, wenn der Mob getroffen wird. Andernfalls wird die SET_WEATHER-Aktion blockiert. Die MESSAGE-Aktion wird beim Treffer jedoch immer ausgeführt, da auf sie keine Bedingungen angewendet werden.
Unter dem gesamten Script:
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
Wenn der Block zwei Felder über der Position des Bosses Luft ist, dürfen alle Scripts ausgeführt werden, wenn der Mob getroffen wird. Andernfalls wird das gesamte Script an der Ausführung gehindert, einschließlich der Aktionen SET_WEATHER und MESSAGE.
runIfConditionIs
| Key | Details | Values |
|---|---|---|
runIfConditionIs | Legt fest, ob die Bedingung die Ausführung der Aktion erlauben soll, wenn die Bedingung wahr oder falsch ist. | true / false |
Du kannst eine Bedingung umkehren, indem du das Präfix runIf und das Suffix Is um den Namen der Bedingung herum verwendest.
Nimm zum Beispiel die Bedingung isAlive. Normalerweise bedeutet:
isAlive: true,
dass die Aktion nur ausgeführt wird, wenn der Boss am Leben ist.
Wenn du aber zusätzlich:
runIfAliveIs: false
in dieselbe Bedingung schreibst, wird die Bedingung umgekehrt – die Aktion wird jetzt nur ausgeführt, wenn der Boss tot ist.
Mit diesem Aufbau kannst du steuern, ob die Bedingung bestanden oder nicht bestanden sein muss, bevor die Aktion ausgeführt wird.
Beispiel:
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
runIfAliveIs: false
Target:
targetType: SELF
Dieses Script setzt das Wetter jetzt nur dann auf Gewitter, wenn der Boss tot ist.
Standortbasierte Bedingungen
locationIsAir
Legt als Bedingung fest, ob der Standort des Ziels Luft ist.
| Key | Details | Values |
|---|---|---|
locationIsAir | Legt fest, ob geprüft wird, ob der Standort ein Luftblock ist (oder das Gegenteil). | Boolean |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
Prüft, ob der Standort 2 Blöcke über der Position des Bosses Luft ist, und blockiert – falls ja – das Wetter-Script nicht an der Ausführung, wenn der Mob getroffen wird. Andernfalls wird die Aktion blockiert.
isOnFloor
Prüft, ob sich der Standort auf dem Boden befindet. Das bedeutet, dass der Block am Standort nicht solide ist, der Block darunter aber solide ist.
| Key | Details | Values |
|---|---|---|
isOnFloor | Legt fest, ob geprüft wird, ob der Standort eine Bodenposition ist (oder das Gegenteil). | Boolean |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isOnFloor: true
Target:
targetType: SELF
Prüft, ob der Boss auf einem soliden Block steht; falls ja, wird das Script ausgeführt, andernfalls wird das Script an der Ausführung gehindert.
isStandingOnMaterial
Prüft, ob der Block unter dem Ziel einem passenden Materialtyp entspricht.
| Key | Details | Values |
|---|---|---|
isStandingOnMaterial | Legt fest, auf welchen Materialtyp geprüft werden soll. | Material |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isStandingOnMaterial: BIRCH_WOOD
Target:
targetType: SELF
Wird nur ausgeführt, wenn der Boss auf einem BIRCH_WOOD-Block steht, andernfalls wird das Script an der Ausführung gehindert.
Entitätsbasierte Bedingungen
isAlive
Legt als Bedingung fest, ob die Zielentität der Bedingung am Leben ist.
| Key | Details | Values |
|---|---|---|
isAlive | Legt fest, ob geprüft wird, ob die Entität am Leben (oder tot) ist. | Boolean |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
Target:
targetType: SELF
Wird nur ausgeführt, wenn der Boss derzeit am Leben ist, andernfalls wird das Script blockiert.
hasTags
Prüft, ob die Zielentität bestimmte Tags besitzt. Scripter können über Aktionen beliebige Tags zuweisen und entfernen und sie als Bedingungen für späteres Verhalten verwenden. Tags sind einfach Zeichenketten (Wörter), die du einem Boss zuweisen kannst.
| Key | Details | Values |
|---|---|---|
hasTags | Legt fest, ob geprüft wird, ob die Entität eine Liste von Tags besitzt. | String List |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
hasTags:
- isCool
- hasANiceBeard
Target:
targetType: SELF
Wird nur ausgeführt, wenn der Boss die Tags "isCool" und "hasANiceBeard" besitzt, andernfalls wird das Script blockiert.
doesNotHaveTags
Genau wie hasTags, prüft jedoch, ob der Boss diese Werte nicht besitzt.
| Key | Details | Values |
|---|---|---|
doesNotHaveTags | Legt fest, ob geprüft wird, ob die Entität eine Liste von Tags nicht besitzt. | String List |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
doesNotHaveTags:
- isStinky
- isSus
Target:
targetType: SELF
Wird nur ausgeführt, wenn der Boss die Tags "isStinky" und "isSus" nicht besitzt, andernfalls wird das Script blockiert.
Andere Bedingungen
randomChance
Gibt der Bedingung eine zufällige Wahrscheinlichkeit, gültig zu sein.
| Key | Details | Values |
|---|---|---|
randomChance | Wahrscheinlichkeit, dass die Bedingung gültig ist. | Zahl zwischen 0.0 und 1.0 |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
randomChance: 0.1
Target: # Not required
targetType: SELF # Not required
Dies gibt dem Script eine 10%ige Chance, ausgeführt zu werden, andernfalls wird das Script blockiert.
Beachte, dass diese Bedingung insofern besonders ist, als sie kein Ziel benötigt.
NEARBY mit Tags filtern
Um NEARBY_MOBS oder NEARBY_PLAYERS anhand bestimmter Tags zu filtern, verwende ACTION_TARGET als Ziel der Bedingung (sofern die Bedingung auf eine Aktion und nicht auf das Script selbst angewendet wird). Dadurch wird sichergestellt, dass das Script ausschließlich die Mobs/Spieler mit den angegebenen Tags korrekt filtert.
Beispiel
eliteScript:
Example:
Actions:
- action: SET_MOB_AI
Target:
targetType: NEARBY_MOBS
range: 40
bValue: false
Conditions:
conditionType: FILTERING
hasTags:
- TurnOff
Target:
targetType: ACTION_TARGET
Dieses Script sucht nach allen Mobs in der Nähe mit dem Tag TurnOff, und wenn sie den Tag besitzen, deaktiviert es ihre KI.
targetCountLowerThan und targetCountGreaterThan
Erstellt eine Bedingung, die die Ausführung der Aktion nur erlaubt, wenn die angegebene Zielanzahl kleiner oder größer als der festgelegte Wert ist.
| Key | Details | Values |
|---|---|---|
targetCountLowerThan | Führt die Aktion nur aus, wenn die Zielanzahl kleiner als die angegebene Zahl ist. | Zahl zwischen 0 und 999 |
| Key | Details | Values |
|---|---|---|
targetCountGreaterThan | Führt die Aktion nur aus, wenn die Zielanzahl größer als die angegebene Zahl ist. | Zahl zwischen 0 und 999 |
Beispiel
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
targetCountGreaterThan: 2
Target: #required
targetType: NEARBY_MOBS #required
range: 15
Das Script wird nur ausgeführt, wenn sich mehr als 2 Mobs innerhalb eines Radius von 15 Blöcken befinden.
Beachte, dass diese Bedingung ein Ziel BENÖTIGT.