Pular para o conteúdo principal

Ondas e Inimigos do EternalTD

Um arquivo de onda em plugins/EternalTD/waves/ define toda a lineup de inimigos para um nível, incluindo ondas normais, ondas de morte súbita e mensagens opcionais antes ou durante a onda. Cada config de nível referencia um arquivo de onda através de wavesConfigFile:.

Campos de Nível Superior

CampoTipoPadrãoNotas
isEnabledbooltrueDesabilitar aqui também desabilita o nível que depende deste arquivo
baseMobAmountint20Quantidade padrão usada quando uma entrada não especifica amount=
waveEntitieslista de stringsobrigatórioEntradas de inimigos onda a onda
suddenDeathWaveEntitieslista de stringsopcionalPool cíclico opcional de ondas que roda depois que as ondas configuradas se esgotam
prewaveMessageslista de mapasopcionalMensagens exibidas antes de uma onda específica começar
waveMessageslista de mapasopcionalMensagens exibidas quando uma onda começa

Se o arquivo de onda não definir nenhuma entrada de morte súbita, o nível termina assim que as ondas configuradas se esgotam.

Formato de Entrada de Entidade de Onda

Cada linha em waveEntities (ou suddenDeathWaveEntities) é uma entrada separada por dois-pontos:

- wave=1:entityType=ZOMBIE:healthMultiplier=1.0:amount=10
- wave=2:entityType=SKELETON:fast:treasure
- wave=5:entityType=WITHER_SKELETON:boss
- wave=8:entityType=PHANTOM:air:horde
ChaveTipoNotas
waveintObrigatório. Número da onda à qual esta entrada pertence
entityTypeenumObrigatório. Valor do enum EntityType do Bukkit
healthMultiplierdoubleOpcional. Multiplica a vida máxima da entidade
amountintOpcional. Substitui baseMobAmount para esta entrada
namestringOpcional. Nome personalizado
resistflagMarca a entidade como imune a lentidão
fastflagAumenta a velocidade de movimento
treasureflagDobra a recompensa em ouro ao matar
bossflagSpawna como um único chefe com vida escalada e uma barra de chefe
hordeflagDobra o amount e divide a vida pela metade
airflagA entidade spawna 4 blocos acima do caminho e ignora muralhas terrestres

Matemática Interna de Quantidade

  • amount é incrementado por wave / 10 antes do spawn.
  • Entradas com boss sobrescrevem amount para max(1, floor(wave / 10)).
  • Entradas com horde dobram o amount final.
  • Além da quantidade por entrada, o runtime da onda também clona cópias extras das entradas primeira, terceira, quinta... da onda (todos os índices pares 0, 2, 4, ...) até waveNumber - 1 vezes. Entradas boss nunca são clonadas dessa forma. Ondas mais altas, portanto, acumulam mais duplicatas das entradas de índice mais baixo.

Formato de Bloco de Mensagem

Tanto prewaveMessages quanto waveMessages aceitam uma lista de mapas:

prewaveMessages:
- wave: 1
message:
- "&aWelcome! Build a couple of basic towers along the path."
- wave: 5
message:
- "&6Heads up: a boss is coming next wave."

prewaveMessages roda no início da fase de construção daquela onda. waveMessages roda no momento em que a fase defensiva começa.

Ciclo de Vida da Onda

Uma sessão passa por estes estados:

  • STARTING — antes do jogador executar /etd start pela primeira vez.
  • CONSTRUCTION_PHASE — janela de construção de 10 segundos entre fases defensivas.
  • DEFENSIVE_PHASE — inimigos estão spawnando e caminhando pelo caminho.
  • ENDING — o jogador saiu, perdeu, ou o nível ficou sem ondas.

A fase de construção sempre dura 10 segundos, a menos que o tutorial a segure (veja Caso Especial do Nível Tutorial).

Comportamento de fim de onda:

  • Completar uma onda concede waveNumber * 10 de ouro.
  • Se você não recebeu dano durante a onda, recebe uma segunda cópia desse bônus como bônus "Perfect".
  • A lista de modificadores da próxima onda é anunciada depois do fim de cada onda.

Morte Súbita

Se suddenDeathWaveEntities estiver definido, o nível continua a rodar após a lista de ondas configurada. O contador de morte súbita incrementa por onda e volta para a onda 1 do pool de morte súbita sempre que excede o tamanho do pool.

Sintonia Elemental em Entidades de Onda

Cada onda tem sua própria sintonia elemental que rotaciona por onda:

  • Onda 1 → Fogo
  • Onda 2 → Ar
  • Onda 3 → Água
  • Onda 4 → Terra
  • (e então repete)

Quando uma entidade de onda spawna, há uma chance de waveNumber / 100 de a entidade herdar a sintonia elemental da onda, exibida como uma tag colorida flutuando acima do mob.

As regras de dano elemental são tratadas pela classe DamageTower da torre:

  • Atacante de mesma sintonia vs alvo de mesma sintonia — 0,5× dano (resist).
  • Elementos únicos opostos (Fogo vs Água, Ar vs Terra) — 2× dano (crit).
  • Sintonias de fusão (Magma, Blast, Storm, Sludge) seguem interações em pares; veja o código-fonte para a matriz completa.
  • Uma torre sem sintonia causa 1× dano a todos.

Sintonias de fusão formam-se quando uma Basic Tower é tocada por torres de suporte com sintonias elementais que se combinam:

CombinaçãoFusão resultante
Fogo + TerraMagma
Fogo + ArBlast
Água + ArStorm
Água + TerraSludge

Pares conflitantes (Fogo + Água, Terra + Ar) e qualquer mistura com 3+ elementos revertem a torre para Sem Sintonia.

Escalonamento de Vida, Armadura e Recompensa

WaveEntity aplica estas fórmulas no spawn:

  • health = (currentHealth + ((wave - 1)^1.2) / 2) × healthMultiplier
  • Entidades chefe têm sua vida multiplicada por baseMobAmount × 0.5 além disso.
  • Entidades de horda têm sua vida dividida pela metade.
  • Entidades aéreas têm sua vida dividida pela metade novamente.
  • A armadura só aparece a partir da onda 10, ajustada para maxHealth / 80.
  • A recompensa é ceil(health × 1) e dobrada para entradas treasure. Torres de suporte Gold Mine adicionam à recompensa na morte.

Splitterlings

A partir da onda 20, inimigos não aéreos spawnam pequenos mobs adicionais ("splitterlings") ao morrer.

  • Quantidade: floor(wave / 20) por morte.
  • Se o pai era um CAVE_SPIDER, os splitterlings são SILVERFISH. Caso contrário, são CAVE_SPIDER.
  • Splitterlings spawnam em wave / 2 da onda do pai, então uma run profunda o suficiente ainda pode encadear um splitterling em mais splitterlings em sua própria morte.
  • Splitterlings dão 0 ouro na morte e inimigos aéreos nunca spawnam splitterlings.

Caso Especial do Nível Tutorial

O mapa tutorial incluído executa um script de onda tutorial codificado:

  • A fase de construção não termina automaticamente até que você tenha colocado as torres exatas necessárias nas casas destacadas.
  • As torres codificadas são indicadas por manchas coloridas de concreto sob a casa de grade alvo e, se o FMM estiver instalado, um modelo de seta vermelha apontando para baixo flutuando acima.
  • O tutorial concede algum ouro extra ao pool do jogador nas ondas iniciais para que a lineup de torres do script seja sempre acessível.

Vidas e Ouro do Jogador

  • Vidas iniciais: 20.
  • Ouro inicial: 150.
  • Mobs chefe custam 5 vidas se chegarem ao fim. Todos os outros mobs custam 1 vida.
  • Trapacear (/etd cheat) define vidas e ouro como valores efetivamente ilimitados e marca a sessão como trapaceada para fins de highscore.

Rastreamento de Highscore

Cada config de nível persiste highscoreWave e highscorePlayerName. No final de uma sessão sem trapaça, o plugin salva o novo número de onda no arquivo do nível e transmite uma mensagem em todo o servidor se ela bater a pontuação anterior.