Zum Hauptinhalt springen

Flugnetzwerke

Ein Flugnetzwerk ist eine Menge von Knoten in einer Welt, die durch beidseitige Verbindungen verknüpft sind. Knoten mit einem Namen sind Ziele. Ein Spieler wählt ein Ziel bei einem Flugmeister-NPC oder an einem Flugportal, und ein Reittier fliegt ihn entlang der kürzesten Verbindungskette dorthin. Netzwerke liegen in plugins/EliteMobs/transport_networks/ und verwenden dieselben Reittiere und Reiseregeln wie Transportrouten.

Jeder Flug wird erst erstellt, wenn der Spieler ihn anfordert. EliteMobs führt dazu eine A*-Suche über die Verbindungen aus und verwendet dabei die Luftlinie zwischen den Knoten, und das Reittier folgt einer glatten Kurve durch jeden Knoten des Ergebnisses. Du erstellst nie eine Route für jedes Zielpaar: Ein neuer Knoten oder eine neue Verbindung wird von jedem Flug genutzt, den sie verkürzt.

So fliegen Spieler​

  1. Der Spieler klickt mit der rechten Maustaste auf einen Flugmeister-NPC oder tritt in ein Flugportal.
  2. Ein Menü Flight paths listet jedes Ziel auf, das vom Knoten des NPCs oder Portals aus erreichbar ist, entlang der Verbindungen vom nächsten zum entferntesten, bis zu 54. Ziele, die der Spieler nicht freigeschaltet hat, erscheinen als grauer Farbstoff mit ihrem Sperrhinweis.
  3. Ein Klick auf ein Ziel startet einen Countdown, standardmäßig 60 Ticks (3 Sekunden), an dessen Ende das Reittier den Spieler am Abflugpunkt aufnimmt.
  4. Das Reittier fliegt den Weg ab und setzt den Spieler am Ziel ab, mit Blick in Richtung seines arrivalYaw.

Ein Flugmeister oder ein Portal kann das Menü auch überspringen und direkt zu einem Ziel fliegen. Siehe Flugmeister und Flugportale.

Beim Klick auf ein Ziel muss der Spieler höchstens 8 Blöcke vom NPC oder Portal entfernt bleiben, sonst bewirkt der Klick nichts. Bei einem NPC bricht jede Bewegung während des Countdowns den Abflug ab. Bei einem Portal bricht der Countdown nur ab, wenn der Spieler die Zone des Portals verlässt, 1.5 × sizeMultiplier + 2 Blöcke von dessen Mittelpunkt entfernt.

Schleichen setzt einen Passagier mitten im Flug nicht ab. Der Flug endet vorzeitig bei Tod, einem Teleport, einem Weltwechsel, beim Verlassen der Dungeon-Instanz oder wenn das Reittier entfernt wird. Ein Flug, der 5 Sekunden lang keine Fortschritte macht, setzt den Passagier am Ziel ab. Ein Passagier, der sich mitten im Flug außerhalb einer Dungeon-Instanz abmeldet, wird bei seinem nächsten Login am Ziel platziert, und beim Stoppen oder Neuladen des Servers werden Passagiere an Bord ebenfalls an ihrem Ziel abgesetzt.

Ein Netzwerk im Spiel erstellen​

Die Editorbefehle können nur Spieler verwenden und benötigen elitemobs.transport.admin.

  1. Stelle dich in die Welt des Netzwerks und führe /em transport network edit harbor_flights aus. Ein Netzwerk ohne Datei beginnt als leerer Entwurf.
  2. Stelle dich dorthin, wo Spieler einsteigen sollen, und führe /em transport node add harbor aus.
  3. Fliege nach oben und führe /em transport node add harbor_sky aus. Sind keine Nachbarn angegeben, verbindet sich ein neuer Knoten mit dem ausgewählten Knoten, und der neue Knoten wird zum ausgewählten, sodass eine Folge von add-Befehlen einen Pfad aufbaut.
  4. Fliege zum nächsten Ziel und füge es auf dieselbe Weise hinzu. Verbinde Abzweigungen mit /em transport node link <a> <b>.
  5. Benenne jedes Ziel mit /em transport node destination harbor &6Harbor.
  6. Stelle dich an ein Ziel, blicke in die Richtung, in der Spieler ankommen sollen, und führe /em transport node yaw harbor aus.
  7. Prüfe einen Pfad mit /em transport network preview harbor mine und fliege ihn mit /em transport network ride harbor mine ab.
  8. Führe /em transport network save aus.

Knoten- und Netzwerk-IDs bestehen aus 1–64 Kleinbuchstaben, Ziffern, Unterstrichen oder Bindestrichen. Ein Entwurf hält deine aktuelle Welt als Welt des Netzwerks fest. In einer Dungeon-Instanz hält er stattdessen die Vorlagenwelt des Dungeons fest. Ein bestehendes Netzwerk lässt sich nur aus seiner eigenen Welt bearbeiten.

Editorbefehle​

BefehlAktion
/em transport network edit <network>Einen Entwurf eines bestehenden Netzwerks öffnen oder ein neues beginnen
/em transport network listGeladene Netzwerke auflisten
/em transport network statusDie Knotenanzahl und den ausgewählten Knoten des Entwurfs anzeigen
/em transport network preview [from] [to]Den Pfad zwischen zwei Knoten anzeigen; ohne Knoten die Vorschau löschen
/em transport network ride <from> <to>Ohne Speichern zwischen zwei Entwurfsknoten fliegen
/em transport network generate <first> <second>Die Verbindung zwischen zwei Knoten durch erzeugte Knoten ersetzen, die über das Gelände hinwegführen
/em transport network undoDie letzte Knoten- oder Verbindungsänderung rückgängig machen; bis zu 32 Änderungen bleiben gespeichert
/em transport network saveDen Entwurf speichern
/em transport network cancelDen Entwurf verwerfen
/em transport node add <id> [neighbors...]Einen Knoten dort hinzufügen, wo du stehst, verbunden mit den aufgeführten Knoten oder sonst mit dem ausgewählten Knoten
/em transport node select [node]Einen Knoten auswählen; ohne Knoten den dir nächsten auswählen
/em transport node link <first> <second>Zwei Knoten in beide Richtungen verbinden
/em transport node unlink <first> <second>Die Verbindung zwischen zwei Knoten entfernen
/em transport node move <node>Einen Knoten dorthin verschieben, wo du stehst
/em transport node remove <node>Einen Knoten und seine Verbindungen entfernen
/em transport node destination <node> [name]Den Knoten mit diesem Menünamen zu einem Ziel machen; ohne Namen wieder zu einem einfachen Wegpunkt
/em transport node permission <node> <permission>Eine Berechtigung für Flüge von oder zu diesem Knoten verlangen; none löscht sie
/em transport node hint <node> [text]Die Nachricht festlegen, die angezeigt wird, solange der Knoten gesperrt ist; ohne Text oder mit none wird sie gelöscht
/em transport node yaw <node>Die Ankunftsrichtung auf die Richtung setzen, in die du blickst

Die Tab-Vervollständigung schlägt bei edit Netzwerk-IDs und bei den Knotenargumenten die Knoten-IDs des Entwurfs vor. Jeder Befehl außer edit, list, save, cancel und status setzt voraus, dass du dich in der Welt des Entwurfs befindest. Du kannst jeweils ein Netzwerk bearbeiten. Ein Entwurf bleibt im Arbeitsspeicher, bis du ihn speicherst oder verwirfst, den Server verlässt, seine Welt entladen wird oder EliteMobs neu lädt.

/em transport network ride versetzt dich zum ersten Knoten und fliegt von dort ab, auch wenn du dich woanders befindest. Es prüft keine Knotenberechtigungen, und das Ziel kann jeder Knoten sein, benannt oder nicht.

/em transport reload lädt Netzwerkdateien zusammen mit Routendateien neu. Flüge, die sich bereits in der Luft befinden, behalten ihren ursprünglichen Pfad.

Editoransicht​

Nur der bearbeitende Spieler sieht den Entwurf. Jeder Knoten innerhalb von 128 Blöcken zeigt seine ID über sich, mit dem Zielnamen in einer zweiten Zeile. Die Beschriftung des ausgewählten Knotens ist gelb. Verbindungen werden als hellblaue Linien gezeichnet. Nach preview wird der Pfad grün gezeichnet. Andernfalls verläuft eine gelbe Kurve durch den ausgewählten Knoten zu deiner Position und zeigt, wie sich ein Flug biegen würde, wenn du dort einen Knoten hinzufügst.

Platzhalter-Knoten erzeugen​

Eine gerade Verbindung zwischen zwei weit entfernten Knoten kann durch einen Hügel schneiden. /em transport network generate <first> <second> baut stattdessen eine Kette über dem Gelände auf:

  • Es liest die Bodenhöhe alle 4 Blöcke entlang der Linie zwischen den beiden Knoten, drei Spalten breit. Es liest nur bereits generierte Chunks und lädt höchstens zwei davon pro Tick, erzeugt also nie neues Gelände.
  • Jeder Kettenpunkt fliegt 12 Blöcke über dem höchsten Boden im Umkreis von etwa 32 Blöcken in beide Richtungen und nie unter der geraden Linie zwischen den beiden Knoten. Er bleibt mindestens 4 Blöcke unter der Baugrenze.
  • Es setzt etwa alle 48 Blöcke einen Knoten sowie einen Knoten direkt über jedem Ende, wenn die Kette mehr als 2 Blöcke höher fliegt als dieses Ende.
  • Es entfernt die direkte Verbindung und verbindet die beiden Knoten über die Kette.

Die Knoten müssen horizontal mindestens 16 Blöcke voneinander entfernt sein. Erzeugte Knoten heißen <first>_<second>_1, <first>_<second>_2 und so weiter und werden mit placeholder: true gespeichert, damit du sie später wiederfindest. Ein einzelnes undo entfernt die gesamte Kette. Fliege das Ergebnis vor dem Speichern ab: Der Generator beachtet nur das Gelände, nicht Gebäude oder Bäume.

Netzwerk-YAML​

Für harbor_flights.yml:

isEnabled: true
world: my_world
transportEntity: transport_cannon_seat.yml
speed: 24.0
acceleration: 16.0
countdownTicks: 60
nodes:
harbor:
location: 120.5,64.0,-340.5
name: '&6Harbor'
arrivalYaw: 90.0
neighbors:
- harbor_sky
harbor_sky:
location: 120.5,96.0,-340.5
neighbors:
- harbor
- ridge_pass
ridge_pass:
location: 310.0,110.0,-180.0
neighbors:
- harbor_sky
- mine_sky
- watchtower_sky
watchtower_sky:
location: 455.5,102.0,-60.5
neighbors:
- ridge_pass
- watchtower
watchtower:
location: 455.5,81.0,-60.5
name: '&6Watchtower'
arrivalYaw: -45.0
permission: elitequest.watchtower_supplies.yml
lockedHint: '&7Finish the quest "Watchtower Supplies" to unlock this flight point.'
neighbors:
- watchtower_sky
mine_sky:
location: 260.0,95.0,20.0
neighbors:
- mine
- ridge_pass
mine:
location: 262.5,70.0,24.5
name: '&6Old Mine'
arrivalYaw: 180.0
neighbors:
- mine_sky
SchlüsselStandardBeschreibung
isEnabledtrueLädt das Netzwerk
worldkeinerDie Welt, in der die Knoten liegen. Erforderlich
transportEntitytransport_cannon_seat.ymlEine aktivierte Datei in custombosses/, die als Reittier dient. Konfiguriere dort Entity-Typ, Modell und Powers
speed24Höchstgeschwindigkeit in Blöcken pro Sekunde. Muss positiv sein
acceleration16Blöcke pro Sekunde, die jede Sekunde bis zur Höchstgeschwindigkeit hinzukommen. Muss positiv sein
countdownTicks60Ticks zwischen der Zielwahl und dem Einsteigen. Null oder mehr
nodeskeinerZuordnung von Knoten-IDs zu Knotenabschnitten

Für ein Netzwerk ohne world, mit einem transportEntity, das kein .yml-Dateiname ist, oder mit ungültiger Geschwindigkeit, Beschleunigung oder ungültigem Countdown wird eine Warnung protokolliert, und es wird nicht geladen.

Knotenschlüssel​

SchlüsselBeschreibung
locationx,y,z in der Welt des Netzwerks. Erforderlich
nameMenüname. Ein Knoten mit Namen ist ein Ziel; einer ohne ist ein Wegpunkt, durch den Flüge hindurchführen. Farbcodes funktionieren
arrivalYawRichtung, in die ein Spieler bei der Ankunft an diesem Ziel blickt. Standard: 0
permissionBerechtigung, die für Flüge von oder zu diesem Knoten nötig ist
lockedHintText, der für diesen Knoten angezeigt wird, solange er gesperrt ist. Standard: &7You have not unlocked this flight point.
neighborsKnoten-IDs, mit denen dieser Knoten verbunden ist
placeholdertrue bei Knoten, die der Generator erzeugt hat. Flüge behandeln sie wie jeden anderen Knoten

Verbindungen funktionieren in beide Richtungen, es genügt also, einen Nachbarn auf einer Seite aufzuführen. EliteMobs warnt und verwirft eine Verbindung zu einem fehlenden Knoten oder zu einem Knoten an derselben Position, überspringt einen ungültigen Knoten, warnt vor einem Knoten ohne Nachbarn und warnt in einem Netzwerk mit mehr als einem Ziel vor einem Ziel, das kein anderes erreichen kann.

Das Speichern aus dem Editor schreibt nur den Abschnitt nodes neu und behält Kommentare und unbekannte Schlüssel innerhalb von Knoten, die noch existieren. Eine neue Datei erhält außerdem die obigen Netzwerkeinstellungen mit den Standardwerten. Der Editor speichert nicht über eine Netzwerkdatei, die deaktiviert ist oder nicht geladen werden konnte; repariere oder entferne diese Datei zuerst.

Das Reittier fliegt die Kurve exakt ab. Es weicht keinen Hindernissen aus, halte also den Raum zwischen den Knoten für Reittier und Passagier frei. Reittiere, deren Entity-Typ ein Huhn oder ein Papagei ist, verlieren während des Flugs Federn und schlagen mit den Flügeln. Was passiert, wenn das Reittier nicht spawnen kann, steht unter Freie Flugbahn und Unterbrechungen.

Flugmeister​

Ein Flugmeister ist ein NPC mit interactionType: TRANSPORT und einem Netzwerk:

interactionType: TRANSPORT
transportNetwork: harbor_flights
transportNode: harbor

Füge diese Felder einer ansonsten gültigen NPC-Definition hinzu. transportNode ist der Knoten, von dem die Flüge des NPCs starten. Das Reittier nimmt den Spieler an diesem Knoten auf, platziere ihn also neben dem NPC. Füge transportDestination: mine hinzu, um ohne Menü direkt zu diesem Ziel zu fliegen. Ist transportNetwork gesetzt, ignoriert der NPC transportRoutes.

Flugportale​

Ein Wurmloch mit einem Abschnitt flight öffnet ein Flugmenü, statt zu teleportieren:

isEnabled: true
location1: my_world,120.5,66,-336.5,90,0
style: ICOSAHEDRON
particleColor: 0xf0c060
sizeMultiplier: 2.0
flight:
network: harbor_flights
node: harbor

flight.node ist der Abflugknoten, und das Reittier nimmt den Spieler dort auf, platziere diesen Knoten also am Portal. flight.destination fliegt ohne Menü direkt zu diesem Ziel. Ein Flugportal braucht nur location1; ist auch location2 gesetzt, öffnen beide Enden dasselbe Menü. Es berechnet kein coinCost und wendet blindPlayer nicht an, aber seine permission gilt weiterhin. Um das Menü erneut zu öffnen, tritt aus der Zone des Portals und wieder hinein, frühestens 5 Sekunden nachdem es zuletzt geöffnet wurde.

Wurmlöcher lösen nicht für einen Spieler aus, der gerade einen Flug unternimmt. Ein Spieler, der in einem Portal abgesetzt wurde, muss es verlassen, und 5 Sekunden müssen vergehen, bevor es wieder auslöst.

Gesperrte Flugpunkte​

Ein Knoten mit einer permission ist für Spieler ohne sie gesperrt. Ein Flug prüft nur seinen Abflug- und seinen Zielknoten, ein Pfad kann also durch gesperrte Wegpunkte führen. Um ein Ziel mit einer Quest freizuschalten, verwende die questLockoutPermission-Markierung der Quest, etwa elitequest.watchtower_supplies.yml, als Berechtigung des Knotens. Spieler erhalten sie, wenn sie die Quest abschließen.

Ist der Abflugknoten gesperrt, erhält der Spieler statt eines Menüs seinen lockedHint. Gesperrte Ziele bleiben ausgegraut im Menü, und ein Klick darauf zeigt ihren Hinweis.

Spieler mit aktiviertem /em quest bypass passieren jede Knotenberechtigung.

Flüge in instanzierten Dungeons​

Setze world auf die Vorlagenwelt des Dungeons. Ein Flug, der innerhalb einer Dungeon-Instanz startet, fliegt durch die Kopie der Welt des jeweiligen Spielers. Verwende als Flugpunkt ein instanziertes Wurmloch mit einem Abschnitt flight oder einen instanzierten NPC. Ein Passagier, der sich mitten im Flug innerhalb einer Instanz abmeldet, wird beim Login nicht am Ziel platziert; es gelten die eigenen Regeln des Dungeons für zurückkehrende Spieler.