Pular para o conteúdo principal

Alvos de Elite Script

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

Tipos de alvo

Os tipos de alvo definem que entidades ou localizações são visadas por 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 um evento compatível
SELFElite que usa o poder
SELF_SPAWNVisa 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ções e Vetores Relativos!!
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

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

ValoresDetalhesEspecial
offsetDefine o deslocamento (offset) para a localização do alvo.Não pode visar entidades!
relativeOffsetDefine um deslocamento relativo para a localização do alvo. Aceita um modelo de vetor relativo, permitindo que o deslocamento seja calculado em relação à direção para onde o boss está virado.Não pode visar entidades!
Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"

Isto faz cair um relâmpago 2 blocos acima do boss. Note que STRIKE_LIGHTNING usa localizações e não afeta entidades, pelo que pode ter deslocamentos.

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 o alcance para procurar jogadores próximos no tipo de alvo NEARBY_PLAYERS.

ValoresDetalhesPredefinição
rangeDefine o alcance, em blocos, para procurar alvos de jogadores.20.0
Exemplo
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"

Isto envia uma mensagem aos jogadores num raio de 25 blocos do boss quando o boss morre.

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,pitch,yaw para a localização.

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,pitch,yaw para a localização.

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 têm múltiplos alvos, e é importante compreender como funcionam para utilizar o Elite Scripting em todo o seu potencial.

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

Isto faz surgir uma zona cilíndrica em torno do boss. Note que ainda não estão definidas ações neste exemplo; isso é abordado mais abaixo.

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

Agora que a zona sabe onde está, precisamos que a ação saiba que o 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, adicionamos agora a ação. O alvo desta ação é ZONE_FULL, o que significa que fará surgir 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 das zonas de script.

Acompanhamento da zona (track)

Define se a zona se moverá com o alvo, por exemplo se a zona se moverá quando o boss se mover no caso de targetType: SELF.

ValoresDetalhesPredefinição
trackDefine se a zona se moverá juntamente com o alvo.true

Note que as zonas animáveis não podem acompanhar (track). 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 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.

Por fim, note que, se uma zona estiver definida para não acompanhar, registará a sua localização no momento em que o script é chamado.

Como exemplo, se quiser ter uma fase de aviso e uma fase de dano para o seu script, terá de garantir que executa todas as ações no início e colocar um tempo de espera em todas as ações relacionadas com dano que quer executar mais tarde individualmente. Não deve atrasar um script inteiro que chame 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.

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.

Isto 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 definidas para não acompanhar, a zona de aviso e a zona de dano ficarão na mesma localização.

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
coverageDefine a percentagem da zona que será coberta. Pode aleatorizar este valor usando ~, por 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 ficará coberta de partículas.

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

Podem ser aplicadas condições de filtragem aos alvos numa ação. Ao passar os alvos para um script diferente com filtros diferentes, torna-se possível estratificar 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 etiqueta específica. Os alvos válidos podem depois ser passados para outro script, onde outra ação pode executar uma condição de verificação aleatória e aplicar um efeito com base nessa probabilidade. Os alvos podem depois ser passados para outro script, onde outra condição pode fazer uma verificação para ver se os alvos ainda estão vivos e executar um comportamento especial caso estejam mortos.

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

  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

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

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

  • Ao passar alvos de localização, só é possível usar localizações. 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.

Além disso, as zonas podem ser opcionalmente acompanhadas (tracked). Isto também será passado juntamente com a zona.

  • Uma zona não acompanhada (untracked) criará sempre uma zona no local definido pelo script herdeiro. Isto significa que as definições da zona serão usadas pelas ações nos scripts herdeiros para criar zonas totalmente novas sempre que uma ação é executada, e a localização dessas zonas será definida pela ação.

  • Uma zona acompanhada (tracked) pode passar exatamente a mesma localização de zona a todos os scripts herdeiros se o script pai estiver definido para visar ZONE_FULL ou ZONE_BORDER. Isto significa que todos os scripts atuarão sobre as mesmas localizações.