Cibles des Elite Scripts
Les cibles sont un élément central des Elite Scripts, et sont nécessaires au fonctionnement des Actions et des Zones.
Types de cible
Les types de cible définissent quelles entités ou emplacements sont ciblés par un script.
| Target Type | Details | Special |
|---|---|---|
NEARBY_PLAYERS | Joueurs à portée | Nécessite range |
NEARBY_MOBS | Mobs à portée | Nécessite range |
NEARBY_ELITES | Élites à 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 précis | Nécessite location |
LOCATIONS | Plusieurs emplacements précis | Nécessite locations |
ZONE_FULL | Cibles à l'intérieur de la zone | Nécessite une Zone |
ZONE_BORDER | Cibles sur la bordure de la zone | Nécessite une Zone |
ACTION_TARGET | Hérite des 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 ou une entité a atterri. | Ne peut être utilisé que dans les landingScripts des actions SPAWN_FALLING_BLOCK et SUMMON_ENTITY ! |
INHERIT_SCRIPT_TARGET | Hérite de la cible du script qui exécute ce script | Ne peut s'exécuter 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 une Zone dans le script qui appelle ce script ! |
INHERIT_SCRIPT_ZONE_BORDER | Cibles sur la bordure de la zone héritée du script qui exécute ce script | Nécessite une 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. Comme la cible est définie sur ALL_PLAYERS, le message sera envoyé à tous les joueurs en ligne.
Attributs partagés
Les paramètres suivants peuvent être appliqués à toutes les cibles.
| Values | Details | Special |
|---|---|---|
offset | Définit le décalage de l'emplacement de la cible. | Ne peut pas cibler des entités ! |
relativeOffset | Définit un décalage relatif pour l'emplacement de la cible. Accepte un schéma de vecteur relatif, permettant de calculer le décalage par rapport à la direction dans laquelle le boss regarde. | 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 s'abattre 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 de décalage pour envoyer un message, puisque les messages sont envoyés aux joueurs. Vous pouvez cependant définir un décalage pour une zone qui pourra ensuite cibler des entités.
range
Définit la portée de détection des joueurs à proximité pour le type de cible NEARBY_PLAYERS.
| Values | Details | Default |
|---|---|---|
range | Définit la portée, en blocs, de détection des cibles joueurs. | 20.0 |
Exemple
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"
Ceci envoie un message aux joueurs situés à moins de 25 blocs du boss lorsque le boss meurt.
location
Définit l'emplacement pour le type de cible LOCATION.
| Values | Details | Default |
|---|---|---|
location | Définit l'emplacement dans le monde qui sera ciblé. | none |
Utilise le format location: worldname,x,y,z,pitch,yaw pour l'emplacement.
Notez que same_as_boss est un substituant valide pour le nom du monde ; ainsi, 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 à l'emplacement x=100, y=64, z=200 d'un monde appelé myWorld.
locations
Définit les emplacements pour le type de cible LOCATIONS.
| Values | Details | Default |
|---|---|---|
locations | Définit la liste des emplacements dans le monde qui seront ciblés. | none |
Utilise le format worldname,x,y,z,pitch,yaw pour l'emplacement.
Notez que same_as_boss est un substituant valide pour le nom du monde ; ainsi, 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 à l'emplacement x=100, y=64, z=200 d'un monde appelé myWorld et un autre éclair 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 leur fonctionnement pour exploiter pleinement le potentiel de l'Elite Scripting.
Les zones fonctionnent en deux parties :
Partie 1 - Définir où va la zone
Les zones doivent savoir où elles sont censées se trouver, et pour cela vous utilisez le système de cibles de la même façon que pour n'importe quel autre effet basé sur un emplacement, comme un éclair.
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 encore définie dans cet exemple, cela est traité plus bas.
Certaines zones, comme STATIC_RAY, ont deux cibles ou plus. C'est parce que les rayons sont des lignes, et qu'une ligne est définie par deux points. Ceci est traité plus en détail sur la page des zones, mais elles fonctionnent fondamentalement toutes de la même manière.
Partie 2 - Cibler l'intérieur de la zone
Maintenant que la zone sait où elle se trouve, il faut 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 reprenant la même zone que dans 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 de détails à ce sujet sur la page des zones de script.
Suivi de zone
Définit si la zone se déplacera avec la cible, par exemple si la zone se déplacera lorsque le boss bouge pour targetType: SELF.
| Values | Details | Default |
|---|---|---|
track | Définit si la zone se déplacera avec la cible. | true |
Notez que les zones animables ne peuvent pas suivre. Plus de détails 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 reprenant le même exemple que dans les parties 1 et 2, la zone est désormais réglée pour ne pas suivre. Cela signifie que la zone apparaîtra à l'emplacement du boss, mais que même si le boss continue de s'éloigner, la zone restera là où elle est apparue initialement.
Enfin, notez que si une zone est réglée pour ne pas suivre, elle enregistre son emplacement au moment où le script est appelé.
Par exemple, si 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épart et d'ajouter un temps d'attente sur toutes les actions liées aux dégâts que vous voulez exécuter plus tard, individuellement. Vous ne devriez pas retarder un script entier que vous appelez via RUN_SCRIPT pour des raisons techniques.
Ce qui suit est 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 distincts : VisualCylinder et DamageCylinder.
VisualCylinder s'exécute en premier et possède l'action RUN_SCRIPT qui exécute aussi immédiatement DamageCylinder en même temps que VisualCylinder s'exécute.
Cependant, chaque action de DamageCylinder est réglée pour attendre 60 ticks, soit 3 secondes.
Cela signifie que le boss a une phase d'avertissement de 3 secondes, puis exécute une phase de dégâts, et même si les zones sont réglées pour ne pas suivre, la zone d'avertissement et la zone de dégâts seront au même emplacement.
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. Ne fonctionne que pour les cibles d'emplacement (ne fonctionne pas lorsqu'on cible des joueurs ou d'autres entités).
| Values | Details | Default |
|---|---|---|
coverage | Définit le pourcentage de la zone qui sera couvert. Vous pouvez rendre cette valeur aléatoire en utilisant ~, par 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, seuls 50 % de la zone seront couverts de particules.
Héritage des cibles
Lorsqu'un script en exécute un autre (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 un grand nombre d'autres scripts. Ils servent à faciliter la gestion des scripts, en particulier lorsqu'il s'agit de gérer plusieurs scripts qui nécessitent une synchronisation précise.
Avec l'héritage des cibles, plusieurs scripts peuvent utiliser la même zone ou la même cible, réduisant potentiellement des centaines de lignes de scripting répétitif.
- Filtrage de cibles en poupées russes / filtrage de cibles en matriochka
Des conditions de filtrage peuvent être appliquées aux cibles d'une action. En transmettant les cibles à un autre script avec des filtres différents, il devient possible d'empiler les conditions et d'appliquer différents effets au même ensemble de cibles selon des critères de plus en plus spécifiques.
Par exemple, il est possible de créer une zone qui recherche des joueurs et de créer une action qui vérifie si tous les joueurs de la zone possèdent un tag spécifique. Les cibles valides peuvent ensuite être transmises à un autre script où une autre action peut alors exécuter une condition de vérification aléatoire et appliquer un effet selon cette probabilité. Les cibles peuvent ensuite être à nouveau transmises à un autre script où une autre condition peut vérifier si les cibles sont toujours en vie et appliquer un comportement spécial si elles sont mortes.
Ce ne sont, bien sûr, que des exemples. C'est un système extrêmement flexible.
- Zones complexes
Enfin, il est possible d'empiler des cibles pour créer des zones complexes, en utilisant éventuellement 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 : Dans cette section, « script parent » désigne le script qui exécute le « script héritier », qui est le script qui utilisera les cibles héritées.
Lorsque vous utilisez l'héritage des cibles, il est important d'examiner attentivement le script parent pour vous assurer que les bonnes données sont bien transmises.
INHERIT_SCRIPT_TARGET
Lorsque vous utilisez INHERIT_SCRIPT_TARGET, les cibles du script parent sont transmises au script héritier. Cela comporte quelques nuances :
-
Lorsqu'on transmet des cibles d'entité, il est possible d'exécuter des actions qui nécessitent des emplacements (comme l'apparition de 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.
-
Lorsqu'on transmet des cibles d'emplacement, il n'est possible d'utiliser que des emplacements. La seule façon d'obtenir une entité à partir d'un emplacement est de créer une zone à cet emplacement et d'y rechercher des entités. Ainsi, 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éritage des zones
Lorsque vous utilisez INHERIT_SCRIPT_ZONE_FULL ou INHERIT_SCRIPT_ZONE_BORDER, il est impératif que le script parent définisse une zone, faute de quoi le script héritier ne pourra pas s'exécuter correctement.
De plus, les zones peuvent éventuellement être suivies. Ce suivi sera également transmis avec la zone.
-
Une zone non suivie créera toujours une zone à l'endroit défini par le script héritier. Cela signifie que les paramètres de la zone seront utilisés par les actions des scripts héritiers pour créer de toutes nouvelles zones à chaque exécution d'une action, et l'emplacement de ces zones sera défini par l'action.
-
Une zone suivie peut transmettre exactement le même emplacement de zone à tous les scripts héritiers si le script parent est réglé pour cibler
ZONE_FULLouZONE_BORDER. Cela signifie que tous les scripts agiront sur les mêmes emplacements.