EternalTD-Wellen & Gegner
Eine Wellen-Datei unter plugins/EternalTD/waves/ definiert das gesamte Gegneraufgebot für ein Level, einschließlich normaler Wellen, Sudden-Death-Wellen und optionaler Vorwellen- oder Wellennachrichten. Jede Level-Konfiguration verweist über wavesConfigFile: auf eine Wellen-Datei.
Felder auf oberster Ebene
| Feld | Typ | Standard | Hinweise |
|---|---|---|---|
isEnabled | bool | true | Wird hier deaktiviert, wird auch das davon abhängige Level deaktiviert |
baseMobAmount | int | 20 | Standardmenge, die verwendet wird, wenn ein Eintrag kein amount= angibt |
waveEntities | string list | erforderlich | Gegnereinträge welle für welle |
suddenDeathWaveEntities | string list | optional | Optionaler zyklischer Wellenpool, der nach Erschöpfung der konfigurierten Wellen läuft |
prewaveMessages | list of maps | optional | Nachrichten, die vor dem Start einer bestimmten Welle angezeigt werden |
waveMessages | list of maps | optional | Nachrichten, die zu Beginn einer Welle angezeigt werden |
Wenn die Wellen-Datei keine Sudden-Death-Einträge definiert, endet das Level, sobald die konfigurierten Wellen erschöpft sind.
Wellen-Entitätseintragsformat
Jede Zeile in waveEntities (oder suddenDeathWaveEntities) ist ein durch Doppelpunkte getrennter Eintrag:
- 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
| Schlüssel | Typ | Hinweise |
|---|---|---|
wave | int | Erforderlich. Nummer der Welle, zu der dieser Eintrag gehört |
entityType | enum | Erforderlich. Bukkit-EntityType-Enum-Wert |
healthMultiplier | double | Optional. Multipliziert die maximale Lebensenergie der Entität |
amount | int | Optional. Überschreibt baseMobAmount für diesen Eintrag |
name | string | Optional. Benutzerdefinierter Namens-String |
resist | flag | Markiert die Entität als immun gegen Verlangsamung |
fast | flag | Erhöht die Bewegungsgeschwindigkeit |
treasure | flag | Verdoppelt das Gold-Kopfgeld bei der Tötung |
boss | flag | Spawnt als einzelner Boss mit skalierter Lebensenergie und einer Boss-Leiste |
horde | flag | Verdoppelt amount und halbiert die Lebensenergie |
air | flag | Die Entität spawnt 4 Blöcke über dem Pfad und ignoriert Bodenmauern |
Interne Mengenberechnung
amountwird vor dem Spawnen umwave / 10erhöht.boss-Einträge überschreibenamountaufmax(1, floor(wave / 10)).horde-Einträge verdoppeln den finalenamount.- Zusätzlich zur Menge pro Eintrag klont die Wellen-Laufzeit auch zusätzliche Kopien der ersten, dritten, fünften usw. Einträge der Welle (jeder gerade Index
0, 2, 4, ...) bis zuwaveNumber - 1Mal. Boss-Einträge werden auf diese Weise nie geklont. Höhere Wellen häufen daher mehr Duplikate der niedrigerindizierten Einträge an.
Nachrichtenblockformat
Sowohl prewaveMessages als auch waveMessages akzeptieren eine Liste von Maps:
prewaveMessages:
- wave: 1
message:
- "&aWillkommen! Baue ein paar Basistürme entlang des Pfades."
- wave: 5
message:
- "&6Achtung: In der nächsten Welle kommt ein Boss."
prewaveMessages wird zu Beginn der Konstruktionsphase dieser Welle ausgeführt. waveMessages wird in dem Moment ausgeführt, in dem die Verteidigungsphase beginnt.
Lebenszyklus einer Welle
Eine Sitzung durchläuft folgende Zustände:
STARTING— bevor der Spieler/etd startzum ersten Mal ausführt.CONSTRUCTION_PHASE— 10-sekündiges Baufenster zwischen Verteidigungsphasen.DEFENSIVE_PHASE— Gegner spawnen und laufen den Pfad entlang.ENDING— der Spieler hat aufgegeben, verloren oder das Level ist ohne Wellen.
Die Konstruktionsphase dauert immer 10 Sekunden, es sei denn, das Tutorial hält sie an (siehe Sonderfall Tutorial-Level).
Verhalten am Wellenende:
- Das Abschließen einer Welle gewährt
waveNumber * 10Gold. - Wenn du während der Welle keinen Schaden erlitten hast, erhältst du eine zweite Kopie dieses Bonus als "Perfekt"-Bonus.
- Die Modifikatorliste der nächsten Welle wird nach jedem Wellenende angekündigt.
Sudden Death
Wenn suddenDeathWaveEntities definiert ist, läuft das Level über die konfigurierte Wellenliste hinaus weiter. Der Sudden-Death-Zähler erhöht sich pro Welle und springt zurück auf Welle 1 des Sudden-Death-Pools, wenn er die Poolgröße überschreitet.
Elementare Ausrichtung bei Welleneinheiten
Jede Welle hat ihre eigene elementare Ausrichtung, die pro Welle rotiert:
- Welle 1 → Feuer
- Welle 2 → Luft
- Welle 3 → Wasser
- Welle 4 → Erde
- (dann wiederholt sich das)
Wenn eine Welleneinheit spawnt, besteht eine Chance von waveNumber / 100, dass die Entität die elementare Ausrichtung der Welle erbt, angezeigt als farbiges Tag, das über dem Mob schwebt.
Die Regeln für elementaren Schaden werden von der DamageTower-Klasse des Turms verwaltet:
- Gleiche Ausrichtung Angreifer gegen gleiche Ausrichtung Ziel — 0,5× Schaden (Resistenz).
- Entgegengesetzte einzelne Elemente (Feuer gegen Wasser, Luft gegen Erde) — 2× Schaden (Krit).
- Fusionsausrichtungen (Magma, Druckwelle, Sturm, Schlamm) folgen paarweisen Wechselwirkungen; die vollständige Matrix findest du im Quellcode.
- Ein Turm ohne Ausrichtung verursacht 1× Schaden gegen alle.
Fusionsausrichtungen entstehen, wenn ein Basisturm von Unterstützungstürmen mit kombinierbaren elementaren Ausrichtungen berührt wird:
| Kombination | Resultierende Fusion |
|---|---|
| Feuer + Erde | Magma |
| Feuer + Luft | Druckwelle |
| Wasser + Luft | Sturm |
| Wasser + Erde | Schlamm |
Widersprüchliche Paare (Feuer + Wasser, Erde + Luft) und jede Mischung aus 3 oder mehr Elementen setzen den Turm zurück auf "Ohne Ausrichtung".
Skalierung von Lebensenergie, Rüstung und Kopfgeld
WaveEntity wendet diese Formeln beim Spawnen an:
health = (currentHealth + ((wave - 1)^1.2) / 2) × healthMultiplier- Boss-Entitäten haben ihre Lebensenergie zusätzlich mit
baseMobAmount × 0.5multipliziert. - Horde-Entitäten haben ihre Lebensenergie halbiert.
- Luft-Entitäten haben ihre Lebensenergie nochmals halbiert.
- Rüstung erscheint erst ab Welle 10 und ist auf
maxHealth / 80gesetzt. - Das Kopfgeld beträgt
ceil(health × 1)und wird beitreasure-Einträgen verdoppelt. Goldminen-Unterstützungstürme erhöhen das Kopfgeld beim Tod.
Splitterlinge
Ab Welle 20 spawnen Nicht-Luft-Gegner beim Tod zusätzliche kleine Mobs ("Splitterlinge").
- Anzahl:
floor(wave / 20)pro Tötung. - War das Elternteil ein
CAVE_SPIDER, sind die SplitterlingeSILVERFISH. Andernfalls sind esCAVE_SPIDER. - Splitterlinge spawnen mit
wave / 2der Welle des Elternteils, sodass ein tiefer Lauf einen Splitterling immer noch in weitere Splitterlinge bei seinem eigenen Tod verketten kann. - Splitterlinge geben beim Tod 0 Gold, und Luft-Gegner spawnen niemals Splitterlinge.
Sonderfall Tutorial-Level
Die mitgelieferte Tutorial-Karte läuft über ein fest codiertes Tutorial-Wellenskript:
- Die Konstruktionsphase endet nicht automatisch, bis du die genau erforderlichen Türme auf den hervorgehobenen Feldern platziert hast.
- Fest codierte Türme werden durch farbige Betonflicken unter dem anvisierten Rasterfeld angezeigt und, falls FMM installiert ist, durch einen nach unten zeigenden roten Pfeil-Modell, das darüber schwebt.
- Das Tutorial schummelt etwas zusätzliches Gold in den Pool des Spielers in frühen Wellen, sodass das geskriptete Turm-Aufgebot immer erschwinglich ist.
Spielerleben und Gold
- Startleben: 20.
- Startgold: 150.
- Boss-Mobs kosten 5 Leben, wenn sie das Ende erreichen. Alle anderen Mobs kosten 1 Leben.
- Cheaten (
/etd cheat) setzt Leben und Gold auf effektiv unbegrenzte Werte und markiert die Sitzung für Highscore-Zwecke als gecheatet.
Highscore-Tracking
Jede Level-Konfiguration speichert highscoreWave und highscorePlayerName. Am Ende einer Nicht-Cheat-Sitzung speichert das Plugin die neue Wellennummer in der Level-Datei und sendet eine serverweite Nachricht, wenn der bisherige Punktestand übertroffen wurde.