Saltar para o conteúdo principal

Alvos de Elite Script

Os alvos selecionam as entidades ou localizações usadas por ações, condições e zonas. Escreva Target como um mapa YAML. As predefinições são SELF para targetType, 20.0 para range e true para track. Os nomes dos campos não distinguem maiúsculas de minúsculas; os valores enumerados de tipo de alvo devem estar em maiúsculas.

Tipos de alvo​

Os tipos de alvo definem que entidades ou localizações são visadas por um script.

DIRECT_TARGET é a entidade do evento: pode ser uma elite atacante, uma entidade a atravessar uma zona ou um jogador. Use-o apenas com um evento compatível; sem alvo direto, não seleciona nada. Não é automaticamente o alvo de combate atual do boss. Os tipos de proximidade pesquisam numa caixa alinhada com os eixos em torno do boss, sem ordenar por distância.

Alvos de entidade podem fornecer a localização atual dos pés a ações de localização. O inverso não é automático: LOCATION, LOCATIONS e LANDING_LOCATION não selecionam entidades presentes nessas posições. Crie uma zona para as encontrar. Os seletores de jogadores não excluem por si só espectadores ou jogadores de outros encontros; uma ação pode aplicar regras adicionais.

Tipo de alvoDetalhesEspecial
NEARBY_PLAYERSJogadores no alcancerange opcional, predefinição 20.0
NEARBY_MOBSEntidades vivas que não sejam jogadores no alcance, excluindo o bossrange opcional, predefinição 20.0
NEARBY_ELITESElites acompanhadas no alcance, excluindo o bossrange opcional, predefinição 20.0
WORLD_PLAYERSJogadores no mundo❌
ALL_PLAYERSJogadores no servidor❌
DIRECT_TARGETEntidade fornecida pelo eventoRequer um evento compatível
SELFElite que usa o poder❌
SELF_SPAWNLocalização de spawn guardada do boss para ações de localizaçãoAs ações de entidade continuam a receber o próprio 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_TARGETUsa o contexto do alvo da ação envolventeApenas para condições de ação com FILTERING e vetores relativos; não é um alvo de ação autónomo
LANDING_LOCATIONVisa a localização onde um bloco ou entidade aterrou.Só pode ser usado nos landingScripts das ações SPAWN_FALLING_BLOCK e SUMMON_ENTITY!
INHERIT_SCRIPT_TARGETHerda o alvo do script que executa este scriptSó pode ser executado se o script tiver sido 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!"

Isto envia uma mensagem ao alvo. Uma vez que o alvo está definido como ALL_PLAYERS, enviará essa mensagem a todos os jogadores online.


Atributos partilhados​

Estas definições aplicam-se ao resolver localizações de alvo. Não movem entidades nem alteram qual entidade recebe uma ação.

ValoresDetalhesEspecial
offsetDefine o deslocamento (offset) para a localização do alvo.Não pode visar entidades!
relativeOffsetDesloca localizações usando uma definição de vetor relativo. Os seus alvos de origem e destino determinam a direção.Não pode visar entidades!

Os deslocamentos aplicam-se a localizações derivadas de alvos de entidade, como SELF e DIRECT_TARGET, a SELF_SPAWN, LOCATION e LOCATIONS, e a cada localização amostrada de uma zona por ZONE_FULL, ZONE_BORDER e as suas variantes herdadas. Para mover a zona inteira, aplique o deslocamento ao Target da própria zona, como nos exemplos abaixo. As mesmas regras aplicam-se aos utilitários de scripts Lua.

offset usa os eixos X/Y/Z do mundo, não a direção para onde a entidade olha. Aplica-se antes de relativeOffset. Os resultados de LANDING_LOCATION e INHERIT_SCRIPT_TARGET ignoram estes deslocamentos adicionais. Dentro de um vetor relativo, ACTION_TARGET usa diretamente a localização de ação fornecida e ignora as suas próprias definições de deslocamento.

Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"

O relâmpago cai 2 blocos acima do boss. STRIKE_LIGHTNING seleciona localizações, por isso o seu alvo aceita um deslocamento. O relâmpago é apenas visual e não causa dano a entidades.

Não pode definir um deslocamento para enviar uma mensagem, uma vez que as mensagens são enviadas aos jogadores. Pode, no entanto, definir um deslocamento numa zona que possa depois visar entidades.


range​

Define metade da largura da caixa de pesquisa para NEARBY_PLAYERS, NEARBY_MOBS e NEARBY_ELITES. O valor aplica-se aos eixos X, Y e Z; não é um limite esférico de distância. As pesquisas de mobs e elites excluem o boss que executa o poder.

Use um número fixo não negativo para uma caixa consistente. Um intervalo com ~ pode ser amostrado separadamente em cada eixo e usa a amostragem decimal descrita em coverage abaixo; não garante um cubo com um único raio sorteado.

ValoresDetalhesPredefinição
rangeMetade da largura em blocos para pesquisas de jogadores, mobs e elites próximos.20.0
Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"

Quando o boss morre, envia uma mensagem aos jogadores na caixa que se estende 25 blocos ao longo de cada eixo a partir da sua posição.

location​

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

ValoresDetalhesPredefinição
locationDefine a localização no mundo que será visada.none

Isto usa o formato location: worldname,x,y,z,yaw,pitch para a localização. worldname,x,y,z também é aceite (yaw e pitch assumem então 0), tal como a forma sem mundo x,y,z,yaw,pitch, embora esta última deixe a localização sem mundo associado e raramente seja o que se pretende. Um simples x,y,z com três valores não é válido e é rejeitado com Attempted to deserialize an invalid location! na consola.

Use um mundo carregado ou same_as_boss. A análise não carrega mundos; dados mal formatados ou um mundo não resolvido podem falhar ao usar o alvo. As coordenadas são absolutas, mesmo com same_as_boss, que apenas altera o mundo.

Se o mundo configurado não estiver carregado e o boss estiver num mundo chamado <configuredWorld>_<number>, o alvo usa esse mundo de instância. Isto não substitui um mundo configurado que já esteja carregado.

Note que same_as_boss é um marcador de posição (placeholder) válido para o nome do mundo, por exemplo same_as_boss,100,64,100,0,0 seria uma localização válida que visaria o mesmo mundo onde o boss se encontra.

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

Isto faz surgir um relâmpago 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.

ValoresDetalhesPredefinição
locationsDefine a lista de localizações no mundo que serão visadas.none

Isto usa o formato worldname,x,y,z,yaw,pitch para cada localização, com as mesmas variantes aceites que em location.

Note que same_as_boss é um marcador de posição (placeholder) válido para o nome do mundo, por exemplo same_as_boss,100,64,100,0,0 seria uma localização válida que visaria o mesmo mundo onde o boss se encontra.

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"

Isto faz surgir um relâmpago na localização x=100, y=64, z=200 de um mundo chamado myWorld e outro relâmpago no mesmo mundo do boss na localização x=-100, y=12 e z=130.


Visar zonas​

As zonas separam os alvos de origem das ações que usam a sua geometria. Zone.Target fornece as origens; ZONE_FULL ou ZONE_BORDER numa ação seleciona a partir das formas resultantes. Várias origens podem gerar várias formas. As entidades são deduplicadas; formas sobrepostas podem continuar a fornecer localizações de partículas duplicadas.

As zonas funcionam em duas partes:

Parte 1 - Definir onde a zona fica​

As zonas precisam de saber onde devem estar e, para isso, usa-se o sistema de alvos da mesma forma que faria para qualquer outro efeito baseado em localização, como um relâmpago.

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

Este fragmento descreve um cilindro de raio 10 e altura 1, a partir dos pés do boss para cima. Ainda não tem ações; um script executável precisa das Actions abaixo. filter: PLAYER aplica-se às consultas de entidades, não às localizações geométricas das partículas.

Algumas zonas, como STATIC_RAY, têm dois ou mais alvos. Isto deve-se ao facto de os raios serem linhas, e as linhas serem definidas por dois pontos. Isto é abordado mais extensivamente na página das zonas, mas, fundamentalmente, todas funcionam da mesma forma.

Parte 2 - Visar o interior da zona​

Use targetType: ZONE_FULL para a forma completa ou targetType: ZONE_BORDER para a borda. Ações de localização recebem pontos geométricos amostrados; ações de entidade recebem entidades conforme o filtro e as verificações de inclusão da zona. Não recebem o mesmo tipo de coleção.

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

As partículas surgem em posições amostradas por todo o cilindro, não nas posições dos jogadores. Há 12 execuções separadas por 5 ticks. As ações de partículas em zonas usam cerca de 30% de cobertura se coverage não estiver definido explicitamente. filter: PLAYER não limita estas partículas aos jogadores.

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

Acompanhamento da zona (track)​

Defina track no Target da ação, como abaixo. Com true, as formas normalmente voltam a resolver as origens móveis quando solicitadas. Com false, a ação guarda as formas antes do seu wait, mantendo a origem fixa; consultas posteriores continuam a encontrar as entidades presentes na forma nesse momento. Não fixa a lista de jogadores presentes no lançamento.

ValoresDetalhesPredefinição
trackVolta a resolver o alvo em vez de guardar a origem da zona e as localizações amostradas.true

Com um animationDuration positivo, a ação guarda as formas animadas quando começa, seja qual for a sua definição de track. Guarda as formas, não uma lista estática das suas posições, por isso a animação continua. Mais informação 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 da parte 2, a zona está agora definida para não acompanhar. Isto significa que a zona surgirá na localização do boss, mas mesmo que o boss continue a afastar-se, a zona permanecerá onde surgiu inicialmente.

A cache é preparada ao iniciar a ação, antes da sua espera. Atrasar RUN_SCRIPT também atrasa o início e a cache do script chamado.

Para um aviso seguido de dano na posição original, inicie ambos os scripts imediatamente e coloque wait nas ações de dano. Use origens fixas coincidentes se as posições tiverem de permanecer idênticas independentemente de movimento ou ações anteriores.

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.

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

No entanto, cada uma das ações em DamageCylinder está definida para esperar 60 ticks, ou 3 segundos.

O aviso dura 3 segundos antes dos efeitos atrasados. Ambos os scripts capturam a mesma posição horizontal do boss quando iniciados imediatamente. Os volumes diferem: o cilindro visual tem altura 1 aos pés, enquanto o de dano começa 1 bloco abaixo e tem altura 10. DAMAGE repete-se quatro vezes a intervalos de 10 ticks; SET_ON_FIRE executa-se uma vez após a espera e pede 80 ticks de fogo. A animação precisa de um modelo personalizado compatível com fire_zone.

Cada execução de uma ação mantém a sua própria cache. Lançamentos sobrepostos do mesmo script não substituem as localizações guardadas uns dos outros, e um novo lançamento nunca reutiliza localizações guardadas por um anterior.

Propriedades de alvo específicas das zonas​

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

coverage​

Define a percentagem da zona que será efetivamente usada para a ação. Só funciona para alvos de localização (não funciona ao visar jogadores ou outras entidades).

ValoresDetalhesPredefinição
coverageFração das localizações da zona a conservar; 0.5 conserva aproximadamente metade. Prefira um valor fixo de 0 a 1.1.0

Um intervalo como 0.3~1.0 sorteia um valor desde 0.3 até 1.0, sem incluir 1.0, e a cobertura pode ser sorteada separadamente para cada ponto. Use uma fração fixa para uma cobertura previsível. coverage: 1.0 explícito conserva todas as posições; a omissão numa ação de zona SPAWN_PARTICLE usa 0.3. A cobertura não reduz consultas de entidades. Com track: false, a seleção de localizações de uma zona estática é guardada e reutilizada, sem novo sorteio em cada repetição.

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

Cada posição amostrada tem 50% de probabilidade de ser conservada para partículas. A contagem resultante é aproximada, não exatamente metade.

Herdar alvos​

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

Exemplos de utilização

  1. Executores de scripts melhorados

Os executores de scripts são scripts cuja única função é executar muitos outros scripts. São usados para facilitar a gestão de scripts, especialmente ao lidar com vários scripts que requerem temporização precisa.

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

  1. Filtragem de alvos em matriosca / boneca russa

Uma ação pai que realmente resolve e filtra entidades pode passar o resultado guardado ao filho através da sua lista scripts. Mantenha os tipos de alvo compatíveis. RUN_SCRIPT não executa por si só a filtragem individual; acrescentar-lhe uma condição FILTERING não produz uma lista filtrada para herdar.

Para verificar etiquetas, use ACTION_TARGET com FILTERING na ação de entidade. Uma probabilidade aleatória requer condições de script ou BLOCKING; não é um sorteio individual por entidade durante a filtragem. isAlive verifica a validade Bukkit, pelo que invertê-lo não é uma forma fiável de ativar comportamento quando um jogador morre.

  1. Zonas complexas

Por fim, é possível estratificar alvos para criar zonas complexas, opcionalmente usando condições se necessário, e é até possível criar zonas semialeatorizadas usando as condições de script e a capacidade de executar apenas um dos scripts listados nas ações do script.

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

Ao usar a herança de alvos, é importante analisar cuidadosamente o script pai para garantir que os dados corretos estão a ser passados.

INHERIT_SCRIPT_TARGET​

INHERIT_SCRIPT_TARGET lê o seletor ou a cache da ação pai concreta que chamou o filho, não a união de todos os alvos do script pai. Coloque-o nas ações ou origens de zona do filho, não nas suas Conditions de nível superior: essas são avaliadas antes de existirem os dados de ação herdados, e o alvo herdado falha aí com um erro.

O pai só passa os seus alvos resolvidos e filtrados pelas condições quando o seu Target tem track: false. Com o track: true predefinido, o filho volta a resolver o alvo do pai, sem a filtragem do pai. Um pai RUN_SCRIPT nunca resolve os seus próprios alvos, pelo que o seu filho volta sempre a resolver as entidades. Com track: false, o filho reutiliza as localizações que esse pai guardou quando a sua ação começou. Há algumas ressalvas:

  • Ao passar alvos de entidade, o filho pode usá-los com ações de entidades ou com ações de localização. As ações de localização recebem as localizações das entidades.

  • Ao passar alvos de localização, só é possível usar localizações. Uma ação de entidades que herde localizações falha com um erro. A única forma de obter uma entidade a partir de uma localização é criando uma zona nessa localização e procurando entidades. Por isso, embora não seja impossível passar uma localização e depois obter entidades, isso exigirá um pouco de trabalho extra.

Herdar zonas​

Ao usar INHERIT_SCRIPT_ZONE_FULL ou INHERIT_SCRIPT_ZONE_BORDER, é imperativo que o script pai defina uma zona, caso contrário o script herdeiro não conseguirá ser executado corretamente.

Uma ação com track: false guarda as formas da zona antes da sua espera. Uma ação com acompanhamento normalmente volta a resolver as origens móveis sem as guardar. Os dados da ação pai podem reutilizar formas guardadas; track: true não fixa uma localização partilhada.

Os alvos de zona herdados usam a própria Zone do script pai e as formas guardadas pela ação que fez a chamada, se as tiver guardado. As consultas de entidades de INHERIT_SCRIPT_ZONE_FULL usam a verificação do volume completo, tal como ZONE_FULL. Se o script pai não tiver uma zona válida, ou se o script não tiver sido chamado por outro script, a ação falha com um erro.

Para partilhar uma origem fixa, dê track: false ao Target da ação que faz a chamada. O filho reutiliza então as formas que o pai guardou quando a sua ação começou, mesmo que as ações do próprio filho esperem.