Oleadas y enemigos de EternalTD
Un archivo de oleadas bajo plugins/EternalTD/waves/ define toda la alineación de enemigos de un nivel, incluyendo oleadas normales, oleadas de muerte súbita y mensajes opcionales de pre-oleada o de oleada. Cada configuración de nivel hace referencia a un archivo de oleadas mediante wavesConfigFile:.
Campos de nivel superior
| Campo | Tipo | Por defecto | Notas |
|---|---|---|---|
isEnabled | bool | true | Deshabilitar aquí también deshabilita el nivel que depende de este archivo |
baseMobAmount | int | 20 | Cantidad por defecto usada cuando una entrada no especifica amount= |
waveEntities | lista de strings | requerido | Entradas de enemigos oleada por oleada |
suddenDeathWaveEntities | lista de strings | opcional | Conjunto cíclico opcional de oleadas que se ejecuta cuando se agotan las oleadas configuradas |
prewaveMessages | lista de mapas | opcional | Mensajes mostrados antes de que comience una oleada específica |
waveMessages | lista de mapas | opcional | Mensajes mostrados cuando comienza una oleada |
Si el archivo de oleadas no define ninguna entrada de muerte súbita, el nivel termina en cuanto se agotan las oleadas configuradas.
Formato de entrada de entidad de oleada
Cada línea en waveEntities (o suddenDeathWaveEntities) es una entrada separada por dos puntos:
- 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
| Clave | Tipo | Notas |
|---|---|---|
wave | int | Requerido. Número de oleada al que pertenece esta entrada |
entityType | enum | Requerido. Valor del enum EntityType de Bukkit |
healthMultiplier | double | Opcional. Multiplica la salud máxima de la entidad |
amount | int | Opcional. Sobrescribe baseMobAmount para esta entrada |
name | string | Opcional. Cadena de nombre personalizado |
resist | flag | Marca la entidad como inmune a ralentización |
fast | flag | Aumenta la velocidad de movimiento |
treasure | flag | Duplica la recompensa de oro al matarla |
boss | flag | Aparece como un único jefe con salud escalada y una barra de jefe |
horde | flag | Duplica amount y reduce la salud a la mitad |
air | flag | La entidad aparece 4 bloques por encima del camino e ignora los muros del suelo |
Cálculo interno de cantidades
amountse incrementa enwave / 10antes del spawn.- Las entradas
bosssobrescribenamountamax(1, floor(wave / 10)). - Las entradas
hordeduplican la cantidadamountfinal. - Además de la cantidad por entrada, el runtime de oleada también clona copias extra de la primera, tercera, quinta, ... entradas de la oleada (cada índice par
0, 2, 4, ...) hastawaveNumber - 1veces. Las entradasbossnunca se clonan de esta forma. Por tanto, las oleadas más altas acumulan más duplicados de las entradas de índice inferior.
Formato del bloque de mensajes
Tanto prewaveMessages como waveMessages aceptan una 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 se ejecuta al comienzo de la fase de construcción para esa oleada. waveMessages se ejecuta en el momento en que comienza la fase defensiva.
Ciclo de vida de la oleada
Una sesión atraviesa estos estados:
STARTING— antes de que el jugador ejecute/etd startpor primera vez.CONSTRUCTION_PHASE— ventana de construcción de 10 segundos entre fases defensivas.DEFENSIVE_PHASE— los enemigos están apareciendo y recorriendo el camino.ENDING— el jugador salió, perdió o el nivel se quedó sin oleadas.
La fase de construcción siempre dura 10 segundos a menos que el tutorial la retenga (ver Caso especial del nivel tutorial).
Comportamiento al final de la oleada:
- Completar una oleada otorga
waveNumber * 10de oro. - Si no recibiste daño durante la oleada, recibes una segunda copia de esa bonificación como bonificación "Perfect".
- La lista de modificadores de la siguiente oleada se anuncia tras el final de cada oleada.
Muerte súbita
Si suddenDeathWaveEntities está definido, el nivel sigue ejecutándose más allá de la lista de oleadas configuradas. El contador de muerte súbita se incrementa por oleada y vuelve a la oleada 1 del grupo de muerte súbita siempre que excede el tamaño del grupo.
Sintonía elemental en las entidades de oleada
Cada oleada tiene su propia sintonía elemental que rota por oleada:
- Oleada 1 → Fuego
- Oleada 2 → Aire
- Oleada 3 → Agua
- Oleada 4 → Tierra
- (luego se repite)
Cuando una entidad de oleada aparece, hay una probabilidad de waveNumber / 100 de que la entidad herede la sintonía elemental de la oleada, mostrada como una etiqueta de color flotando sobre el mob.
Las reglas de daño elemental son manejadas por la clase DamageTower de la torre:
- Atacante con la misma sintonía vs objetivo con la misma sintonía — 0.5× de daño (resist).
- Elementos individuales opuestos (Fuego vs Agua, Aire vs Tierra) — 2× de daño (crit).
- Las sintonías de fusión (Magma, Blast, Storm, Sludge) siguen interacciones por pares; ver el código fuente para la matriz completa.
- Una torre sin sintonía inflige 1× de daño a todos.
Las sintonías de fusión se forman cuando una Torre Básica es tocada por torres de apoyo con sintonías elementales combinables:
| Combinación | Fusión resultante |
|---|---|
| Fuego + Tierra | Magma |
| Fuego + Aire | Blast |
| Agua + Aire | Storm |
| Agua + Tierra | Sludge |
Los pares conflictivos (Fuego + Agua, Tierra + Aire) y cualquier mezcla de 3+ elementos revierten la torre a Sin sintonía.
Escalado de salud, armadura y recompensa
WaveEntity aplica estas fórmulas en el spawn:
health = (currentHealth + ((wave - 1)^1.2) / 2) × healthMultiplier- Las entidades de tipo boss tienen su salud multiplicada adicionalmente por
baseMobAmount × 0.5. - Las entidades de tipo horde tienen su salud reducida a la mitad.
- Las entidades de tipo air tienen su salud reducida a la mitad nuevamente.
- La armadura solo aparece a partir de la oleada 10, establecida en
maxHealth / 80. - La recompensa es
ceil(health × 1)y se duplica para las entradastreasure. Las torres de apoyo Gold Mine añaden a la recompensa al morir.
Splitterlings
A partir de la oleada 20, los enemigos no aéreos generan mobs pequeños adicionales ("splitterlings") al morir.
- Cantidad:
floor(wave / 20)por muerte. - Si el progenitor era un
CAVE_SPIDER, los splitterlings sonSILVERFISH. De lo contrario sonCAVE_SPIDER. - Los splitterlings aparecen en
wave / 2de la oleada del progenitor, por lo que una partida lo suficientemente profunda aún puede encadenar un splitterling en más splitterlings al morir. - Los splitterlings dan 0 de oro al morir y los enemigos aéreos nunca generan splitterlings.
Caso especial del nivel tutorial
El mapa tutorial incluido se ejecuta a través de un script de oleadas tutorial codificado:
- La fase de construcción no termina automáticamente hasta que hayas colocado las torres requeridas exactas en las casillas resaltadas.
- Las torres codificadas se indican mediante parches de concreto coloreados bajo la casilla de la cuadrícula objetivo y, si FMM está instalado, un modelo de flecha roja apuntando hacia abajo flotando sobre ella.
- El tutorial añade algo de oro extra al fondo del jugador en las primeras oleadas para que la alineación de torres con script siempre sea asequible.
Vidas y oro del jugador
- Vidas iniciales: 20.
- Oro inicial: 150.
- Los mobs jefe cuestan 5 vidas si llegan al final. Todos los demás mobs cuestan 1 vida.
- Hacer trampa (
/etd cheat) establece vidas y oro a valores efectivamente ilimitados y marca la sesión como tramposa a efectos de puntuación máxima.
Seguimiento de puntuaciones máximas
Cada configuración de nivel persiste highscoreWave y highscorePlayerName. Al final de una sesión sin trampas, el plugin guarda el nuevo número de oleada en el archivo del nivel y emite un mensaje a todo el servidor si superó la puntuación anterior.