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
| Campo | Tipo | Padrão | Notas |
|---|---|---|---|
isEnabled | bool | true | Desabilitar aqui também desabilita o nível que depende deste arquivo |
baseMobAmount | int | 20 | Quantidade padrão usada quando uma entrada não especifica amount= |
waveEntities | lista de strings | obrigatório | Entradas de inimigos onda a onda |
suddenDeathWaveEntities | lista de strings | opcional | Pool cíclico opcional de ondas que roda depois que as ondas configuradas se esgotam |
prewaveMessages | lista de mapas | opcional | Mensagens exibidas antes de uma onda específica começar |
waveMessages | lista de mapas | opcional | Mensagens 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
| Chave | Tipo | Notas |
|---|---|---|
wave | int | Obrigatório. Número da onda à qual esta entrada pertence |
entityType | enum | Obrigatório. Valor do enum EntityType do Bukkit |
healthMultiplier | double | Opcional. Multiplica a vida máxima da entidade |
amount | int | Opcional. Substitui baseMobAmount para esta entrada |
name | string | Opcional. Nome personalizado |
resist | flag | Marca a entidade como imune a lentidão |
fast | flag | Aumenta a velocidade de movimento |
treasure | flag | Dobra a recompensa em ouro ao matar |
boss | flag | Spawna como um único chefe com vida escalada e uma barra de chefe |
horde | flag | Dobra o amount e divide a vida pela metade |
air | flag | A entidade spawna 4 blocos acima do caminho e ignora muralhas terrestres |
Matemática Interna de Quantidade
amounté incrementado porwave / 10antes do spawn.- Entradas com
bosssobrescrevemamountparamax(1, floor(wave / 10)). - Entradas com
hordedobram oamountfinal. - 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 - 1vezes. Entradasbossnunca 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 startpela 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 * 10de 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ção | Fusão resultante |
|---|---|
| Fogo + Terra | Magma |
| Fogo + Ar | Blast |
| Água + Ar | Storm |
| Água + Terra | Sludge |
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.5alé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 entradastreasure. 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ãoSILVERFISH. Caso contrário, sãoCAVE_SPIDER. - Splitterlings spawnam em
wave / 2da 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.