Zum Hauptinhalt springen

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

FeldTypStandardHinweise
isEnabledbooltrueWird hier deaktiviert, wird auch das davon abhängige Level deaktiviert
baseMobAmountint20Standardmenge, die verwendet wird, wenn ein Eintrag kein amount= angibt
waveEntitiesstring listerforderlichGegnereinträge welle für welle
suddenDeathWaveEntitiesstring listoptionalOptionaler zyklischer Wellenpool, der nach Erschöpfung der konfigurierten Wellen läuft
prewaveMessageslist of mapsoptionalNachrichten, die vor dem Start einer bestimmten Welle angezeigt werden
waveMessageslist of mapsoptionalNachrichten, 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üsselTypHinweise
waveintErforderlich. Nummer der Welle, zu der dieser Eintrag gehört
entityTypeenumErforderlich. Bukkit-EntityType-Enum-Wert
healthMultiplierdoubleOptional. Multipliziert die maximale Lebensenergie der Entität
amountintOptional. Überschreibt baseMobAmount für diesen Eintrag
namestringOptional. Benutzerdefinierter Namens-String
resistflagMarkiert die Entität als immun gegen Verlangsamung
fastflagErhöht die Bewegungsgeschwindigkeit
treasureflagVerdoppelt das Gold-Kopfgeld bei der Tötung
bossflagSpawnt als einzelner Boss mit skalierter Lebensenergie und einer Boss-Leiste
hordeflagVerdoppelt amount und halbiert die Lebensenergie
airflagDie Entität spawnt 4 Blöcke über dem Pfad und ignoriert Bodenmauern

Interne Mengenberechnung

  • amount wird vor dem Spawnen um wave / 10 erhöht.
  • boss-Einträge überschreiben amount auf max(1, floor(wave / 10)).
  • horde-Einträge verdoppeln den finalen amount.
  • 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 zu waveNumber - 1 Mal. 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 start zum 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 * 10 Gold.
  • 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:

KombinationResultierende Fusion
Feuer + ErdeMagma
Feuer + LuftDruckwelle
Wasser + LuftSturm
Wasser + ErdeSchlamm

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.5 multipliziert.
  • 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 / 80 gesetzt.
  • Das Kopfgeld beträgt ceil(health × 1) und wird bei treasure-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 Splitterlinge SILVERFISH. Andernfalls sind es CAVE_SPIDER.
  • Splitterlinge spawnen mit wave / 2 der 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.