Elite Script Vetores Relativos
Para que servem
Vetores relativos são vetores que são relativos a uma localização específica mas dinâmica.
Para explicar melhor o que são, vamos considerar o seguinte caso: você quer empurrar um jogador em direção ao boss como parte de um poder. Como tanto o boss quanto o jogador se movem durante o combate, não é possível depender de um vetor específico para conseguir este efeito - você precisará de um vetor que vai do jogador em direção ao boss. (Imagine uma linha curta com uma seta indo do jogador em direção ao boss.)
Vetores relativos podem ser usados de tantas maneiras que seria impossível listá-las todas, mas entre elas estão: disparar entidades (como projéteis) em direção a um jogador ou mob específico; gerar reforços atrás de um jogador; disparar um bloco em queda em uma direção específica; criar raios que são disparados em direção a um jogador, e muito mais.
Como funcionam os vetores?
Se você não sabe ou não se lembra o que são vetores ou como eles funcionam, você pode pensar em vetores como setas que apontam de um ponto para outro ponto.
Como tal, uma das propriedades dos vetores é o seu comprimento. Este comprimento é importante; no caso de flechas, este comprimento é a velocidade com que uma flecha é disparada, no caso de tentar obter pontos de deslocamento de uma localização específica é a distância desse ponto. Coisas mais distantes terão comprimentos de vetor maiores, e coisas mais próximas terão comprimentos menores.
Para algumas mecânicas, você provavelmente não vai querer depender de quão distantes dois pontos estão, já que você só quer obter uma direção. Felizmente você pode usar a normalização de vetores, que garante que a direção é preservada mas muda o comprimento para ser 1.0. Você pode então usar multiplicadores para facilmente modificar o vetor até estar satisfeito com o deslocamento que ele fornece ou a velocidade que ele dá.
Propriedades
| Valor | Detalhes | Obrigatório? | Valor padrão |
|---|---|---|---|
SourceTarget | Target no ponto de onde o vetor começará | ✅ | none |
DestinationTarget | Target no ponto final do vetor | ✅ | none |
normalize | Define se o vetor deve ser normalizado | ❌ | false |
multiplier | Multiplica o comprimento do vetor. Você pode aleatorizar este valor usando ~. Exemplo: 1.0~2.5. | ❌ | 1.0 |
offset | Permite inserir um deslocamento fixo manual a este deslocamento. Você pode aleatorizar este valor usando ~. Exemplo: 0~5,0~2,0~10. | ❌ | none |
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 atrás 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 fogo animada que encolhe até a localização de spawn.
Ordem de operações
A ordem de operações ao aplicar as propriedades é a seguinte:
Cálculo do vetor -> normalize -> multiplier -> offset
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 você ajuste posições dinamicamente ao criar scripts, tornando mais fácil ajustar posições de alvo ou efeitos com base no contexto.
Como Funcionam os Deslocamentos Relativos?
Deslocamentos relativos são aditivos, o que significa que qualquer que seja o resultado do deslocamento será adicionado ao valor base (como uma localização ou vetor).
Vamos analisar um exemplo:
Você tem uma ray zone:
Target 1éSELF(o boss).Target 2éNEARBY_PLAYERScom um alcance de 10.
Se um jogador for encontrado a 8 blocos de distância, o raio terá 8 blocos de comprimento, terminando no jogador.
Agora vamos aplicar um deslocamento relativo:
Caso 1: normalize = false, multiplier = 1
- A distância original é 8.
- O valor do deslocamento se torna
8 × 1 = 8. - Comprimento final do raio:
8 + 8 = 16.
O raio passará através do jogador e continuará por 8 blocos adicionais.
Caso 2: normalize = false, multiplier = 2
- O valor do deslocamento se torna
8 × 2 = 16. - Comprimento final do raio:
8 + 16 = 24.
Caso 3: normalize = true, multiplier = 1
- A distância é normalizada para 1.
- O valor do deslocamento se torna
1 × 1 = 1. - Comprimento final do raio:
8 + 1 = 9.
Caso 4: normalize = true, multiplier = 2
- O valor do deslocamento se torna
1 × 2 = 2. - Comprimento final do raio:
8 + 2 = 10.
Resumo
normalize = falseusa a distância real entre os alvos.normalize = truesempre começa de uma base de 1, independentemente da distância real.- O deslocamento é sempre adicionado ao valor original.
- Quando
multiplieré definido como0comnormalize = true, o deslocamento se torna0(já que1 × 0 = 0), e comnormalize = false, o deslocamento também se torna0(já que qualquer número multiplicado por0é0), desativando efetivamente o deslocamento relativo em ambos os casos.
Este sistema permite que você facilmente estenda ou reduza distâncias dinamicamente ao construir lógicas de habilidades mais complexas nos scripts do EliteMobs.
Propriedades
| Valor | Detalhes | Obrigatório? | Valor padrão |
|---|---|---|---|
SourceTarget | Target no ponto de onde o vetor começará | ✅ | none |
DestinationTarget | Target no ponto final do vetor | ✅ | none |
normalize | Define se o vetor deve ser normalizado | ❌ | false |
multiplier | Multiplica o comprimento do vetor. Você 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 criará um raio estático entre o boss e o jogador, com um deslocamento relativo que estende o raio 5 blocos além do jogador. Note que deslocamentos regulares também são 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 pés.
Nota: Embora este exemplo use deslocamento relativo em uma zona, tenha em mente que deslocamentos relativos não são limitados a zonas, eles podem ser aplicados a outros alvos também.