Files
Viano-Core/doc/clientless/transport-grid-lifecycle.md
T
Nico 1164a72ea3 Implement clientless transports, Lua reload and same-map portals
Add native transport recording and execution with grid lifecycle handling, clientless teleport acknowledgements, and regression tests. Support targeted same-map portal imports and preserve disabled taxi nodes. Document live transport and portal verification and the remaining portal inventory.
2026-10-26 11:27:56 +01:00

4.2 KiB
Raw Blame History

Allgemeiner Lifecycle animierter GameObject-Transporte

Ursache

Die Tiefenbahn besteht aus sechs GAMEOBJECT_TYPE_TRANSPORT-GameObjects (Typ 11). Drei Wagen besitzen ihre Datenbank-Spawnposition in Eisenschmiede, drei in Sturmwind. Diese GameObjects werden beim Erstellen bereits über setActive(true) für Aktualisierung und einen Unload-Lock ihres Spawn-Grids registriert. Vorher müssen sie jedoch vom normalen Grid-Loader erzeugt werden.

Bei ausschließlich in Sturmwind anwesenden Spielern blieb das entfernte Spawn-Grid ungeladen. Der dort startende Zug existierte daher serverseitig noch nicht. Das betrifft Netzwerkspieler ebenso wie clientlose Spieler. Ein Besuch in Eisenschmiede lud die fehlenden Wagen und ließ den Fehler bis zum nächsten Neustart verschwinden.

Änderung

ObjectMgr::LoadGameObjects indexiert nach Abschluss der vorhandenen Validierungen reguläre Typ-11-Spawns nach Karte. Ereignisgebundene Spawns bleiben außerhalb dieses Index und behalten die bisherige Ereignisverwaltung.

MapManager ruft nach Initialisierung der Respawn-Daten beziehungsweise der Instanz-/Battleground-Daten Map::LoadTransportGameObjectGrids auf. Diese Funktion lädt ausschließlich die Spawn-Grids der indexierten Transporte für die jeweilige Karte und Spawnmaske. Das Laden erfolgt über EnsureGridLoaded: vorhandene Pools, Spawn-Gruppen, Respawn- und Phasenmechaniken gelten weiter. Bereits geladene Grids erzeugen keine zusätzlichen Objektinstanzen.

Die Änderung verwendet keine CPC-, AdventureBot- oder TravelGraph-Komponenten. Die getrennt verwalteten Typ-15-Transporte (Schiffe/Zeppeline) bleiben im vorhandenen Transport-Lifecycle. Es werden keine Transportfahrpläne verändert.

Im Testdatenbestand liegen zwischen 1 und 47 Typ-11-Spawns pro betroffener Karte, sechs davon auf Karte 369. Benachbarte Wagen teilen sich Spawn-Grids. Durch das frühe Laden werden auch die normalen Inhalte dieser Grids früher erzeugt; ein vollständiges Vorladen sämtlicher Kartengrids erfolgt nicht.

Prüfung

python3 tests/clientless/test_transport_grid_loading.py prüft die tatsächlichen neuen Indexierungs- und Ladeblöcke mit deterministischen Core-Doubles: beide Stationen ohne Spieler, wiederholtes Laden, andere Karten, Spawnmasken, entfernte/verschobene Spawns und Ausschluss ereignisgebundener Objekte sowie Typ-15-Transporte.

Für den entscheidenden Live-Test ist ein frischer Worldserverprozess nötig. Danach darf zunächst ausschließlich die Sturmwindseite betreten werden. Alle sechs Spawns 18802–18807 müssen dort bereits über transport inspect auflösbar sein. Zwei zeitlich getrennte Zustandsaufnahmen müssen Bewegung beider Zuggruppen zeigen. Das erstmalige manuelle Betreten der Gegenseite wäre für diesen Test eine unzulässige Vorbedingung, da es den ursprünglichen Fehler verdecken würde.

Live-Ergebnis, 26.10.2026

Build und Installation bestanden, Build-ID 28fa55f1b9604a57da4616b23a195c117d2fcc82. Neuer Worldserverprozess: PID 36683; Ready-Meldung und Port 8085 geprüft. Vor dem Test war kein GM eingeloggt. Arthoran wurde ausschließlich an tram_sw mit einem untätigen Lua-Skript eingeloggt; ein Besuch am anderen Ende entfiel vollständig.

Die neue Core-Diagnostik meldete für Karte 369 drei geladene Spawn-Grids und sechs Transportkandidaten. Alle sechs Spawns 18802–18807 waren auflösbar. Zwei mindestens 20 Sekunden getrennte Aufnahmen bestätigten für jeden Wagen geänderte Position und Animationsfortschritt. Beide Zuggruppen bewegten sich. Ergebnis und Konsolenausgaben: /tmp/vcore-tram-ride.1i65g2dm/cold-grid-test-result.json und cold-grid-test-console.txt im selben Verzeichnis. Das vorherige Reise-Lua wurde anschließend wiederhergestellt; Arthoran blieb online und untätig in Sturmwind. Eine visuelle Abnahme durch einen normalen WoW-Client bleibt Aufgabe des GM.

Separater offener Befund: Beim vorhergehenden Shutdown des noch unveränderten Servers (PID 30922, alter Build) erschien Object.h:448 in GetMap ASSERTION FAILED: m_currMap. Der Prozess endete. Diese Assertion trat vor Installation des Grid-Fixes auf; ihre Ursache ist noch nicht festgestellt. Vorherige Logs liegen unter before-grid-fix-restart im obigen Testverzeichnis. Die Konsolenmeldung enthielt keinen auswertbaren Stacktrace.