Cibles des Elite Scripts
Les cibles sont un élément central des Elite Scripts, et sont nécessaires pour que les Actions et les Zones fonctionnent.
Types de cibles
Les types de cibles définissent quelles entités ou quels emplacements sont ciblés par un script.
| Type de cible | Détails | Spécial |
|---|---|---|
NEARBY_PLAYERS | Joueurs dans la portée | Nécessite range |
NEARBY_MOBS | Créatures dans la portée | Nécessite range |
NEARBY_ELITES | Élites dans la portée | Nécessite range |
WORLD_PLAYERS | Joueurs dans le monde | ❌ |
ALL_PLAYERS | Joueurs sur le serveur | ❌ |
DIRECT_TARGET | Joueurs dans l'événement | Nécessite un événement compatible |
SELF | Élite utilisant le pouvoir | ❌ |
SELF_SPAWN | Cible l'emplacement d'apparition d'un boss | ❌ |
LOCATION | Emplacement spécifique | Nécessite location |
LOCATIONS | Plusieurs emplacements spécifiques | Nécessite locations |
ZONE_FULL | Cibles à l'intérieur de la zone | Nécessite Zone |
ZONE_BORDER | Cibles à la bordure de la zone | Nécessite Zone |
ACTION_TARGET | Hérite les cibles d'une action. | Ne peut être utilisé que pour les conditions d'action et les Vecteurs Relatifs !! |
LANDING_LOCATION | Cible l'emplacement où un bloc est tombé. | Ne peut être utilisé que pour l'action SPAWN_FALLING_BLOCK ! |
INHERIT_SCRIPT_TARGET | Hérite la cible du script qui exécute ce script | Ne peut fonctionner que si le script a été appelé par un autre script ! |
INHERIT_SCRIPT_ZONE_FULL | Cibles à l'intérieur de la zone héritée du script qui exécute ce script | Nécessite Zone dans le script qui appelle ce script ! |
INHERIT_SCRIPT_ZONE_BORDER | Cibles à la bordure de la zone héritée du script qui exécute ce script | Nécessite Zone dans le script qui appelle ce script ! |
Exemple
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hello World!"
Ceci envoie un message à la cible. Puisque la cible est définie sur ALL_PLAYERS, cela enverra ce message à tous les joueurs en ligne.
Attributs partagés
Les paramètres suivants peuvent être appliqués à toutes les cibles.
| Valeurs | Détails | Spécial |
|---|---|---|
offset | Définit le décalage pour l'emplacement de la cible. | Ne peut pas cibler des entités ! |
Exemple
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"
Ceci fait tomber la foudre 2 blocs au-dessus du boss. Notez que STRIKE_LIGHTNING utilise des emplacements et n'affecte pas les entités, il peut donc avoir des décalages.
Vous ne pouvez pas définir un décalage pour envoyer un message, car les messages sont envoyés aux joueurs. Vous pouvez, cependant, définir un décalage pour une zone qui peut ensuite cibler des entités.
range
Définit la portée pour rechercher les joueurs à proximité dans le type de cible NEARBY_PLAYERS.
| Valeurs | Détails | Défaut |
|---|---|---|
range | Définit la portée, en blocs, pour rechercher les joueurs cibles. | 20.0 |
Exemple
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Joueurs ciblés dans un rayon de 25 blocs !"
Ceci envoie un message aux joueurs dans un rayon de 25 blocs du boss lorsque le boss meurt.
location
Définit l'emplacement pour le type de cible LOCATION.
| Valeurs | Détails | Défaut |
|---|---|---|
location | Définit l'emplacement du monde qui sera ciblé. | none |
Ceci utilise le format location: worldname,x,y,z,pitch,yaw pour l'emplacement.
Notez que same_as_boss est un espace réservé valide pour le nom du monde, par exemple same_as_boss,100,64,100,0,0 serait un emplacement valide qui ciblerait le même monde que celui où se trouve le boss.
Exemple
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATION
location: "myWorld,100,64,200,0,0"
Ceci fait apparaître un éclair de foudre à l'emplacement x=100, y=64, z=200 d'un monde appelé myWorld.
locations
Définit les emplacements pour le type de cible LOCATIONS.
| Valeurs | Détails | Défaut |
|---|---|---|
locations | Définit la liste des emplacements du monde qui seront ciblés. | none |
Ceci utilise le format worldname,x,y,z,pitch,yaw pour l'emplacement.
Notez que same_as_boss est un espace réservé valide pour le nom du monde, par exemple same_as_boss,100,64,100,0,0 serait un emplacement valide qui ciblerait le même monde que celui où se trouve le boss.
Exemple
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"
Ceci fait apparaître un éclair de foudre à l'emplacement x=100, y=64, z=200 d'un monde appelé myWorld et un autre éclair de foudre dans le même monde que le boss à l'emplacement x=-100, y=12 et z=130.
Cibler des zones
Les Zones ont plusieurs cibles, et il est important de comprendre comment elles fonctionnent afin d'utiliser l'Elite Scripting à son plein potentiel.
Les zones fonctionnent en deux parties :
Partie 1 - Définir où va la zone
Les zones doivent savoir où elles sont censées être, et pour ce faire, vous utilisez le système de ciblage de la même manière que vous le feriez pour tout autre effet basé sur l'emplacement, comme un éclair de foudre.
Exemple
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Ceci fait apparaître une zone cylindrique autour du boss. Notez qu'aucune action n'est définie dans cet exemple pour le moment, cela est couvert ci-dessous.
Certaines zones, comme STATIC_RAY, ont deux cibles ou plus. C'est parce que les rayons sont des lignes, et les lignes sont définies par deux points. Ceci est couvert plus en détail sur la page des zones, mais elles fonctionnent toutes fondamentalement de la même manière.
Partie 2 - Cibler l'intérieur de la zone
Maintenant que la zone sait où elle se trouve, nous devons que l'action sache que sa cible est la zone que nous avons définie. C'est à cela que servent targetType: ZONE_FULL et targetType:ZONE_BORDER.
Exemple
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
En utilisant la même zone de la première partie, nous ajoutons maintenant l'action. La cible de cette action est ZONE_FULL, ce qui signifie qu'elle fera apparaître des particules à l'intérieur de toute la zone.
Notez que ZONE_BORDER n'est pas disponible pour toutes les zones. Plus d'informations à ce sujet sur la page zones de script.
Suivi de zone
Définit si la zone se déplacera avec la cible, comme si la zone se déplacera lorsque le boss se déplace pour targetType: SELF.
| Valeurs | Détails | Défaut |
|---|---|---|
track | Définit si la zone se déplacera avec la cible. | true |
Notez que les zones animables ne peuvent pas être suivies. Plus d'informations ici.
Exemple
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
En utilisant le même exemple de la partie 1 et de la partie 2, la zone est maintenant configurée pour ne pas suivre. Cela signifie que la zone apparaîtra à l'emplacement du boss, mais même si le boss continue de s'éloigner, la zone restera à l'endroit où elle est apparue pour la première fois.
Enfin, notez que si une zone est configurée pour ne pas suivre, elle enregistrera son emplacement au moment où le script est appelé.
Par exemple, vous voulez avoir une phase d'avertissement et une phase de dégâts pour votre script, vous devrez vous assurer d'exécuter toutes les actions au début et de mettre un temps d'attente sur toutes les actions liées aux dégâts que vous souhaitez exécuter plus tard individuellement. Vous ne devez pas retarder un script entier que vous appelez via RUN_SCRIPT pour des raisons techniques.
Voici un exemple correct d'un pouvoir avec une phase d'avertissement et une phase de dégâts tiré du Frost Palace Sanctum.
Exemple
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
Ce script fait beaucoup de choses, mais il est séparé en deux scripts clairs : VisualCylinder et DamageCylinder.
VisualCylinder s'exécute en premier et a l'action RUN_SCRIPT qui exécute également immédiatement le DamageCylinder en même temps que le VisualCylinder s'exécute.
Cependant, chaque action dans DamageCylinder est configurée pour attendre 60 ticks, soit 3 secondes.
Cela signifie que le boss a une phase d'avertissement de 3 secondes, puis fait une phase de dégâts, et même si les zones sont configurées pour ne pas suivre, la zone d'avertissement et la zone de dégâts seront au même endroit.
Propriétés de cible spécifiques aux zones
Les zones ont les propriétés spécifiques suivantes :
coverage
Définit le pourcentage de la zone qui sera réellement utilisé pour l'action. Fonctionne uniquement pour les cibles d'emplacement (ne fonctionnera pas lors du ciblage de joueurs ou d'autres entités).
| Valeurs | Détails | Défaut |
|---|---|---|
coverage | Définit le pourcentage de la zone qui sera couverte. Vous pouvez randomiser cette valeur en utilisant ~ exemple : 1.0~0.3. | 1.0 |
Exemple
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
Dans ce cas, seulement 50% de la zone sera couverte de particules.
Hériter des cibles
Lorsqu'un script exécute un autre script (ou "appelle" ce script), il est possible de transmettre les informations de zone et de cible du premier script au second.
Exemples d'utilisation
- Exécuteurs de scripts améliorés
Les exécuteurs de scripts sont des scripts dont la seule fonction est d'exécuter beaucoup d'autres scripts. Ils sont utilisés pour faciliter la gestion des scripts, en particulier lors du traitement de plusieurs scripts qui nécessitent un timing précis.
Avec l'héritage de cible, plusieurs scripts peuvent utiliser la même zone ou cible, réduisant potentiellement des centaines de lignes de script répétitif.
- Filtrage de cible Matryoshka / Filtrage de cible à poupées russes
Les conditions de filtrage peuvent être appliquées aux cibles dans une action. En transmettant les cibles à un script différent avec des filtres différents, il devient possible de superposer les conditions et d'appliquer des effets différents au même groupe de cibles en fonction de critères de plus en plus spécifiques.
Par exemple, il est possible de créer une zone qui recherche des joueurs et de faire une action qui vérifie si tous les joueurs de la zone ont une balise spécifique. Les cibles valides peuvent ensuite être transmises à un autre script où une autre action peut alors exécuter une vérification de condition aléatoire et appliquer un effet basé sur cette chance. Les cibles peuvent ensuite être transmises davantage à un autre script où une autre condition peut vérifier si les cibles sont encore en vie et faire un comportement spécial si elles sont mortes.
Ce ne sont, bien sûr, que des exemples. C'est un système très flexible.
- Zones complexes
Enfin, il est possible de superposer des cibles pour créer des zones complexes, éventuellement en utilisant des conditions si nécessaire, et il est même possible de créer des zones semi-aléatoires en utilisant les conditions de script et la capacité de n'exécuter qu'un seul des scripts listés dans les actions de script.
Remarque : Pour cette section, "script parent" fait référence au script qui exécute le "script héritant", qui est le script qui utilisera les cibles héritées.
Lors de l'utilisation de l'héritage de cible, il est important d'examiner attentivement le script parent pour s'assurer que les bonnes données sont transmises.
INHERIT_SCRIPT_TARGET
Lors de l'utilisation de INHERIT_SCRIPT_TARGET, les cibles du script parent seront transmises au script héritant. Cela a quelques mises en garde :
-
Lors de la transmission de cibles d'entité, il est possible d'exécuter des actions qui nécessitent des emplacements (comme faire apparaître des particules) car l'emplacement des entités sera utilisé. Il est, bien sûr, également possible d'utiliser des actions qui nécessitent des entités.
-
Lors de la transmission de cibles d'emplacement, il n'est possible d'utiliser que des emplacements. La seule façon d'obtenir une entité à partir d'emplacements est de créer une zone à cet emplacement et de rechercher des entités. Donc, bien qu'il ne soit pas impossible de transmettre un emplacement puis d'obtenir des entités, cela nécessitera un peu de travail supplémentaire.
Hériter des zones
Lors de l'utilisation de INHERIT_SCRIPT_ZONE_FULL ou INHERIT_SCRIPT_ZONE_BORDER, il est impératif que le script parent définisse une zone, sinon le script héritant ne pourra pas s'exécuter correctement.
De plus, les zones peuvent éventuellement être suivies. Cela sera également transmis avec la zone.
-
Une zone non suivie créera toujours une zone là où elle est définie par le script héritant. Cela signifie que les paramètres de zone seront utilisés par les actions dans les scripts héritants pour créer de nouvelles zones à chaque fois qu'une action s'exécute, et l'emplacement de ces zones sera défini par l'action.
-
Une zone suivie peut transmettre le même emplacement de zone exact à tous les scripts héritants si le script parent est configuré pour cibler
ZONE_FULLouZONE_BORDER. Cela signifie que chaque script agira sur les mêmes emplacements.