Saltar para o conteúdo principal

Criar Eventos

webapp_banner.jpg

Este guia é para o EliteMobs 10 e versões posteriores

O que são Eventos Personalizados?​

Os Eventos Personalizados referem-se aqui a eventos que ocorrem aleatoriamente dentro do jogo, quer com base em ações dos jogadores quer com um gatilho temporizado. O plugin já vem pré-carregado com vários Eventos Personalizados, como o evento Balrog, o evento Kraken e os eventos Treasure Goblin, para citar apenas alguns.

Este sistema chama-se Eventos Personalizados porque os eventos não só podem ser personalizados como também criados de raiz. O que se segue é um guia sobre como criar e personalizar os seus próprios eventos.

Criar os Seus Eventos Personalizados​

Os ficheiros de configuração de eventos personalizados devem ser criados em: plugins/EliteMobs/customevents/

Os ficheiros devem usar o formato .yml. Use o nome completo, incluindo a extensão .yml, ao referenciar o evento.

Exemplo: my_cool_event.yml é referenciado como my_cool_event.yml

Guarde os ficheiros e execute /em reload para carregar as alterações. A opção correspondente de eventos de ação ou temporizados também deve estar ativada em events.yml.

Definições comuns

As definições a seguir podem/devem ser usadas tanto para eventos de ação como para eventos temporizados.


isEnabled​

Define se o evento está ativado.

ChaveValoresPredefinição
isEnabledBooleantrue
Exemplo
isEnabled: true

eventType​

Define o tipo do evento.

ChaveValoresPredefinição
eventTypeBREAK_BLOCK / FISH / TILL_SOIL / TIMEDDEFAULT

BREAK_BLOCK, FISH e TILL_SOIL são Eventos de Ação; TIMED corresponde aos Eventos Temporizados.

eventType é obrigatório. DEFAULT é o valor usado quando a opção está em falta ou não corresponde a um tipo válido. Nesse caso, o plugin regista um aviso e não regista o evento nem lê as definições seguintes.

Exemplo
eventType: BREAK_BLOCK

bossFilenames​

Lista os ficheiros dos bosses personalizados que devem aparecer juntos, incluindo .yml. Obrigatório! Não é uma escolha aleatória da lista. Verifique todas as referências antes de usar o evento. Os eventos temporizados ignoram ficheiros inválidos e não entram na fila sem bosses válidos. Um evento de ação com qualquer ficheiro inválido é cancelado antes de qualquer spawn e, se o spawn de um boss for recusado, os bosses que já gerou são removidos.

ChaveValoresPredefinição
bossFilenamesString Listnenhum
Exemplo
bossFilenames:
- balrog.yml
- my_event_boss.yml

announcementPriority​

Define quem recebe as mensagens de início e fim. As prioridades de eventos funcionam de forma diferente das prioridades de anúncio de bosses:

PrioridadeDestinatários
0Jogadores no mundo do evento; não silencia mensagens
1Todos os jogadores online, ou apenas os do mundo do evento com announcementBroadcastWorldOnly: true
2Jogadores no mundo do evento
3 ou superiorJogadores no mundo do evento e DiscordSRV, quando configurado

Omita startMessage ou endMessage para suprimir a mensagem correspondente. O anúncio de spawn do próprio boss é separado.

ChaveValoresPredefinição
announcementPriorityInteger0
Exemplo
announcementPriority: 1

startMessage​

Define a mensagem enviada no início real do evento, e não quando um evento temporizado entra na fila. As mensagens de início e fim aceitam cores, mas o sistema não substitui marcadores de boss ou de jogador como $boss e $player.

ChaveValoresPredefinição
startMessageStringnenhum
Exemplo
startMessage: An event has started!

create_events_start_message.jpg


endMessage​

Define a mensagem enviada no final do evento.

ChaveValoresPredefinição
endMessageStringnenhum
Exemplo
endMessage: An event has ended!

create_events_end_message.jpg


eventStartCommands​

Define comandos de consola executados no início do evento, sem / inicial nem marcadores de jogador ou de boss. Cada comando é independente; $chance=0.5$ dá-lhe 50% de probabilidade de execução. Use probabilidades entre 0 e 1; sem esse marcador, o comando é sempre executado.

ChaveValoresPredefinição
eventStartCommandsString Listnenhum
Exemplo
eventStartCommands:
- say The event now starts!!
- "$chance=0.5$ say What a spawn!"

create_events_start_commands.jpg


eventEndCommands​

Define comandos de consola agendados para a próxima tarefa do servidor ao terminar o evento. Usam a mesma sintaxe e a mesma probabilidade por comando que eventStartCommands, sem marcadores de jogador ou de boss.

ChaveValoresPredefinição
eventEndCommandsString Listnenhum
Exemplo
eventEndCommands:
- say The event ends, so sad.
- "$chance=0.5$ say Too slow bud!"

create_events_end_commands.jpg


minimumPlayerCount​

Define o mínimo de jogadores online, contando todos os mundos e modos de jogo. Não conta apenas participantes aptos perto do evento.

Os Eventos de Ação verificam este valor quando a ação os dispara. Os Eventos Temporizados verificam-no quando o seletor automático escolhe eventos, antes de um evento na fila procurar um local, e de novo logo antes de os seus bosses fazerem spawn. Um evento temporizado na fila espera até haver jogadores suficientes online; o spawn personalizado ainda tem de encontrar uma posição adequada usando as suas próprias verificações de jogadores e locais.

ChaveValoresPredefinição
minimumPlayerCountInteger1
Exemplo
minimumPlayerCount: 5

Exemplo de Configuração de Evento

Apenas opções comuns; um evento temporizado completo também precisa de spawnType e de um peso de seleção positivo.

isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!

Exemplo Completo de Evento Temporizado
isEnabled: true
eventType: TIMED
bossFilenames:
- "my_timed_boss.yml"
announcementPriority: 3
startMessage: "A timed event has started!"
endMessage: "The timed event has ended!"
eventStartCommands:
- say The timed event began!
eventEndCommands:
- say The timed event concluded!
spawnType: "my_spawn_location.yml"
localCooldown: 120
globalCooldown: 30
weight: 100
eventDuration: 15
endEventWithBossDeath: true

Eventos de Ação​

Eventos que têm uma probabilidade de serem executados quando uma ação específica, como partir um bloco ou pescar, acontece.

Ao começar, um evento de ação aplica um cooldown por jogador, de 4 minutos por predefinição, configurável em actionEventMinimumCooldownMinutes no events.yml. Apenas um evento de ação começa por ação: assim que um ficheiro correspondente começa, o jogador entra em cooldown e os ficheiros restantes são ignorados. Um evento que não consegue começar não consome o cooldown. Use actionEventsEnabled: false para desativá-los no servidor.

Os três tipos de ação funcionam assim:

eventTypeGatilho
BREAK_BLOCKUm jogador parte um bloco. Primeiro é sorteada chance, depois o bloco é comparado com breakableMaterials.
FISHUm evento de pesca tem uma entidade capturada, inclusive um mob fisgado. Sem entidade capturada, não dispara. O spawn ocorre na posição dessa entidade.
TILL_SOILUm jogador clica com o botão direito em DIRT ou GRASS_BLOCK com uma enxada de madeira, pedra, ferro, ouro, diamante ou netherita na mão principal. Não é exigido que o bloco se transforme realmente em terra arada.

Os eventos Bukkit cancelados são ignorados. O local tem de estar num mundo ativado para o EliteMobs, fora de mundos de masmorra do EliteMobs e de regiões de instância de masmorras, arenas ou provas de classe, e permitido pela flag elitemobs-events do WorldGuard. Estes listeners não restringem separadamente o modo de jogo.

Os bosses aparecem na interação: no centro X/Z do bloco partido, na entidade capturada ou um bloco acima do solo clicado. Os eventos de ação não usam spawnType, pesos ou cooldowns de seleção temporizada.

A proteção de Peace Banner também impede o evento quando suppressEvents está ativado. As verificações de duração, horário final e remoção de bosses descritas abaixo também se aplicam a eventos de ação.

chance​

Define a probabilidade de o evento acontecer quando a ação ocorre.

ChaveValoresPredefinição
chanceValor entre 0.0 e 1.00
Exemplo
chance: 0.001

breakableMaterials​

Define a lista de materiais a verificar se a ação estiver definida como BREAK_BLOCK.

ChaveValoresPredefinição
breakableMaterialsLista de materiaisnenhum
Exemplo
breakableMaterials:
- BEEHIVE
- BIRCH_WOOD

Exemplo de Configuração
chance: 0.001
breakableMaterials:
- COAL_ORE

Define uma probabilidade de 0.1% de executar o evento quando um bloco de minério de carvão é partido, assumindo que o tipo de evento é BREAK_BLOCK.


Exemplo Completo de Evento de Ação
isEnabled: true
eventType: BREAK_BLOCK
bossFilenames:
- "mining_boss.yml"
announcementPriority: 2
startMessage: "You've awakened something..."
chance: 0.001
breakableMaterials:
- DIAMOND_ORE
- EMERALD_ORE

Eventos Temporizados​

Os eventos temporizados usam seleção automática ponderada, seguida de uma fila de spawn personalizado. A seleção não garante spawn imediato nem horário fixo. Ficheiros diferentes podem estar na fila ou ativos ao mesmo tempo.

Nada é escolhido sem jogadores online. O seletor automático exclui um ficheiro enquanto uma cópia estiver na fila ou ativa, ou enquanto houver menos jogadores online do que o seu minimumPlayerCount. Desative estes eventos no servidor com timedEventsEnabled: false em events.yml.

spawnType​

Define o Spawn Personalizado usado pelo evento, que define onde o boss pode fazer spawn.

ChaveValoresPredefinição
spawnTypeFilenamenenhum
Exemplo
spawnType: nether_spawn.yml

localCooldown​

Define a espera em minutos para uma nova seleção automática desse evento, contada desde a seleção. É consumida mesmo que a validação ou outro plugin impeça depois a entrada na fila. Uma cópia na fila ou ativa também impede nova seleção, mesmo depois de a espera terminar.

ChaveValoresPredefinição
localCooldownDouble0
Exemplo
localCooldown: 120

globalCooldown​

Define a espera global de seleção automática em minutos. É atribuída quando o evento entra na fila com sucesso e novamente quando começa, inclusive para eventos colocados manualmente na fila. Não começa ao terminar o evento. Uma nova atribuição substitui o prazo anterior.

ChaveValoresPredefinição
globalCooldownDouble0
Exemplo
globalCooldown: 60

weight​

Define o peso relativo entre eventos temporizados atualmente aptos. Use um valor finito positivo. Recomendado: 100. Peso zero não desativa um evento de forma confiável, especialmente quando todos os pesos aptos são zero; use isEnabled: false.

O sistema de peso determina a probabilidade relativa de seleção do evento. Por exemplo:

  • Evento A com peso 100 vs Evento B com peso 50 = o Evento A tem o dobro da probabilidade de ser selecionado
  • Peso maior = maior probabilidade de ser escolhido
  • O agendador verifica pela primeira vez cerca de 5 minutos após o arranque e depois uma vez por minuto. O lag no servidor pode atrasar as verificações.
ChaveValoresPredefinição
weightDouble0
Exemplo
weight: 60.5

eventDuration​

Define o limite de duração em minutos desde o início real do evento. 0 desativa o limite, assim como valores negativos. A verificação ocorre a cada 20 ticks do servidor, pelo que o evento pode terminar até um segundo depois do previsto, ou mais com lag no servidor. Também se aplica a eventos de ação.

ChaveValoresPredefinição
eventDurationDouble0
Exemplo
eventDuration: 30

endEventWithBossDeath​

Encerra o evento quando nenhum dos objetos dos bosses principais ainda existe. Com vários bossFilenames, remover ou derrotar um não basta enquanto outro continuar a existir. Os reforços não são bosses principais adicionais. A verificação é de existência, sem exigir uma morte atribuída a um jogador. O fim do evento, por qualquer motivo, remove os bosses principais restantes como bosses expirados. Também se aplica a eventos de ação.

ChaveValoresPredefinição
endEventWithBossDeathBooleantrue
Exemplo
endEventWithBossDeath: true

eventEndTime​

Define o horário dentro do jogo (em ticks) em que o evento termina. Use o sistema de tempo do Minecraft, onde 0=amanhecer, 6000=meio-dia, 12000=anoitecer, 18000=meia-noite, 23000=madrugada. Defina como -1 para desativar o término baseado no horário.

A verificação é hora do mundo > eventEndTime; não espera o dia seguinte nem uma passagem exata pelo horário. Um evento iniciado depois desse horário pode acabar na primeira verificação. Combine a janela de spawn com o horário final. A hora do mundo vai de 0 a 23999, portanto nunca ultrapassa limites de 23999 ou mais. Também se aplica a eventos de ação.

ChaveValoresPredefinição
eventEndTimeInteger (0–23998 para um limite alcançável; -1 desativa)-1
Exemplo
eventEndTime: 23000


Entrar na fila inicia a procura e as novas tentativas do spawn personalizado. Pode esperar numa posição armazenada até a hora ou a fase lunar corresponder; nem todas as verificações de local são repetidas durante essa espera. Consulte as verificações e limitações no guia de spawn acima. Apenas um evento temporizado faz spawn de cada vez, e o spawn também espera pelo minimumPlayerCount e pelo intervalo de timedEventMinimumCooldownMinutes. A mensagem e os comandos de início são executados quando o evento temporizado confirma que os seus bosses principais existem.

Exemplo de Configuração de Eventos
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
spawnType: "myCoolSpawn.yml"
localCooldown: 30
globalCooldown: 15
weight: 100
eventDuration: 20
endEventWithBossDeath: true
eventEndTime: 10000

Disparar um evento manualmente​

/em event <event filename>

Coloca na fila um evento temporizado para começar num momento e local válidos. Exige elitemobs.event.start, tem de ser executado por um jogador e só aceita modelos de eventos carregados. Estes são criados a partir de ficheiros TIMED ativados quando timedEventsEnabled está ativo.

O comando ignora a seleção ponderada, os cooldowns local/global de seleção e a verificação de uma cópia já na fila ou ativa. Repeti-lo pode colocar cópias duplicadas na fila. As condições de local e horário do spawn personalizado, o minimumPlayerCount do evento e o intervalo de timedEventMinimumCooldownMinutes continuam a aplicar-se.

Se o evento não puder entrar na fila, o motivo é indicado: spawnType em falta ou inválido, nenhum bossFilenames válido ou cancelamento por outro plugin. A mensagem de sucesso confirma a entrada na fila, não um spawn visível. Verifique os bosses reais e as novas tentativas na consola.

Definições de evento em todo o servidor​

Encontram-se em plugins/EliteMobs/events.yml. Recarregue depois de editar:

ChaveDescriçãoPredefinição
actionEventsEnabledSe eventos de ação acontecem ou nãotrue
timedEventsEnabledSe eventos temporizados acontecem ou nãotrue
actionEventMinimumCooldownMinutesCooldown por jogador, em minutos, após um evento de ação disparar4
timedEventMinimumCooldownMinutesEspera em minutos após o início de um evento temporizado antes que outro evento temporizado possa procurar um local ou fazer spawn dos seus bosses, incluindo um que já espera num local armazenado4
announcementBroadcastWorldOnlyRestringe mensagens de prioridade 1 ao mundo do evento; as outras prioridades já enviam mensagens no jogo apenas nesse mundofalse