Condições de Elite Script
As condições permitem que os criadores de scripts façam com que scripts e/ou ações não sejam executados com base em condições específicas.
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Conditions:
isAlive: true
conditionType: BLOCKING
Target:
targetType: SELF
Actions:
- action: PLACE_BLOCK
Target:
targetType: DIRECT_TARGET
duration: 20
material: DIRT
offset: 0,3,0
Conditions:
locationIsAir: true
conditionType: BLOCKING
Target:
targetType: ACTION_TARGET
Cooldowns:
local: 60
global: 20
Neste exemplo, o script Example só será executado se o elite ainda estiver vivo, e só colocará um bloco de terra 3 blocos acima da localização do elite se esse bloco for um bloco de ar. Ações individuais podem ter condições individuais.
Alvo
As condições usam o sistema de Alvos para definir qual entidade ou localização está sujeita às condições. Isto significa que pode associar condições ao boss, aos jogadores ou a qualquer outra coisa que consiga visar.
Tipo de condição
| Chave | Detalhes | Valores |
|---|---|---|
conditionType | Define o tipo de condição | BLOCKING / FILTERING |
Existem dois tipos de condição: BLOCKING e FILTERING. As condições BLOCKING fazem com que scripts ou ações parem de ser executados. As condições FILTERING fazem com que as ações ignorem os alvos que não cumprem a condição. Isto significa que, se quiser visar apenas blocos que não sejam de ar, vai querer uma condição FILTERING, mas se quiser parar uma ação caso um jogador esteja morto, vai querer uma condição BLOCKING.
As condições fora das ações são sempre BLOCKING. As condições dentro das ações podem ser BLOCKING ou FILTERING.
Nota: se o alvo for SELF (o boss) e a verificação da condição for isAlive, a verificação é sempre BLOCKING! Isto pode ser colocado dentro de uma condição FILTERING e mesmo assim fará com que esta parte específica se comporte como BLOCKING.
As condições dentro das ações estão definidas como FILTERING por predefinição.
Posicionamento de blocos de condição
Pode colocar ou aninhar blocos de condição de duas formas:
-
Sob ações individuais – A condição aplica-se apenas a uma ação específica. Se a condição for cumprida, a ação é executada; caso contrário, não.
-
Sob o script inteiro – A condição aplica-se a todas as ações dentro do script. Se a condição não for cumprida, nenhuma das ações será executada.
Abaixo estão exemplos que demonstram como aninhar blocos de condição tanto para ações individuais como para o script inteiro.
Sob ações individuais:
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
Verifica se a localização 2 blocos acima de onde o boss está parado é ar e, se for, executa a ação SET_WEATHER quando o mob é atingido. Caso contrário, bloqueia a ação SET_WEATHER. Mas o boss executará sempre a ação MESSAGE quando atingido, uma vez que não lhe são aplicadas condições.
Sob o script inteiro:
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
Se o bloco localizado dois espaços acima de onde o boss está parado for ar, então permite a execução de todos os scripts quando o mob é atingido. Caso contrário, bloqueia a execução de todo o script, incluindo as ações SET_WEATHER e MESSAGE.
runIfConditionIs
| Chave | Detalhes | Valores |
|---|---|---|
runIfConditionIs | Define se a condição deve permitir que a ação seja executada quando a condição é verdadeira ou falsa. | true / false |
Pode inverter uma condição usando o prefixo runIf e o sufixo Is em torno do nome da condição.
Por exemplo, considere a condição isAlive. Normalmente, escrever:
isAlive: true
significa que a ação só será executada se o boss estiver vivo.
Mas se também escrever:
runIfAliveIs: false
na mesma condição, então a condição é invertida — a ação passará a ser executada apenas se o boss estiver morto.
Esta estrutura permite controlar se a condição deve passar ou falhar antes de executar a ação.
Exemplo:
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
runIfAliveIs: false
Target:
targetType: SELF
Este script passará agora a definir o tempo para trovoada apenas se o boss estiver morto.
Condições baseadas em localização
locationIsAir
Define a condição para verificar se a localização do alvo é ar.
| Chave | Detalhes | Valores |
|---|---|---|
locationIsAir | Define se deve verificar se a localização é um bloco de ar (ou o oposto). | Booleano |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
Verifica se a localização 2 blocos acima de onde o boss está parado é ar e, se for, não bloqueia a execução do script de tempo quando o mob é atingido. Caso contrário, bloqueia a ação.
isOnFloor
Verifica se a localização está sobre o chão. Isto significa que o bloco na localização não é sólido, mas o bloco abaixo dele é sólido.
| Chave | Detalhes | Valores |
|---|---|---|
isOnFloor | Define se deve verificar se a localização é uma localização de chão (ou o oposto). | Booleano |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isOnFloor: true
Target:
targetType: SELF
Verifica se o boss está sobre um bloco sólido; se estiver, executa o script, caso contrário bloqueia a execução do script.
isStandingOnMaterial
Verifica se a localização por baixo do alvo é de um tipo de material correspondente.
| Chave | Detalhes | Valores |
|---|---|---|
isStandingOnMaterial | Define qual o tipo de material a ser verificado. | Material |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isStandingOnMaterial: BIRCH_WOOD
Target:
targetType: SELF
Só será executado se o boss estiver em cima de um bloco BIRCH_WOOD, caso contrário a execução do script será bloqueada.
Condições baseadas em entidades
isAlive
Define a condição para verificar se a entidade alvo da condição está viva.
| Chave | Detalhes | Valores |
|---|---|---|
isAlive | Define se deve verificar se a entidade está viva (ou morta). | Booleano |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
Target:
targetType: SELF
Só será executado se o boss estiver vivo no momento, caso contrário o script será bloqueado.
hasTags
Verifica se a entidade alvo tem etiquetas específicas. Os criadores de scripts podem atribuir e remover qualquer etiqueta através de ações e usá-las como condições para comportamentos posteriores. As etiquetas são apenas strings (palavras) que pode atribuir a um boss.
| Chave | Detalhes | Valores |
|---|---|---|
hasTags | Define se deve verificar se a entidade tem uma lista de etiquetas. | Lista de Strings |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
hasTags:
- isCool
- hasANiceBeard
Target:
targetType: SELF
Só será executado se o boss tiver as etiquetas "isCool" e "hasANiceBeard", caso contrário o script será bloqueado.
doesNotHaveTags
Igual a hasTags, mas verifica se o boss não tem estes valores.
| Chave | Detalhes | Valores |
|---|---|---|
doesNotHaveTags | Define se deve verificar se a entidade não tem uma lista de etiquetas. | Lista de Strings |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
doesNotHaveTags:
- isStinky
- isSus
Target:
targetType: SELF
Só será executado se o boss não tiver as etiquetas "isStinky" e "isSus", caso contrário o script será bloqueado.
Outras condições
randomChance
Dá à condição uma probabilidade aleatória de ser válida.
| Chave | Detalhes | Valores |
|---|---|---|
randomChance | Probabilidade de a condição ser válida. | Número entre 0.0 e 1.0 |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
randomChance: 0.1
Target: # Not required
targetType: SELF # Not required
Isto dará ao script uma probabilidade de 10% de ser executado, caso contrário o script será bloqueado.
Note que esta condição é especial, pois não requer um alvo.
Filtrar NEARBY com etiquetas
Para filtrar NEARBY_MOBS ou NEARBY_PLAYERS com base em etiquetas específicas, use ACTION_TARGET como alvo da condição (se a condição for aplicada a uma ação e não ao próprio script). Isto garante que o script filtra com precisão apenas os mobs/jogadores com as etiquetas especificadas.
Exemplo
eliteScript:
Example:
Actions:
- action: SET_MOB_AI
Target:
targetType: NEARBY_MOBS
range: 40
bValue: false
Conditions:
conditionType: FILTERING
hasTags:
- TurnOff
Target:
targetType: ACTION_TARGET
Este script procurará quaisquer mobs próximos com a etiqueta TurnOff e, se a tiverem, desligará a sua IA.
targetCountLowerThan e targetCountGreaterThan
Cria uma condição que permite que a ação seja executada apenas se o número de alvos especificado for inferior ou superior ao valor definido.
| Chave | Detalhes | Valores |
|---|---|---|
targetCountLowerThan | Só executa a ação se a contagem de alvos for inferior ao número especificado. | Número entre 0 e 999 |
| Chave | Detalhes | Valores |
|---|---|---|
targetCountGreaterThan | Só executa a ação se a contagem de alvos for superior ao número especificado. | Número entre 0 e 999 |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
targetCountGreaterThan: 2
Target: #required
targetType: NEARBY_MOBS #required
range: 15
O script só será executado se houver mais de 2 mobs num raio de 15 blocos.
Note que esta condição REQUER um alvo.