Aller au contenu principal

Zones Elite Script

Les zones sont des emplacements définis par une forme pouvant servir de cibles aux scripteurs pour exécuter tout type d’action.

Un seul objet YAML Zone peut être défini par script. Respectez cette casse au niveau supérieur ; ses champs internes sont insensibles à la casse, mais les valeurs de forme et de filtre doivent être en majuscules. Plusieurs cibles d’origine peuvent produire plusieurs formes à partir de cet objet.

Pour cibler des zones, les types de cible ZONE_FULL ou ZONE_BORDER peuvent être utilisés.

Les zones elles-mêmes utilisent également des cibles de script pour définir l'endroit où la zone apparaîtra.

Si le Target de la zone est omis, il vaut SELF. Les autres valeurs par défaut sont shape: CYLINDER, filter: PLAYER, radius: 5, borderRadius: 1, height: 1, pointRadius: 0.5, animationDuration: 0 et ignoresSolidBlocks: true. Les rotations et dimensions du cuboïde valent zéro. Définissez explicitement des dimensions utiles : ces valeurs ne valident pas une rencontre complète. Les tableaux indiquent les champs à renseigner pour chaque forme, plutôt que ceux dont l’absence provoque systématiquement une erreur d’analyse.

Utilisez des dimensions finies et positives, ainsi que des extrémités distinctes dans le même monde pour les rayons et cônes. Préférez les valeurs fixes : une plage décimale avec ~ tire une valeur de min jusqu’à max, ce dernier exclu, et peut être tirée plusieurs fois. Une plage inversée comme 5~1 fait ignorer tout le script par EliteMobs. Les grands volumes génèrent beaucoup de positions. Les recherches d’entités des cylindres, cônes, cuboïdes et rayons explorent une boîte autour de la forme lorsque celle-ci mesure 256 blocs ou moins sur chaque axe ; les sphères, dômes et formes plus grandes examinent les candidats dans tout le monde de la forme. Adaptez les dimensions et la fréquence de répétition à l’effet.

Les particules utilisent des positions géométriques échantillonnées, pas les boîtes de collision des entités. Une action de zone SPAWN_PARTICLE couvre environ 30 % des positions par défaut ; définissez explicitement coverage: 1.0 sur sa cible pour conserver toutes les positions échantillonnées. filter ne modifie pas ces positions. Les tests d’entités varient selon la forme, comme indiqué ci-dessous ; un contour de particules n’est pas une limite de collision exacte.

shape​

Définit la forme de la zone. Formes valides :

Type de formeDétailsAnimableBordure
CYLINDERForme cylindrique❌✅
SPHEREForme sphérique❌✅
DOMEForme de dôme (demi-sphère)❌✅
CUBOIDForme de cuboïde❌✅
STATIC_RAYLigne entre deux points résolus, sans animation propre❌❌
ROTATING_RAYUne ligne rotative entre deux points✅❌
TRANSLATING_RAYUne ligne qui se déplace entre deux points initiaux et deux points finaux✅❌
CONEForme de cône❌✅

Animable​

Une forme animée commence son animation lorsqu’une action la génère et la met en cache. Avec un animationDuration positif, cela se produit normalement au démarrage de l’action, avant son wait. Des actions distinctes peuvent créer des formes animées distinctes.

Cela signifie que si une action possède un temps d’attente, la zone s’est déjà déplacée pendant que l’action attendait, avant même que celle-ci ne démarre.

Les animations avancent à chaque tick. Utilisez SPAWN_PARTICLE avec repeatEvery: 1 pour afficher des particules à chaque tick. Une fréquence moindre affiche moins d’images pendant que la zone continue de bouger.

Si vous souhaitez créer une action de zone rotative mais attendre un certain nombre de ticks avant de démarrer l’action, faites-en un script distinct et appelez ce script via RUN_SCRIPT. Assurez-vous que le RUN_SCRIPT comporte le temps d’attente souhaité.

Les zones conservent leur dernière géométrie calculée à la fin de la tâche d’animation. Utilisez des durées positives. La dernière image de l’animation applique exactement la rotation configurée ou atteint exactement les cibles finales.

Avec un animationDuration positif, chaque action met ses formes en cache dès son démarrage, quel que soit son réglage track. Les formes en cache s’animent depuis leurs extrémités initiales sans suivre les boss ou joueurs en mouvement. Pour les formes statiques, définissez track: false sur le Target de l’action afin de fixer l’origine ; le définir uniquement dans Zone.Target ne fige pas la forme de l’action. Consultez le guide des cibles pour la durée de vie du cache.


Bordure​

Certaines zones peuvent avoir des bordures. Une bordure signifie que ZONE_BORDER peut être utilisé comme cible de la zone. Les bordures sont définies en créant une seconde forme, plus petite, à l’intérieur de la première forme, plus grande. La zone comprise entre la petite zone et la grande zone constitue la bordure.

borderRadius est le rayon intérieur, pas l’épaisseur de la bordure. Gardez-le positif ou nul et inférieur au rayon extérieur. Les cylindres soustraient un cylindre intérieur de même hauteur, formant un anneau latéral sans couvercle supérieur ou inférieur. L’échantillonnage de la bordure d’un cuboïde suit des règles distinctes et peut différer de sa recherche d’entités. Les rayons n’ont pas de résultat de bordure ; utilisez ZONE_FULL.

Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 4
borderRadius: 3
height: 8
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE_LARGE
Target:
targetType: ZONE_BORDER
repeatEvery: 5
times: 20

elitescript_zones_border.jpg

Ce script produit 20 émissions de fumée sur des positions échantillonnées de la bordure, espacées de 5 ticks. La première est immédiate et la dernière arrive 95 ticks plus tard, soit environ 4,75 secondes à 20 ticks par seconde ; la tâche de répétition se termine à l’intervalle suivant. La durée de vie des particules est indépendante du calendrier de l’action.

Avec ZONE_FULL, les positions échantillonnées proviennent de toute la zone plutôt que de sa bordure :

elitescript_zones_borderfull.jpg


SPHERE​

L’origine est le centre de la sphère. Les positions sont échantillonnées sur une grille à pas entiers dans le rayon. Le test d’entité approxime chaque entité par une sphère dont le rayon vaut la moitié de sa hauteur entre les pieds et les yeux : elle peut donc chevaucher la zone même avec les pieds à l’extérieur. Le test de bordure exclut aussi les entités qui chevauchent la sphère intérieure.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être SPHERE✅
targetDéfinit l’emplacement du centre de la sphère✅
filterDéfinit quels types d’entités sont ciblés❌
radiusRayon de la sphère✅
borderRadiusRayon de la sphère intérieure❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: SPHERE
radius: 4
borderRadius: 3
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 5
times: 20

elitescript_zones_sphere.jpg

Ce script démontre la forme d’une sphère avec des particules de nuage.


DOME​

Les particules échantillonnent la moitié supérieure de la sphère à partir de la hauteur de l’origine. Limite actuelle : la recherche complète d’entités hérite du test de sphère sans restriction à un hémisphère, donc ZONE_FULL peut sélectionner des entités sous le dôme. La recherche de bordure exige en plus des pieds au-dessus de originY - 1 ; les tests directs de position utilisent aussi ce seuil. L’affichage d’un dôme ne prouve pas que sa zone d’impact se limite à la moitié supérieure.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être DOME✅
targetDéfinit l’emplacement du centre du dôme✅
filterDéfinit quels types d’entités sont ciblés❌
radiusRayon du dôme✅
borderRadiusRayon du dôme intérieur❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: DOME
radius: 4
borderRadius: 3
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 5
times: 20

elitescript_zones_dome.jpg

Ce script démontre la forme d’un dôme avec des particules de nuage.


CONE​

Pour chaque origine, le cône utilise la première position résolue de Target2. Une recherche de joueurs proches n’est pas triée par distance ; utilisez une cible unique pour viser une entité précise.

Target est la pointe et Target2 le centre de la base ; leur distance définit la hauteur du cône. Gardez ces points distincts et dans le même monde. Le test d’entité examine les pieds, le centre et le sommet de la boîte de collision, plutôt qu’une intersection exacte de boîtes. Les positions échantillonnées utilisent la grille de coordonnées entières du monde.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être CONE✅
targetDéfinit l’emplacement de l’apex (la pointe) du cône✅
target2Définit l’emplacement du centre de la base du cône✅
filterDéfinit quels types d’entités sont ciblés❌
radiusRayon de la base du cône✅
borderRadiusRayon du cône intérieur❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CONE
radius: 10
Target:
targetType: SELF
offset: 0,0,0
Target2:
targetType: SELF
offset: 0,10,0
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.8
repeatEvery: 5
times: 20

Ce script démontre la forme d’un cône avec des particules de nuage. Gardez à l’esprit que cette zone est une forme CONE, c’est-à-dire un volume en 3D, un point important à considérer si vous cherchez à créer des effets de balayage.


CYLINDER​

L’origine est le centre de la face inférieure. Le cylindre s’étend de height vers le haut, pas également au-dessus et au-dessous de l’origine. Le test d’entité exige que toute la hauteur de sa boîte de collision tienne entre la base et le sommet, en plus du test horizontal. Un cylindre visuel de hauteur 1 ne sélectionne donc normalement pas un joueur debout. Prévoyez une hauteur suffisante et une origine adaptée aux actions sur les entités.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être CYLINDER✅
targetCentre de la face inférieure✅
filterDéfinit quels types d’entités sont ciblés❌
radiusRayon du cylindre✅
borderRadiusRayon du cylindre intérieur❌
heightHauteur du cylindre✅
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 4
borderRadius: 3
height: 8
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 5
times: 20

elitescript_zones_cylinder.jpg

Ce script démontre la forme d’un cylindre avec des particules de nuage.


CUBOID​

L’implémentation actuelle du cuboïde utilise des limites différentes pour les positions échantillonnées, les tests de points et les tests d’entités. Les positions couvrent x et z blocs autour du centre et montent de y blocs. Le chevauchement d’entités utilise des demi-largeurs x / 2 et z / 2, mais ne monte que de y / 2. Un test direct de point utilise ±x, ±y et ±z. Ne supposez pas que les particules et la recherche d’entités couvrent des volumes identiques ; vérifiez la géométrie prévue sur votre serveur. Cela s’applique aussi aux cuboïdes natifs Lua.

Pour des dimensions entières positives, les coordonnées de particules vont de -floor(x / 2) à x - 1 - floor(x / 2), de même pour Z, et de 0 à y - 1 verticalement. Les limites d’entités utilisent les coordonnées de bloc de l’origine et arrondissent leurs bords horizontaux vers le bas. Les particules de bordure conservent les points avec Y <= yBorder et X ou Z hors de la demi-largeur intérieure ; ce n’est pas une coque complète obtenue en soustrayant le cuboïde intérieur de l’extérieur.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être CUBOID✅
targetDéfinit l’emplacement du centre du cuboïde✅
filterDéfinit quels types d’entités sont ciblés❌
xDéfinit la longueur du cuboïde✅
yDéfinit la hauteur du cuboïde✅
zDéfinit la largeur du cuboïde, vaut x par défaut❌
xBorderDéfinit la longueur du cuboïde intérieur❌
yBorderDéfinit la hauteur du cuboïde intérieur❌
zBorderLargeur du cuboïde intérieur ; 0 reprend xBorder lorsque celui-ci est non nul❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CUBOID
x: 4
y: 4
z: 4
xBorder: 3
yBorder: 3
zBorder: 3
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 5
times: 20

elitescript_zones_cuboid.jpg

Ce script démontre la forme d’un cuboïde avec des particules de nuage.


STATIC_RAY​

Chaque origine résolue de Target est associée à chaque extrémité résolue de Target2 dans le même monde. STATIC_RAY n’a pas d’animation propre, mais avec le track: true par défaut sur la cible de l’action, les répétitions le régénèrent depuis les extrémités actuelles. Utilisez track: false sur la cible de l’action pour les figer.

pointRadius contrôle le pas d’échantillonnage et le rayon de collision, pas le diamètre complet. Les rayons statiques et en translation effectuent au maximum 500 pas, soit une portée échantillonnée d’environ 500 * pointRadius blocs. Les rayons rotatifs utilisent des pas de 2 * pointRadius. Choisissez une valeur strictement positive. Avec ignoresSolidBlocks: false, l’échantillonnage s’arrête sur un bloc solide échantillonné ; ce n’est pas une détection continue et de grands pas peuvent sauter des obstacles. Les tests d’entités vérifient le chevauchement avec des sphères autour des points échantillonnés.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être STATIC_RAY✅
targetDéfinit l’emplacement du premier point de la ligne✅
target2Définit l’emplacement du dernier point de la ligne✅
filterDéfinit quels types d’entités sont ciblés❌
ignoresSolidBlocksDéfinit si le rayon traversera les blocs solides. Vaut true par défaut❌
pointRadiusDéfinit l’épaisseur du rayon. La valeur par défaut est 0.5 bloc.❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: STATIC_RAY
Target2:
targetType: DIRECT_TARGET
offset: 0,1,0
Target:
targetType: SELF
offset: 0,1,0
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 5
times: 20

elitescript_zones_staticray.jpg

Ce script démontre la forme d’un rayon statique avec des particules de nuage.

Les deux extrémités utilisent offset: 0,1,0, ce qui place le rayon un bloc au-dessus de leurs pieds. Ce n’est pas automatiquement le milieu des entités de toutes tailles.


ROTATING_RAY​

Les rotations sont en degrés et la durée en ticks. Chaque origine est associée à chaque Target2 valide du même monde. L’extrémité source reste fixe et sert de pivot. Les rotations de pitch/yaw initiales et animées acceptent les deux signes. Le rayon complet, déjà pivoté, existe avant le premier tick d’animation, y compris lorsque la durée vaut zéro. Les extrémités initiales doivent être différentes. Les durées négatives et les valeurs non finies sont rejetées.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être ROTATING_RAY✅
filterDéfinit quels types d’entités sont ciblés❌
targetDéfinit l’emplacement du premier point de la ligne✅
target2Définit l’emplacement du dernier point de la ligne✅
animationDurationDéfinit, en ticks, la durée de la rotation✅
pitchPreRotationApplique une rotation initiale au pitch avant l’animation❌
yawPreRotationApplique une rotation initiale au yaw avant l’animation❌
pitchRotationDéfinit la rotation du pitch pour l’animation❌
yawRotationDéfinit la rotation du yaw pour l’animation❌
ignoresSolidBlocksDéfinit si le rayon traversera les blocs solides. Vaut true par défaut❌
pointRadiusDéfinit l’épaisseur du rayon. La valeur par défaut est 0.5 bloc.❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: ROTATING_RAY
animationDuration: 100
pitchPrerotation: 0
yawPrerotation: 0
pitchRotation: 0
yawRotation: 360
ignoresSolidBlocks: true
Target:
targetType: SELF
offset: 0,1,0
Target2:
targetType: DIRECT_TARGET
offset: 0,1,0
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 1
times: 100

elitescript_zones_rotatingray.gif

Ce script montre à quoi ressemble un rayon rotatif avec des particules de nuage.

D’abord, il crée un rayon allant du boss jusqu’au joueur qui l’a blessé, avec des particules de nuage. Ensuite, il ajuste légèrement les positions vers le haut d’un bloc à l’aide d’offset.

Ensuite, le rayon tourne de 360 degrés depuis l’origine du côté du boss sur 100 ticks. Le joueur définit la direction initiale, pas le centre de rotation. Des valeurs négatives de pitch/yaw font tourner le rayon dans le sens inverse.


TRANSLATING_RAY​

Chaque paire initiale Target / Target2 utilise le premier FinalTarget et FinalTarget2 résolu. Une cible finale omise laisse l’extrémité correspondante à sa position de départ. Gardez toutes les extrémités dans le même monde. Une durée positive anime le rayon jusqu’aux destinations exactes ; une durée nulle laisse le rayon initial statique. Une durée négative est rejetée.

CléDétailsÀ définir explicitement
shapeDéfinit la forme de la zone. Doit être TRANSLATING_RAY✅
filterDéfinit quels types d’entités sont ciblés❌
animationDurationDéfinit, en ticks, la durée de la translation✅
targetDéfinit l’emplacement du premier point de la ligne✅
finalTargetDéfinit l’emplacement de destination du premier point de la ligne✅
target2Définit l’emplacement du deuxième point de la ligne✅
finalTarget2Définit l’emplacement de destination du deuxième point de la ligne✅
ignoresSolidBlocksDéfinit si le rayon traversera les blocs solides. Vaut true par défaut❌
pointRadiusDéfinit l’épaisseur du rayon. La valeur par défaut est 0.5 bloc.❌
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
FinalTarget:
targetType: SELF
offset: 0,10,0
Target2:
targetType: DIRECT_TARGET
FinalTarget2:
targetType: DIRECT_TARGET
offset: 0,10,0
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
repeatEvery: 1
times: 100

elitescript_zones_translatingray.gif

Ce script montre à quoi ressemble un rayon en mouvement avec des particules de nuage.

D’abord, il crée un rayon allant du boss jusqu’au joueur qui l’a blessé, avec des particules de nuage.

Ensuite, il anime le rayon vers le haut de 10 blocs à l’aide des décalages de FinalTarget et FinalTarget2.

La durée configurée est de 100 ticks, environ 5 secondes à 20 ticks par seconde. La dernière image tombe exactement sur les cibles finales.

Nous pouvons facilement faire se déplacer le rayon latéralement en réglant l’offset en Z sur quelque chose comme offset: 0,0,10 :

elitescript_zones_translatingray2.gif

Les décalages suivent les axes du monde ; changer de vue modifie seulement l’apparence du mouvement à l’écran. Un décalage X suit l’axe X du monde, quelle que soit votre orientation.


filter​

La propriété filter peut être utilisée pour ne cibler que certaines entités à l’intérieur de la zone. Ces entités peuvent être :

Ces filtres s’appliquent aux recherches d’entités, pas aux positions des particules. ELITE et LIVING peuvent inclure le boss qui lance la capacité s’il passe le test de la forme. PLAYER n’exclut pas de lui-même les spectateurs ou les joueurs d’autres rencontres. Des règles d’éligibilité propres à chaque action peuvent encore s’appliquer.

ValeurDétails
PLAYERNe cible que les joueurs dans la zone (par défaut)
ELITEEntités vivantes suivies comme élites dans la zone
LIVINGEntités vivantes dans la zone, joueurs compris
Exemple
eliteScript:
FilterExample:
Events:
- PlayerDamagedByEliteMobEvent
Zone:
shape: SPHERE
radius: 12
borderRadius: 11
filter: ELITE
Target:
targetType: SELF
track: false

Ce fragment règle le filtre d’entités de la zone sur les élites. Il ne contient pas encore d’Actions et n’est pas un script complet exécutable. Le track: false placé sur la cible d’origine ne fige pas la zone d’une action ; placez-le sur sa cible ZONE_FULL ou ZONE_BORDER lorsque vous ajoutez des actions nécessitant une origine fixe.