Bind directed portal_use edges to native GameObject spawns and spell destinations. Execute normal clicks and verify completed clientless teleports, with regression coverage. Document live portal tests, mage tower calibration, Badlands portals and transport recording workflows.
14 KiB
Fahrzeug-Haltestellen und Reiseverbindungen aufnehmen
Anleitung für den Vcore-Testserver, Stand 26.10.2026. Für Schiffe, Zeppeline, Tiefenbahn und unterstützte Fahrstühle. Gemeint sind native Transportobjekte, keine NPC-Fahrzeuge, Reittiere oder Flugtaxen.
Die Aufnahme erfolgt mit einem eingeloggten GM im Spiel. Alle Beispiele mit
.clientless gehören in den Spielchat. Diagnose- und Testbefehle sind teilweise
auch in der Worldserver-Konsole verfügbar; dort den führenden Punkt weglassen.
Eine neue Verbindung benötigt keinen Build und normalerweise keinen Neustart.
Grundprinzip
Pro physischer Haltestelle gibt es einen gemeinsamen Node für Ein- und Ausstieg, auf festem Boden unmittelbar vor dem Übergang zum Fahrzeug. Auf dem Deck wird kein zusätzlicher TravelGraph-Node angelegt.
Für eine Verbindung A ↔ B werden aufgenommen:
- Haltestellen-Node A und dessen kurzer Weg vom Land zum Deck-Stehplatz.
- Haltestellen-Node B und dessen kurzer Weg zum selben Deck-Stehplatz.
- Eine Fahrtkante zwischen A und B.
- Bei Bedarf separate Groundwege vom übrigen Reisenetz zu A und B.
Die eigentliche Fahrt wird nicht aufgezeichnet. Der Bot fährt als Passenger mit dem normalen Fahrzeug. Zum Aussteigen läuft er die jeweilige Land-Deck-Aufnahme rückwärts ab. Deshalb müssen diese Wege in beiden Laufrichtungen begehbar sein.
| Verkehrsmittel | Node- und Fahrtkantentyp |
|---|---|
| Schiff | ship |
| Zeppelin | zeppelin |
| Tiefenbahn | tram |
| Fahrstuhl | elevator |
1. Fahrzeug und Halte bestimmen
Für Schiffe und Zeppeline lassen sich die konfigurierten nativen Dienste ortsunabhängig auflisten:
.clientless transport services
.clientless transport services <spawnId>
Die Detailausgabe nennt tatsächliche Halte, Karten und Haltezeiten. Historische
Fahrzeugnamen können veraltete Zielorte enthalten. Die ausgegebene Dockposition
ist der Fahrzeugursprung und nicht die Position für den Haltestellen-Node.
services listet nicht sämtliche Fahrstühle oder Tiefenbahnwagen auf.
Vor Ort das gewünschte Fahrzeug untersuchen:
.clientless transport near 50
.clientless transport inspect <spawnId>
Entscheidend sind:
spawn: das konkrete Fahrzeug bzw. der konkrete Wagen; diese ID fürrecord startverwenden.entry: Fahrzeugmodell/-vorlage; wird beispielsweise fürstand listverwendet.stopped=1: Fahrzeug steht laut serverseitiger Bewegung.remainingPause: verbleibende Haltezeit in Millisekunden.
Spawn-ID und Entry-ID nicht verwechseln. Beide Haltestellen einer Verbindung müssen dasselbe konkrete Fahrzeug verwenden. Bei der Tiefenbahn also auch denselben Wagen. Bei einem nativen Kartenwechsel bleibt die Spawn-ID gleich.
Für reine Patrouillen ohne geeignete Halte keine reguläre Passagierverbindung anlegen. Vor Beginn mindestens einen Umlauf beobachten und beide Einstiege prüfen. Fahrstühle sind noch nicht als konkrete Verbindung live abgenommen; ihre Unterstützung muss je Objekt überprüft werden.
2. Haltestellen-Node A anlegen
Auf festem Boden direkt vor Rampe, Steg oder Plattform stehen. Der Node muss auch bei abwesendem Fahrzeug sicher erreichbar sein. Vorher vorhandene Nodes prüfen, damit keine doppelte Haltestelle entsteht:
.clientless node list_nearby 30
Beispiel für eine neue Schiffsverbindung mit frei gewählten Namen:
.clientless node add ship_hafen_a ship
.clientless transport node ship_hafen_a
Die Beispielnamen ship_hafen_a, ship_hafen_b und mein_schiff_deck sind
Platzhalter für deine neue Verbindung. Namen eindeutig wählen, ohne Leerzeichen,
zum Beispiel mit Kleinbuchstaben, Ziffern und Unterstrichen. Für andere
Verkehrsmittel Namen und Nodetyp entsprechend ändern.
3. An A den Weg Land → Deck aufnehmen
Auf eine frische Ankunft warten. Zu Fuß am Node stehen, noch nicht Passenger. Der Start erlaubt höchstens 2 Yards Abstand zum Node. Das Fahrzeug muss auf derselben Karte und in derselben Phase geladen sein und stillstehen.
<spawnId> vor Ausführung durch die ermittelte Zahl ersetzen:
.clientless transport record start ship_hafen_a <spawnId>
Jetzt normal an Bord gehen und einen sicheren, ebenen Deckplatz aufsuchen. Einen kurzen Weg ohne Sprünge, Flug, Teleport oder Hindernisse wählen. Dann noch während desselben Halts speichern:
.clientless transport record stop mein_schiff_deck
stop speichert den Übergang und legt den benannten Deck-Stehplatz bei Bedarf
an. Der Standname bezeichnet eine Position relativ zum Fahrzeugmodell.
Diesen Platz an der Gegenhaltestelle wieder verwenden.
Optionale Befehle während der Aufnahme:
.clientless transport record info
.clientless transport record mark
.clientless transport record cancel
info zeigt Punkte, Länge, Passenger-Status und Fehler. mark erzwingt einen
zusätzlichen Punkt, beispielsweise an einer engen Kurve. Die automatische
Aufnahme läuft alle 100 ms mit mindestens 0,75 Yards Punktabstand;
der Übergang zum Passenger wird automatisch markiert.
Die Aufnahme wird ungültig, wenn das Fahrzeug abfährt, der Recorder das
Fahrzeug nach dem Einstieg wieder verlässt oder wechselt, ein Positionssprung
über 8 Yards entsteht oder der Übergang länger als 60 Yards wird.
Fehler mit info ansehen, danach mit cancel verwerfen und beim nächsten
vollständigen Halt neu beginnen. Ein Logout oder Serverneustart verliert
ungespeicherte Aufnahmen; jede Haltestelle zuerst erfolgreich speichern.
4. An B denselben Deckplatz aufnehmen
Mit genau diesem Fahrzeug zur anderen Haltestelle fahren. Dort aussteigen und auf festem Boden unmittelbar vor dem Übergang Node B anlegen:
.clientless node add ship_hafen_b ship
Beim nächsten geeigneten Halt von B wieder auf dasselbe Fahrzeug gehen:
.clientless transport record start ship_hafen_b <spawnId>
Zum selben lokalen Deckplatz laufen und mit demselben Standnamen speichern:
.clientless transport record stop mein_schiff_deck
.clientless transport stops
Ist der Stand bereits gespeichert, muss man beim Speichern höchstens 1,5 Yards davon entfernt stehen. Die beiden aufgezeichneten Deck-Endpunkte müssen außerdem innerhalb von 3 Yards liegen. Es wird kein unbekannter Weg quer über das Deck zwischen unterschiedlichen Standorten ergänzt.
Optional kann der Deckplatz schon vor der ersten Aufnahme gespeichert werden, indem man an Bord am gewünschten Platz steht:
.clientless transport stand add mein_schiff_deck
.clientless transport stand list
Das ist nicht erforderlich, wenn record stop den Stand bereits angelegt hat.
Ein vorhandener Standname wird nicht überschrieben.
5. Fahrtkante erstellen
Nach beiden erfolgreich gespeicherten Aufnahmen:
.clientless transport link ship_hafen_a ship_hafen_b ship 100 both
both erstellt eine bidirektionale Kante. Nur verwenden, wenn das Fahrzeug
beide Richtungen tatsächlich bedient. Ohne both gilt ausschließlich A → B:
.clientless transport link ship_hafen_a ship_hafen_b ship 100
100 ist ein positiver Graphkostenwert, keine Fahrzeit in Sekunden.
Er eignet sich als vorläufiger Wert für einen isolierten Funktionstest.
Bei konkurrierenden Fernrouten die Kosten später passend abstimmen.
Der Link prüft kompatible Aufnahmen, dieselbe Spawn-ID und denselben Entry,
unterschiedliche Halte und passende Deck-Endpunkte. tram/elevator erwarten
GameObject-Typ 11, ship/zeppelin Typ 15. Eine bereits gleichgerichtet
vorhandene Kante wird nicht überschrieben. Erfolgreiches Speichern und
Verknüpfen laden die betreffenden Daten automatisch neu.
6. Groundanschlüsse getrennt aufnehmen
Der Transportlink verbindet die beiden Haltestellen miteinander, nicht zugleich mit dem übrigen Reisenetz. Für einen fehlenden Landanschluss beide Nodes vorher anlegen bzw. einen bestehenden Stadtnode verwenden.
Beispiel: am bestehenden Node stadt_knoten_a anfangen und bis zur
Haltestelle laufen:
.clientless route start stadt_knoten_a ship_hafen_a
Am Haltestellen-Node auf festem Boden stoppen:
.clientless route stop
Der Groundrecorder speichert bidirektional und lädt den Graph neu. Möglichst exakt an den Nodes beginnen und enden, damit die angehängten Endstücke keine Hindernisse schneiden. Diese Aufnahme endet vor dem Einstieg ins Fahrzeug; Land-Deck-Übergang und Fahrt werden separat wie oben erfasst. Auf Seite B entsprechend verfahren. Vollständig geprüfte MMAP-Anschlüsse können eine Groundaufnahme ersetzen, müssen aber für die konkrete Route funktionieren.
7. Botfahrt prüfen
Mit einem online befindlichen, untätigen Clientless-Bot an A testen.
Die Zahl 26 ist Arthorans Charakter-GUID und bei einem anderen Bot zu ersetzen.
Sein Login-Lua darf nicht gleichzeitig andere Reisen starten.
.clientless transport travel 26 ship_hafen_b
.clientless transport status 26
.clientless actioninfo 26
travel stellt einen normalen Reiseauftrag in die Aktionswarteschlange;
es unterbricht keine laufende Aktion. Nach Abschluss die Gegenrichtung testen:
.clientless transport travel 26 ship_hafen_a
Eine funktionierende Fahrt durchläuft Waiting → Boarding → Riding →
Leaving → Arrived. Prüfen, dass der Bot wirklich Passenger wird, einen
gegebenenfalls nötigen Kartenwechsel abschließt, am Ziel aussteigt und den
Landnode erreicht. Anschließend auch eine Reise mit Groundanschluss testen.
Ein gespeicherter Link allein bestätigt noch keine funktionierende Botfahrt.
Abbruch einer bereits laufenden Transportfahrt:
.clientless transport cancel 26
An Bord bleibt der Bot zunächst Passenger und versucht einen sicheren Ausstieg an einer aufgezeichneten Haltestelle. Das ist kein sofortiges Abspringen und kein allgemeines Leeren der Aktionswarteschlange.
Aufnahmen korrigieren
Nur die gespeicherte Land-Deck-Aufnahme ersetzen:
.clientless transport forget ship_hafen_a
Danach an A erneut record start und record stop ausführen. forget
entfernt nur diese Übergangsaufnahme. Node, Groundkanten, Fahrtkante und
benannte Deck-Stehplätze bleiben bestehen. Unvollständige Transportverbindungen
werden währenddessen nicht geplant. Bleiben die Endpunkte kompatibel,
muss die bestehende Fahrtkante nicht erneut angelegt werden.
Haltestellen-Node verschieben: am neuen festen Boden stehen und ausführen:
.clientless node move ship_hafen_a
Danach die betroffene Transportaufnahme mit forget und neuer Aufnahme
ersetzen. Angeschlossene Groundwege ebenfalls prüfen und gegebenenfalls neu
aufnehmen; sie passen sich nicht automatisch an die neue Position an.
Falsche Fahrtkante entfernen:
.clientless route remove ship_hafen_a ship_hafen_b
Dieser Befehl entfernt alle Kanten zwischen diesen beiden Nodes in beiden
Richtungen, unabhängig vom Kantentyp. Daher nur verwenden, wenn genau diese
Verbindungen entfernt werden sollen. Haltestellen-Aufnahmen und Nodes bleiben
erhalten. Anschließend die gewünschte Fahrtkante mit transport link neu anlegen.
Deckplätze prüfen oder einen unbenutzten Stand entfernen:
.clientless transport stand list <entryId>
.clientless transport stand remove <entryId> <standName>
Ein von einer Haltestellen-Aufnahme verwendeter Stand kann nicht entfernt werden. Eine Änderung des gemeinsamen Deckplatzes erfordert passende neue Aufnahmen an beiden Haltestellen.
Diagnose und häufige Fehler
| Meldung oder Symptom | Nächster Schritt |
|---|---|
| Abstand zum Node zu groß | Auf festem Boden bis auf höchstens 2 Yards an den Node zurückgehen. |
| Recorder bereits Passenger | Aussteigen; Aufnahme muss auf festem Boden beginnen. |
| Spawn nicht geladen | Spawn-ID, Karte und Phase prüfen; Fahrzeug vor Ort aufsuchen. |
| Fahrzeug bewegt sich / Aufnahme nach Abfahrt ungültig | record cancel, nächsten vollständigen Halt abwarten. |
| Dock bereits aufgenommen | Bestehende Daten mit stops prüfen; nur für einen beabsichtigten Ersatz forget verwenden. |
| Standname an anderer Deckposition vorhanden | Zum ursprünglichen Stand gehen; alternativ neuen Namen und kompatible Aufnahmen verwenden. |
| Link abgelehnt | Zwei gespeicherte Halte, gleicher Spawn/Entry, kompatible Deck-Endpunkte und richtigen Kantentyp prüfen. |
| Bot wartet dauerhaft | Richtigen Spawn, tatsächliche Halte, Dockposition und status prüfen. |
| Fahrt klappt, Weiterreise nicht | Groundanschluss der Haltestelle separat prüfen bzw. aufnehmen. |
Weitere Befehle:
.clientless transport stops
.clientless transport node ship_hafen_a
.clientless transport reload
reload lädt Transportdaten und TravelGraph neu. Laufende Fahrten behalten
jedoch ihre beim Start erfassten Definitionen. Änderungen deshalb mit einem
neuen Reiseauftrag testen.
Konsolenbeispiele ohne Punkt; für räumliche Diagnose ist ein online befindlicher Bot als Beobachter auf der betreffenden Karte nötig:
clientless transport services
clientless transport services <spawnId>
clientless transport node ship_hafen_a
clientless transport inspect <spawnId> 26
clientless transport near 50 26
clientless transport stops
clientless transport status 26
remainingPause=4294967295 bezeichnet einen Halt ohne bekannte zeitliche
Begrenzung. Zustandswechsel und Aufnahmefehler stehen in
adventurebot-navigation.log im Arbeitsverzeichnis des Test-worldservers.
Bestehende Beispiele
Diese Namen und IDs gehören bereits erfassten Verbindungen; nicht als neue Haltestellen doppelt anlegen oder zum Üben überschreiben:
| Verbindung | Haltestellen | Fahrzeug |
|---|---|---|
| Sturmwind ↔ Rut’theran, The Bravery | ship_sw_br ↔ ship_ruttheran_br |
Spawn 2, Entry 176310, Stand bravery_center |
| Tiefenbahn | tram_sw ↔ tram_if |
Im dokumentierten Fahrtest Wagen-Spawn 18803; bestehende Aufnahme mit stops prüfen. |
Bei der Tiefenbahn gibt es mehrere Wagen mit verschiedenen Spawn-IDs; deren Aufnahmen nicht mischen. Die kurzen Haltefenster erfordern einen kurzen Einstiegsweg und zügiges Speichern.
Weiterführend: technische Transportdokumentation, Schiff Sturmwind–Rut’theran, Transport-Grid-Lifecycle.