Aller au contenu principal

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 cibleDétailsSpécial
NEARBY_PLAYERSJoueurs dans la portéeNécessite range
NEARBY_MOBSCréatures dans la portéeNécessite range
NEARBY_ELITESÉlites dans la portéeNécessite range
WORLD_PLAYERSJoueurs dans le monde
ALL_PLAYERSJoueurs sur le serveur
DIRECT_TARGETJoueurs dans l'événementNécessite un événement compatible
SELFÉlite utilisant le pouvoir
SELF_SPAWNCible l'emplacement d'apparition d'un boss
LOCATIONEmplacement spécifiqueNécessite location
LOCATIONSPlusieurs emplacements spécifiquesNécessite locations
ZONE_FULLCibles à l'intérieur de la zoneNécessite Zone
ZONE_BORDERCibles à la bordure de la zoneNécessite Zone
ACTION_TARGETHérite les cibles d'une action.Ne peut être utilisé que pour les conditions d'action et les Vecteurs Relatifs !!
LANDING_LOCATIONCible l'emplacement où un bloc est tombé.Ne peut être utilisé que pour l'action SPAWN_FALLING_BLOCK !
INHERIT_SCRIPT_TARGETHérite la cible du script qui exécute ce scriptNe peut fonctionner que si le script a été appelé par un autre script !
INHERIT_SCRIPT_ZONE_FULLCibles à l'intérieur de la zone héritée du script qui exécute ce scriptNécessite Zone dans le script qui appelle ce script !
INHERIT_SCRIPT_ZONE_BORDERCibles à la bordure de la zone héritée du script qui exécute ce scriptNé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.

ValeursDétailsSpécial
offsetDé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.

ValeursDétailsDéfaut
rangeDé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.

ValeursDétailsDéfaut
locationDé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.

ValeursDétailsDéfaut
locationsDé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.

ValeursDétailsDéfaut
trackDé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).

ValeursDétailsDéfaut
coverageDé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

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

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

  1. 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_FULL ou ZONE_BORDER. Cela signifie que chaque script agira sur les mêmes emplacements.