Pular para o conteúdo principal

Elite Script Vetores Relativos

Para que servem

Vetores relativos sao vetores que sao relativos a uma localizacao especifica mas dinamica.

Para explicar melhor o que sao, vamos considerar o seguinte caso: voce quer empurrar um jogador em direcao ao boss como parte de um poder. Como tanto o boss quanto o jogador se movem durante o combate, nao e possivel depender de um vetor especifico para conseguir este efeito - voce precisara de um vetor que vai do jogador em direcao ao boss. (Imagine uma linha curta com uma seta indo do jogador em direcao ao boss.)

Vetores relativos podem ser usados de tantas maneiras que seria impossivel lista-las todas, mas entre elas estao: disparar entidades (como projeteis) em direcao a um jogador ou mob especifico; gerar reforcos atras de um jogador; disparar um bloco em queda em uma direcao especifica; criar raios que sao disparados em direcao a um jogador, e muito mais.

Contexto de Uso

Vetores relativos sao usados em contextos de acao com a chave YAML RelativeVector:. Isso inclui acoes como:

  • SUMMON_ENTITY - Define a velocidade (direcao e velocidade de movimento) da entidade gerada
  • SPAWN_PARTICLE - Define a direcao em que as particulas se movem
  • PUSH - Define a velocidade do empurrao
  • SPAWN_FALLING_BLOCK - Define a velocidade do bloco em queda
  • SET_FACING - Define a direcao para a qual uma entidade olha

Para contextos de alvo (modificando posicoes de alvo), use relativeOffset: em vez disso. Veja a secao Elite Script Deslocamento Relativo abaixo para detalhes sobre como relativeOffset funciona de forma diferente.

Como funcionam os vetores?

Se voce nao sabe ou nao se lembra o que sao vetores ou como eles funcionam, pode pensar em vetores como setas que apontam de um ponto para outro ponto.

Como tal, uma das propriedades dos vetores e o seu comprimento. Este comprimento e importante; no caso de flechas, este comprimento e a velocidade com que uma flecha e disparada, no caso de tentar obter pontos de deslocamento de uma localizacao especifica e a distancia desse ponto. Coisas mais distantes terao comprimentos de vetor maiores, e coisas mais proximas terao comprimentos menores.

Para algumas mecanicas, voce provavelmente nao vai querer depender de quao distantes dois pontos estao, ja que voce so quer obter uma direcao. Felizmente voce pode usar a normalizacao de vetores, que garante que a direcao e preservada mas muda o comprimento para ser 1.0. Voce pode entao usar multiplicadores para facilmente modificar o vetor ate estar satisfeito com o deslocamento que ele fornece ou a velocidade que ele da.

Propriedades

ValorDetalhesObrigatorio?Valor padrao
SourceTargetTarget no ponto de onde o vetor comecaranone
DestinationTargetTarget no ponto final do vetornone
normalizeDefine se o vetor deve ser normalizadofalse
multiplierMultiplica o comprimento do vetor. Voce pode aleatorizar este valor usando ~. Exemplo: 1.0~2.5.1.0
offsetPermite inserir um deslocamento fixo manual a este deslocamento. Voce pode aleatorizar este valor usando ~. Exemplo: 0~5,0~2,0~10.none

Aleatoriedade

Tanto multiplier quanto offset suportam aleatoriedade usando o delimitador til (~):

  • Para multiplier: Use o formato min~max (ex.: 1.0~2.5). Cada vez que o script executa, um valor aleatorio entre 1.0 e 2.5 (inclusive) sera selecionado.
  • Para offset: Use o formato x1~x2,y1~y2,z1~z2 (ex.: 0~5,0~2,0~10). Cada componente (X, Y, Z) e aleatorizado independentemente.

Valores de aleatoriedade sao regenerados cada vez que o vetor e calculado, permitindo efeitos dinamicos e variados.

Exemplo
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 uma galinha


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 uma 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

Gera um zumbi 2 blocos atras do jogador, relativo ao 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

Cria uma esfera de chamas animada que encolhe ate a localizacao de spawn.

Como funciona:

  • A zona tem como alvo todos os jogadores dentro de uma esfera de 6 blocos ao redor da localizacao de spawn do boss.
  • Particulas surgem em pontos aleatorios por toda a esfera (coverage: 0.9 significa que 90% dos pontos sao usados).
  • Cada particula se move do seu ponto de spawn (ACTION_TARGET com track: true) em direcao a localizacao de spawn do boss (SELF_SPAWN).
  • O track: true no SourceTarget significa que a particula atualiza continuamente sua direcao conforme se move.
  • Isso cria um efeito de movimento para dentro, fazendo a esfera parecer colapsar em direcao ao centro.
  • O efeito se repete 5 vezes (times: 5) com 38 ticks entre cada iteracao (repeatEvery: 38).

Ordem de operacoes

A ordem de operacoes ao aplicar as propriedades e a seguinte:

Calculo do vetor -> normalize -> multiplier -> offset

Notas Tecnicas

Normalizacao de Vetor: A normalizacao preserva a direcao do vetor mas define seu comprimento para exatamente 1.0. Isso e util quando voce precisa de comportamento consistente independente da distancia.

Multiplicadores Negativos: O multiplicador pode ser negativo para inverter a direcao do vetor. Por exemplo, um multiplicador de -1.0 apontara na direcao oposta.

Coordenadas de Offset: O offset e aplicado em coordenadas mundiais, nao relativo a direcao do vetor. Ele e adicionado apos todos os outros calculos.

Validacao de Mundo: Os alvos de origem e destino devem estar no mesmo mundo. Se estiverem em mundos diferentes, um vetor zero (0, 0, 0) e retornado, o que pode fazer acoes falharem ou se comportarem inesperadamente.

Vetores Zero: Quando os alvos sao invalidos ou estao em mundos diferentes, o sistema retorna um vetor zero. Isso pode fazer entidades surgirem sem velocidade ou acoes nao terem efeito.

Contexto de Velocidade vs Posicao: Em contextos de acao como SUMMON_ENTITY, RelativeVector define a velocidade (movimento) da entidade. Em contextos de alvo, relativeOffset define um deslocamento de posicao (ajuste de localizacao). O mesmo sistema subjacente e usado, mas a interpretacao difere com base no contexto.

Elite Script Deslocamento Relativo

Para Que Servem?

Deslocamentos relativos funcionam de forma semelhante aos vetores relativos, mas com o objetivo de adicionar flexibilidade aos deslocamentos. Eles permitem que voce ajuste posicoes dinamicamente ao criar scripts, tornando mais facil ajustar posicoes de alvo ou efeitos com base no contexto.

Como Funcionam os Deslocamentos Relativos?

Deslocamentos relativos sao aditivos, o que significa que qualquer que seja o resultado do deslocamento sera adicionado ao valor base (como uma localizacao ou vetor).

Vamos analisar um exemplo:

Voce tem uma ray zone:

  • Target 1 e SELF (o boss).
  • Target 2 e NEARBY_PLAYERS com um alcance de 10.

Se um jogador for encontrado a 8 blocos de distancia, o raio tera 8 blocos de comprimento, terminando no jogador.

Agora vamos aplicar um deslocamento relativo:

Caso 1: normalize = false, multiplier = 1

  • A distancia original e 8.
  • O valor do deslocamento se torna 8 x 1 = 8.
  • Comprimento final do raio: 8 + 8 = 16.

O raio passara atraves do jogador e continuara por 8 blocos adicionais.

Caso 2: normalize = false, multiplier = 2

  • O valor do deslocamento se torna 8 x 2 = 16.
  • Comprimento final do raio: 8 + 16 = 24.

Caso 3: normalize = true, multiplier = 1

  • A distancia e normalizada para 1.
  • O valor do deslocamento se torna 1 x 1 = 1.
  • Comprimento final do raio: 8 + 1 = 9.

Caso 4: normalize = true, multiplier = 2

  • O valor do deslocamento se torna 1 x 2 = 2.
  • Comprimento final do raio: 8 + 2 = 10.

Resumo

  • normalize = false usa a distancia real entre os alvos.
  • normalize = true sempre comeca de uma base de 1, independentemente da distancia real.
  • O deslocamento e sempre adicionado ao valor original.
  • Quando multiplier e definido como 0 com normalize = true, o deslocamento se torna 0 (ja que 1 x 0 = 0), e com normalize = false, o deslocamento tambem se torna 0 (ja que qualquer numero multiplicado por 0 e 0), desativando efetivamente o deslocamento relativo em ambos os casos.

Este sistema permite que voce facilmente estenda ou reduza distancias dinamicamente ao construir logicas de habilidades mais complexas nos scripts do EliteMobs.

Propriedades

ValorDetalhesObrigatorio?Valor padrao
SourceTargetTarget no ponto de onde o vetor comecaranone
DestinationTargetTarget no ponto final do vetornone
normalizeDefine se o vetor deve ser normalizadofalse
multiplierMultiplica o comprimento do vetor. Voce pode aleatorizar este valor usando ~. Exemplo: 1.0~2.5.1.0
Exemplo
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

Isto criara um raio estatico entre o boss e o jogador, com um deslocamento relativo que estende o raio 5 blocos alem do jogador. Note que deslocamentos regulares tambem sao aplicados a Target e Target2 para garantir que o raio seja desenhado do centro do boss para o centro do jogador, em vez de seus pes.

Nota: Embora este exemplo use deslocamento relativo em uma zona, tenha em mente que deslocamentos relativos nao sao limitados a zonas, eles podem ser aplicados a outros alvos tambem.