Aller au contenu principal

Vecteurs Relatifs Elite Script

A quoi ils servent

Les vecteurs relatifs sont des vecteurs qui sont relatifs a un emplacement specifique mais dynamique.

Pour mieux expliquer ce que c'est, considerons le cas suivant : vous voulez pousser un joueur vers le boss dans le cadre d'un pouvoir. Etant donne que le boss et le joueur se deplacent pendant le combat, il n'est pas possible de s'appuyer sur un vecteur specifique pour accomplir cet effet - vous aurez besoin d'un vecteur qui va du joueur vers le boss. (Imaginez une courte ligne avec une fleche allant du joueur vers le boss.)

Les vecteurs relatifs peuvent etre utilises de tant de facons qu'il serait impossible de toutes les enumerer, mais parmi elles : tirer des entites (comme des projectiles) vers un joueur ou un mob specifique ; faire apparaitre des renforts derriere un joueur ; tirer un bloc qui tombe dans une direction specifique ; creer des rayons qui sont tires vers un joueur, et bien plus encore.

Contexte d'utilisation

Les vecteurs relatifs sont utilises dans les contextes d'action avec la cle YAML RelativeVector:. Cela inclut des actions comme :

  • SUMMON_ENTITY - Definit la velocite (direction et vitesse de mouvement) de l'entite generee
  • SPAWN_PARTICLE - Definit la direction dans laquelle les particules se deplacent
  • PUSH - Definit la velocite de poussee
  • SPAWN_FALLING_BLOCK - Definit la velocite du bloc qui tombe
  • SET_FACING - Definit la direction vers laquelle une entite fait face

Pour les contextes de cible (modification des positions de cible), utilisez relativeOffset: a la place. Consultez la section Decalage Relatif Elite Script ci-dessous pour plus de details sur le fonctionnement different de relativeOffset.

Comment fonctionnent les vecteurs ?

Si vous ne savez pas ou ne vous souvenez pas de ce que sont les vecteurs ou comment ils fonctionnent, vous pouvez penser aux vecteurs comme des fleches qui pointent d'un point vers un autre point.

Ainsi, l'une des proprietes des vecteurs est leur longueur. Cette longueur est importante ; dans le cas des fleches, cette longueur est la vitesse a laquelle une fleche est tiree, dans le cas de la tentative d'obtenir des points de decalage a partir d'un emplacement specifique, c'est la distance par rapport a ce point. Les choses plus eloignees auront des longueurs de vecteur plus grandes, et les choses plus proches auront des longueurs plus courtes.

Pour certaines mecaniques, vous ne voudrez probablement pas dependre de la distance entre deux points, car vous voulez simplement obtenir une direction. Heureusement, vous pouvez utiliser la normalisation de vecteur, qui garantit que la direction est preservee mais change la longueur pour qu'elle soit de 1.0. Vous pouvez ensuite utiliser des multiplicateurs pour modifier facilement le vecteur jusqu'a ce que vous soyez satisfait du decalage qu'il fournit ou de la velocite qu'il donne.

Proprietes

ValeurDetailsObligatoire ?Valeur par defaut
SourceTargetCible au point a partir duquel le vecteur commenceranone
DestinationTargetCible au point final pour le vecteurnone
normalizeDefinit si le vecteur doit etre normalisefalse
multiplierMultiplie la longueur du vecteur. Vous pouvez randomiser cette valeur en utilisant ~. Exemple : 1.0~2.5.1.0
offsetPermet d'inserer un decalage fixe manuel a ce decalage. Vous pouvez randomiser cette valeur en utilisant ~. Exemple : 0~5,0~2,0~10.none

Randomisation

multiplier et offset supportent tous deux la randomisation a l'aide du delimiteur tilde (~) :

  • Pour multiplier : Utilisez le format min~max (par ex., 1.0~2.5). A chaque execution du script, une valeur aleatoire entre 1.0 et 2.5 (inclus) sera selectionnee.
  • Pour offset : Utilisez le format x1~x2,y1~y2,z1~z2 (par ex., 0~5,0~2,0~10). Chaque composante (X, Y, Z) est randomisee independamment.

Les valeurs de randomisation sont regenerees a chaque calcul du vecteur, permettant des effets dynamiques et varies.

Exemple
eliteScript:
ShootChicken:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SUMMON_ENTITY
sValue: CHICKEN
Target:
targetType: SELF
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 2.0

Tire un poulet


eliteScript:
ShootArrow:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SUMMON_ENTITY
sValue: ARROW
Target:
targetType: SELF
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 2.0

Tire une fleche


eliteScript:
SpawnReinforcement:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SUMMON_ENTITY
sValue: ZOMBIE
Target:
targetType: SELF
relativeOffset:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 2.0

Fait apparaitre un zombie a 2 blocs derriere le joueur, par rapport au boss.


eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
Shape: SPHERE
target:
targetType: SELF_SPAWN
offset: 0,0,0
track: false
filter: PLAYER
radius: 6
Actions:
- action: SPAWN_PARTICLE
repeatEvery: 38
times: 5
Target:
targetType: ZONE_FULL
track: false
coverage: 0.9
particles:
- particle: FLAME
RelativeVector:
SourceTarget:
targetType: ACTION_TARGET
track: true
DestinationTarget:
targetType: SELF_SPAWN
offset: 0,-0.5,0
speed: 0.05

Cree une sphere de flammes animee qui retrecit vers l'emplacement d'apparition.

Comment ca fonctionne :

  • La zone cible tous les joueurs dans une sphere de 6 blocs autour de l'emplacement d'apparition du boss.
  • Les particules apparaissent a des points aleatoires dans toute la sphere (coverage: 0.9 signifie que 90 % des points sont utilises).
  • Chaque particule se deplace depuis son point d'apparition (ACTION_TARGET avec track: true) vers l'emplacement d'apparition du boss (SELF_SPAWN).
  • Le track: true sur SourceTarget signifie que la particule met continuellement a jour sa direction en se deplacant.
  • Cela cree un effet de mouvement vers l'interieur, faisant paraitre la sphere se contracter vers le centre.
  • L'effet se repete 5 fois (times: 5) avec 38 ticks entre chaque iteration (repeatEvery: 38).

Ordre des operations

L'ordre des operations lors de l'application des proprietes est le suivant :

Calcul du vecteur -> normalize -> multiplier -> offset

Notes techniques

Normalisation de vecteur : La normalisation preserve la direction du vecteur mais fixe sa longueur a exactement 1.0. Ceci est utile lorsque vous avez besoin d'un comportement coherent quelle que soit la distance.

Multiplicateurs negatifs : Le multiplicateur peut etre negatif pour inverser la direction du vecteur. Par exemple, un multiplicateur de -1.0 pointera dans la direction opposee.

Coordonnees de decalage : Le decalage est applique en coordonnees mondiales, pas par rapport a la direction du vecteur. Il est ajoute apres tous les autres calculs.

Validation du monde : Les cibles source et destination doivent etre dans le meme monde. Si elles sont dans des mondes differents, un vecteur nul (0, 0, 0) est renvoye, ce qui peut provoquer l'echec des actions ou un comportement inattendu.

Vecteurs nuls : Lorsque les cibles sont invalides ou dans des mondes differents, le systeme renvoie un vecteur nul. Cela peut faire apparaitre des entites sans velocite ou des actions sans effet.

Contexte velocite vs position : Dans les contextes d'action comme SUMMON_ENTITY, RelativeVector definit la velocite (mouvement) de l'entite. Dans les contextes de cible, relativeOffset definit un decalage de position (ajustement de localisation). Le meme systeme sous-jacent est utilise, mais l'interpretation differe selon le contexte.

Decalage Relatif Elite Script

A Quoi Servent-Ils ?

Les decalages relatifs fonctionnent de maniere similaire aux vecteurs relatifs, mais avec l'objectif d'ajouter de la flexibilite aux decalages. Ils vous permettent d'ajuster les positions dynamiquement lors de la creation de scripts, facilitant ainsi l'ajustement fin des positions cibles ou des effets en fonction du contexte.

Comment Fonctionnent les Decalages Relatifs ?

Les decalages relatifs sont additifs, ce qui signifie que quelle que soit la valeur a laquelle le decalage se resout, elle sera ajoutee a la valeur de base (comme un emplacement ou un vecteur).

Decomposons un exemple :

Vous avez une zone de rayon :

  • Target 1 est SELF (le boss).
  • Target 2 est NEARBY_PLAYERS avec une portee de 10.

Si un joueur est trouve a 8 blocs de distance, le rayon aura une longueur de 8 blocs, se terminant au joueur.

Appliquons maintenant un decalage relatif :

Cas 1 : normalize = false, multiplier = 1

  • La distance d'origine est 8.
  • La valeur de decalage devient 8 x 1 = 8.
  • Longueur finale du rayon : 8 + 8 = 16.

Le rayon traversera le joueur et continuera pendant 8 blocs supplementaires.

Cas 2 : normalize = false, multiplier = 2

  • La valeur de decalage devient 8 x 2 = 16.
  • Longueur finale du rayon : 8 + 16 = 24.

Cas 3 : normalize = true, multiplier = 1

  • La distance est normalisee a 1.
  • La valeur de decalage devient 1 x 1 = 1.
  • Longueur finale du rayon : 8 + 1 = 9.

Cas 4 : normalize = true, multiplier = 2

  • La valeur de decalage devient 1 x 2 = 2.
  • Longueur finale du rayon : 8 + 2 = 10.

Resume

  • normalize = false utilise la distance reelle entre les cibles.
  • normalize = true commence toujours a partir d'une base de 1, quelle que soit la distance reelle.
  • Le decalage est toujours ajoute a la valeur d'origine.
  • Lorsque multiplier est defini sur 0 avec normalize = true, le decalage devient 0 (car 1 x 0 = 0), et avec normalize = false, le decalage devient egalement 0 (car tout nombre multiplie par 0 est 0), desactivant effectivement le decalage relatif dans les deux cas.

Ce systeme vous permet d'etendre ou de reduire facilement les distances dynamiquement lors de la construction d'une logique de competence plus complexe dans les scripts EliteMobs.

Proprietes

ValeurDetailsObligatoire ?Valeur par defaut
SourceTargetCible au point a partir duquel le vecteur commenceranone
DestinationTargetCible au point final pour le vecteurnone
normalizeDefinit si le vecteur doit etre normalisefalse
multiplierMultiplie la longueur du vecteur. Vous pouvez randomiser cette valeur en utilisant ~. Exemple : 1.0~2.5.1.0
Exemple
eliteScript:
MakeStaticRay:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: STATIC_RAY
Target:
targetType: SELF
offset: 0,1,0
Target2:
targetType: NEARBY_PLAYERS
range: 10
offset: 0,1,0
relativeOffset:
sourceTarget:
targetType: SELF
destinationTarget:
targetType: NEARBY_PLAYERS
range: 10
multiplier: 5
normalize: true
Actions:
- action: SPAWN_PARTICLE
Target:
targetType: ZONE_FULL
particles:
- particle: ELECTRIC_SPARK
amount: 1
repeatEvery: 1
times: 400

Ceci creera un rayon statique entre le boss et le joueur, avec un decalage relatif qui etend le rayon de 5 blocs au-dela du joueur. Notez que des decalages reguliers sont egalement appliques a Target et Target2 pour garantir que le rayon est trace du centre du boss au centre du joueur, plutot que de leurs pieds.

Remarque : Bien que cet exemple utilise un decalage relatif sur une zone, gardez a l'esprit que les decalages relatifs ne sont pas limites aux zones, ils peuvent etre appliques a d'autres cibles egalement.