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 Alvo | Detalhes | Especial |
|---|---|---|
NEARBY_PLAYERS | Jogadores no alcance | Requer range |
NEARBY_MOBS | Mobs no alcance | Requer range |
NEARBY_ELITES | Elites no alcance | Requer range |
WORLD_PLAYERS | Jogadores no mundo | ❌ |
ALL_PLAYERS | Jogadores no servidor | ❌ |
DIRECT_TARGET | Jogadores no evento | Requer evento compatível |
SELF | Elite usando o poder | ❌ |
SELF_SPAWN | Alveja a localização de spawn de um boss | ❌ |
LOCATION | Localização específica | Requer location |
LOCATIONS | Várias localizações específicas | Requer locations |
ZONE_FULL | Alvos dentro da zona | Requer Zone |
ZONE_BORDER | Alvos na borda da zona | Requer Zone |
ACTION_TARGET | Herda os alvos de uma ação. | Só pode ser usado para condições de ação e Vetores Relativos!! |
LANDING_LOCATION | Alveja a localização onde um bloco caiu. | Só pode ser usado para a ação SPAWN_FALLING_BLOCK! |
INHERIT_SCRIPT_TARGET | Herda o alvo do script que executa este script | Só pode ser executado se o script foi chamado por outro script! |
INHERIT_SCRIPT_ZONE_FULL | Alvos dentro da zona herdada do script que executa este script | Requer Zone no script que chama este script! |
INHERIT_SCRIPT_ZONE_BORDER | Alvos na borda da zona herdada do script que executa este script | Requer 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.
| Valores | Detalhes | Especial |
|---|---|---|
offset | Define 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.
| Valores | Detalhes | Padrão |
|---|---|---|
range | Define 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.
| Valores | Detalhes | Padrão |
|---|---|---|
location | Define 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.
| Valores | Detalhes | Padrão |
|---|---|---|
locations | Define 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.
| Valores | Detalhes | Padrão |
|---|---|---|
track | Define 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).
| Valores | Detalhes | Padrão |
|---|---|---|
coverage | Define 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
- 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.
- 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.
- 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_FULLouZONE_BORDER. Isso significa que cada script estará agindo nas mesmas localizações.