Saltar al contenido principal

Vectores Relativos de Elite Script

Para qué sirven

Los vectores relativos son vectores que son relativos a una ubicación específica pero dinámica.

Para explicar mejor qué son estos, consideremos el siguiente caso: quieres empujar a un jugador hacia el jefe como parte de un poder. Dado que tanto el jefe como el jugador se mueven durante el combate, no es posible depender de un vector específico para lograr este efecto - necesitarás un vector que vaya desde el jugador hacia el jefe. (Imagina una línea corta con una flecha que va desde el jugador hacia el jefe.)

Los vectores relativos se pueden usar de tantas maneras que sería imposible enumerarlas todas, pero entre ellas están: disparar entidades (como proyectiles) hacia un jugador o mob específico; generar refuerzos detrás de un jugador; disparar un bloque en caída en una dirección específica; crear rayos que se disparan hacia un jugador, y mucho más.

¿Cómo funcionan los vectores?

Si no sabes o no recuerdas qué son los vectores o cómo funcionan, puedes pensar en los vectores como flechas que apuntan de un punto a otro punto.

Como tal, una de las propiedades de los vectores es su longitud. Esta longitud es importante; en el caso de las flechas, esta longitud es la velocidad a la que se dispara una flecha, en el caso de intentar obtener puntos de desplazamiento desde una ubicación específica es la distancia desde ese punto. Las cosas que están más lejos tendrán longitudes de vector mayores, y las cosas más cercanas tendrán longitudes más cortas.

Para algunas mecánicas, probablemente no querrás depender de qué tan separados estén dos puntos, ya que solo quieres obtener una dirección. Afortunadamente puedes usar la normalización de vectores, que garantiza que la dirección se preserve pero cambia la longitud a 1.0. Luego puedes usar multiplicadores para modificar fácilmente el vector hasta que estés satisfecho con el desplazamiento que proporciona o la velocidad que da.

Propiedades

ClaveValores¿Obligatorio?Por defecto
SourceTargetTarget en el punto desde el cual comenzará el vectornone
DestinationTargetTarget en el punto final para el vectornone
normalizeEstablece si el vector debe ser normalizadofalse
multiplierMultiplica la longitud del vector. Puedes aleatorizar este valor usando ~. Ejemplo: 1.0~2.5.1.0
offsetPermite insertar un desplazamiento fijo manual a este desplazamiento. Puedes aleatorizar este valor usando ~. Ejemplo: 0~5,0~2,0~10.none
Ejemplo
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

Dispara un pollo


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

Dispara una flecha


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

Genera un zombi 2 bloques detrás del jugador, relativo al jefe.


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

Crea una esfera de llamas animada que se encoge hacia la ubicación de generación.

Orden de operaciones

El orden de operaciones al aplicar las propiedades es el siguiente:

Cálculo del vector -> normalize -> multiplier -> offset

Desplazamiento Relativo de Elite Script

¿Para Qué Sirven?

Los desplazamientos relativos funcionan de manera similar a los vectores relativos, pero con el objetivo de agregar flexibilidad a los desplazamientos. Te permiten ajustar posiciones dinámicamente al hacer scripts, facilitando el ajuste fino de posiciones objetivo o efectos basados en el contexto.

¿Cómo Funcionan los Desplazamientos Relativos?

Los desplazamientos relativos son aditivos, lo que significa que cualquier cosa a la que se resuelva el desplazamiento será agregada al valor base (como una ubicación o vector).

Desglosemos un ejemplo:

Tienes una zona de rayo:

  • Target 1 es SELF (el jefe).
  • Target 2 es NEARBY_PLAYERS con un rango de 10.

Si se encuentra un jugador a 8 bloques de distancia, el rayo tendrá 8 bloques de largo, terminando en el jugador.

Ahora apliquemos un desplazamiento relativo:

Caso 1: normalize = false, multiplier = 1

  • La distancia original es 8.
  • El valor del desplazamiento se convierte en 8 × 1 = 8.
  • Longitud final del rayo: 8 + 8 = 16.

El rayo pasará a través del jugador y continuará 8 bloques adicionales.

Caso 2: normalize = false, multiplier = 2

  • El valor del desplazamiento se convierte en 8 × 2 = 16.
  • Longitud final del rayo: 8 + 16 = 24.

Caso 3: normalize = true, multiplier = 1

  • La distancia se normaliza a 1.
  • El valor del desplazamiento se convierte en 1 × 1 = 1.
  • Longitud final del rayo: 8 + 1 = 9.

Caso 4: normalize = true, multiplier = 2

  • El valor del desplazamiento se convierte en 1 × 2 = 2.
  • Longitud final del rayo: 8 + 2 = 10.

Resumen

  • normalize = false usa la distancia real entre los objetivos.
  • normalize = true siempre comienza desde una base de 1, independientemente de la distancia real.
  • El desplazamiento siempre es agregado al valor original.
  • Cuando multiplier se establece en 0 con normalize = true, el desplazamiento se convierte en 0 (ya que 1 × 0 = 0), y con normalize = false, el desplazamiento también se convierte en 0 (ya que cualquier número multiplicado por 0 es 0), deshabilitando efectivamente el desplazamiento relativo en ambos casos.

Este sistema te permite extender o reducir distancias dinámicamente al construir lógica de habilidades más compleja en el scripting de EliteMobs.

Propiedades

ClaveValores¿Obligatorio?Por defecto
SourceTargetTarget en el punto desde el cual comenzará el vectornone
DestinationTargetTarget en el punto final para el vectornone
normalizeEstablece si el vector debe ser normalizadofalse
multiplierMultiplica la longitud del vector. Puedes aleatorizar este valor usando ~. Ejemplo: 1.0~2.5.1.0
Ejemplo
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

Esto creará un rayo estático entre el jefe y el jugador, con un desplazamiento relativo que extiende el rayo 5 bloques más allá del jugador. Ten en cuenta que también se aplican desplazamientos regulares a Target y Target2 para asegurar que el rayo se dibuje desde el centro del jefe hasta el centro del jugador, en lugar de desde sus pies.

Nota: Aunque este ejemplo usa desplazamiento relativo en una zona, ten en cuenta que los desplazamientos relativos no están limitados a zonas, también se pueden aplicar a otros objetivos.