Pular para o conteúdo principal

Alvos do Elite Script

Os alvos são uma parte central dos Elite Scripts e são necessários para que as Ações e Zonas funcionem.

Tipos de Alvo

Os tipos de alvo definem quais entidades ou localizações serão alvo de um script.

Tipo de AlvoDetalhesEspecial
NEARBY_PLAYERSJogadores no alcanceRequer range
NEARBY_MOBSMobs no alcanceRequer range
NEARBY_ELITESElites no alcanceRequer range
WORLD_PLAYERSJogadores no mundo
ALL_PLAYERSJogadores no servidor
DIRECT_TARGETJogadores no eventoRequer evento compatível
SELFElite usando o poder
SELF_SPAWNAlveja a localização de spawn de um boss
LOCATIONLocalização específicaRequer location
LOCATIONSVárias localizações específicasRequer locations
ZONE_FULLAlvos dentro da zonaRequer Zone
ZONE_BORDERAlvos na borda da zonaRequer Zone
ACTION_TARGETHerda os alvos de uma ação.Só pode ser usado para condições de ação e Vetores Relativos!!
LANDING_LOCATIONAlveja a localização onde um bloco caiu.Só pode ser usado para a ação SPAWN_FALLING_BLOCK!
INHERIT_SCRIPT_TARGETHerda o alvo do script que executa este scriptSó pode ser executado se o script foi chamado por outro script!
INHERIT_SCRIPT_ZONE_FULLAlvos dentro da zona herdada do script que executa este scriptRequer Zone no script que chama este script!
INHERIT_SCRIPT_ZONE_BORDERAlvos na borda da zona herdada do script que executa este scriptRequer Zone no script que chama este script!
Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hello World!"

Isso envia uma mensagem para o alvo. Como o alvo está definido como ALL_PLAYERS, enviará essa mensagem para todos os jogadores online.


Atributos compartilhados

As seguintes configurações podem ser aplicadas a todos os alvos.

ValoresDetalhesEspecial
offsetDefine o deslocamento para a localização do alvo.Não pode alvejar entidades!
Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"

Isso invoca um raio 2 blocos acima do boss. Note que STRIKE_LIGHTNING usa localizações e não afeta entidades, então pode ter deslocamentos.

Você não pode definir um deslocamento para enviar uma mensagem, já que mensagens são enviadas para jogadores. No entanto, você pode definir um deslocamento para uma zona que pode então alvejar entidades.


range

Define o alcance para escanear jogadores próximos no tipo de alvo NEARBY_PLAYERS.

ValoresDetalhesPadrão
rangeDefine o alcance, em blocos, para escanear alvos jogadores.20.0
Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Jogadores alvejados dentro de 25 blocos!"

Isso envia uma mensagem para jogadores dentro de 25 blocos do boss quando o boss morre.

location

Define a localização para o tipo de alvo LOCATION.

ValoresDetalhesPadrão
locationDefine a localização do mundo que será alvejada.none

Isso usa o formato location: nomedomunodo,x,y,z,pitch,yaw para a localização.

Note que same_as_boss é um marcador válido para o nome do mundo, como same_as_boss,100,64,100,0,0 seria uma localização válida que alvejaria o mesmo mundo onde o boss está.

Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATION
location: "myWorld,100,64,200,0,0"

Isso gera um ataque de raio na localização x=100, y=64, z=200 de um mundo chamado myWorld.


locations

Define as localizações para o tipo de alvo LOCATIONS.

ValoresDetalhesPadrão
locationsDefine a lista de localizações do mundo que serão alvejadas.none

Isso usa o formato nomedomunodo,x,y,z,pitch,yaw para a localização.

Note que same_as_boss é um marcador válido para o nome do mundo, como same_as_boss,100,64,100,0,0 seria uma localização válida que alvejaria o mesmo mundo onde o boss está.

Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATIONS
locations:
- "myWorld,100,64,200,0,0"
- "same_as_boss,-100,12,130,0,0"

Isso gera um ataque de raio na localização x=100, y=64, z=200 de um mundo chamado myWorld e outro ataque de raio no mesmo mundo do boss na localização x=-100, y=12 e z=130.


Alvejando zonas

Zonas têm múltiplos alvos, e é importante entender como elas funcionam para usar o Elite Scripting em seu máximo potencial.

As zonas funcionam em duas partes:

Parte 1 - Definindo onde a zona fica

As zonas precisam saber onde devem estar, e para isso você usa o sistema de alvos da mesma forma que faria para qualquer outro efeito baseado em localização, como um ataque de raio.

Exemplo
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF

Isso gera uma zona cilíndrica ao redor do boss. Note que nenhuma ação está definida neste exemplo ainda, isso é coberto abaixo.

Algumas zonas, como STATIC_RAY, têm dois ou mais alvos. Isso ocorre porque raios são linhas, e linhas são definidas por dois pontos. Isso é coberto mais extensivamente na página de zonas, mas todas funcionam fundamentalmente da mesma forma.

Parte 2 - Alvejando o interior da zona

Agora que a zona sabe onde está, precisamos que a ação saiba que seu alvo é a zona que definimos. É para isso que servem targetType: ZONE_FULL e targetType:ZONE_BORDER.

Exemplo
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL

Usando a mesma zona da primeira parte, agora adicionamos a ação. O alvo para esta ação é ZONE_FULL, o que significa que estará gerando partículas dentro de toda a zona.

Note que ZONE_BORDER não está disponível para todas as zonas. Mais sobre isso na página de zonas de script.

Rastreamento de zona

Define se a zona se moverá com o alvo, como se a zona se moverá quando o boss se mover para targetType: SELF.

ValoresDetalhesPadrão
trackDefine se a zona se moverá com o alvo.true

Note que zonas animáveis não podem rastrear. Mais sobre isso aqui.

Exemplo
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false

Usando o mesmo exemplo da parte 1 e parte 2, a zona agora está configurada para não rastrear. Isso significa que a zona aparecerá na localização do boss, mas mesmo enquanto o boss continua se movendo, a zona permanecerá onde foi gerada inicialmente.

Finalmente, note que se uma zona está configurada para não rastrear, ela registrará sua localização no momento em que o script for chamado.

Como exemplo, você quer ter uma fase de aviso e uma fase de dano para seu script, você precisará certificar-se de executar todas as ações no início e colocar um tempo de espera em todas as ações relacionadas ao dano que você deseja executar depois individualmente. Você não deve atrasar um script inteiro que você chama através de RUN_SCRIPT por razões técnicas.

O seguinte é um exemplo correto de um poder com uma fase de aviso e uma fase de dano retirado do Frost Palace Sanctum.

Exemplo
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
- action: SPAWN_PARTICLE
wait: 60
times: 13
repeatEvery: 3
particles:
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: -0.5
speed: 0.2
Target:
targetType: ZONE_FULL
track: false
- action: RUN_SCRIPT
scripts:
- DamageCylinder
- action: PLAY_ANIMATION
sValue: fire_zone
Target:
targetType: SELF
- action: SET_MOB_AI
duration: 100
bValue: false
Target:
targetType: SELF
Cooldowns:
local: 1200
global: 300
DamageCylinder:
Zone:
radius: 10.0
shape: CYLINDER
height: 10
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
offset: 0,-1,0
Actions:
- action: DAMAGE
wait: 60
repeatEvery: 10
times: 4
multiplier: 4
Target:
targetType: ZONE_FULL
track: false
- action: SET_ON_FIRE
wait: 60
duration: 80
Target:
targetType: ZONE_FULL
track: false

Este script faz muitas coisas, mas está separado em dois scripts claros: VisualCylinder e DamageCylinder.

VisualCylinder executa primeiro e tem a ação RUN_SCRIPT que imediatamente também executa o DamageCylinder ao mesmo tempo que o VisualCylinder está sendo executado.

No entanto, cada ação individual em DamageCylinder está configurada para esperar 60 ticks, ou 3 segundos.

Isso significa que o boss tem uma fase de aviso de 3 segundos e depois faz uma fase de dano, e mesmo que as zonas estejam configuradas para não rastrear, a zona de aviso e a zona de dano estarão na mesma localização.

Propriedades de alvo específicas de zona

As zonas têm as seguintes propriedades específicas:

coverage

Define a porcentagem da zona que será realmente usada para a ação. Só funciona para alvos de localização (não funcionará ao alvejar jogadores ou outras entidades).

ValoresDetalhesPadrão
coverageDefine a porcentagem da zona que será coberta. Você pode aleatorizar este valor usando ~ exemplo: 1.0~0.3.1.0
Exemplo
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
coverage: 0.5

Neste caso, apenas 50% da zona será coberta com partículas.

Herdando alvos

Quando um script executa outro script (ou "chama" esse script), é possível passar informações de zona e alvo do primeiro script para o segundo.

Exemplos de uso

  1. Executores de script melhorados

Executores de script são scripts cuja única função é executar muitos outros scripts. Eles são usados para tornar o gerenciamento de scripts mais fácil, especialmente ao lidar com vários scripts que requerem tempo preciso.

Com a herança de alvos, vários scripts podem usar a mesma zona ou alvo, reduzindo potencialmente centenas de linhas de script repetitivo.

  1. Filtragem de alvos Matryoshka / Filtragem de alvos de bonecas russas

Condições de filtragem podem ser aplicadas a alvos em uma ação. Ao passar os alvos para um script diferente com filtros diferentes, torna-se possível camada as condições e aplicar efeitos diferentes ao mesmo conjunto de alvos com base em critérios cada vez mais específicos.

Como exemplo, é possível criar uma zona que procura jogadores e fazer uma ação que verifica se todos os jogadores na zona têm uma tag específica. Os alvos válidos podem então ser passados para outro script onde outra ação pode então executar uma verificação de condição aleatória e aplicar um efeito com base nessa chance. Os alvos podem então ser passados adiante para outro script onde outra condição pode fazer uma verificação para ver se os alvos ainda estão vivos e fazer algum comportamento especial se estiverem mortos.

Estes são, claro, apenas exemplos. É um sistema altamente flexível.

  1. Zonas complexas

Finalmente, é possível camada alvos para criar zonas complexas, opcionalmente usando condições se necessário, e é até possível criar zonas semi-aleatórias usando as condições do script e a capacidade de executar apenas um dos scripts listados nas ações do script.

Nota: Para esta seção, "script pai" refere-se ao script que executa o "script herdeiro", que é o script que usará os alvos herdados.

Ao usar herança de alvos, é importante dar uma olhada cuidadosa no script pai para garantir que os dados corretos estejam sendo passados para baixo.

INHERIT_SCRIPT_TARGET

Ao usar INHERIT_SCRIPT_TARGET, os alvos do script pai serão passados para o script herdeiro. Isso tem algumas ressalvas:

  • Ao passar alvos de entidade, é possível executar ações que requerem localizações (como gerar partículas), pois a localização das entidades será usada. É, claro, também possível usar ações que requerem entidades.

  • Ao passar alvos de localização, é possível apenas usar localizações. A única maneira de obter uma entidade de localizações é criando uma zona naquela localização e procurando por entidades. Então, embora não seja impossível passar uma localização e depois obter entidades, isso exigirá um pouco de trabalho extra.

Herdando zonas

Ao usar INHERIT_SCRIPT_ZONE_FULL ou INHERIT_SCRIPT_ZONE_BORDER, é imperativo que o script pai defina uma zona, ou então o script herdeiro não será capaz de executar corretamente.

Adicionalmente, as zonas podem opcionalmente ser rastreadas. Isso também será passado junto com a zona.

  • Uma zona não rastreada sempre criará uma zona onde definida pelo script herdeiro. Isso significa que as configurações da zona serão usadas pelas ações nos scripts herdeiros para criar novas zonas toda vez que uma ação for executada, e a localização dessas zonas será definida pela ação.

  • Uma zona rastreada pode passar a mesma localização exata da zona para todos os scripts herdeiros se o script pai estiver configurado para alvejar ZONE_FULL ou ZONE_BORDER. Isso significa que cada script estará agindo nas mesmas localizações.