Files
Viano-Core/doc/clientless/2026-10-30-city-catalog-build-policy.md
T
Nico 649915e575
clang PCH / build (push) Waiting to run
GCC PCH / build (push) Waiting to run
Fix AdventureBot travel recovery, area eligibility and safe build logout
2026-10-30 12:43:22 +01:00

7.9 KiB

Gebietskatalog, POI-Zuordnung und sichere Builds

Befund und Korrektur

Pibwin (GUID88, Stufe18) kündigte ein Abenteuer bei „Dalaran Krasus' Landing“ an. Der importierte Ort poi_guard_140 lag tatsächlich auf Karte1 bei5831/508/Z3,55, Gebiet2078, Zone148 (Dunkelküste). Der Gebietskatalog prüfte deshalb einen niedrigstufigen Ort, nicht Dalaran. Ursache war die Auswahl des nächsten game_tele-Ankers nach X/Y über verschiedene Kontinente hinweg.

POIs erhalten ihre Karte jetzt über die nativen Gesprächsmenüs der tatsächlich platzierten NPCs (creature_template_gossip, gossip_menu_option, creature). Untermenüs werden verfolgt, Zyklen abgefangen. Mehrdeutige oder fehlende native Zuordnungen werden nicht durch eine Koordinatenvermutung ersetzt. Erst innerhalb der eindeutigen Karte werden die Bodenhöhe und die Gebietszuordnung bestimmt.

clientless adventure repairimport erkennt unveränderte generierte Orte anhand von Quelle, Name, Position und Geografiemetadaten. Es korrigiert ihre Karte/Höhe/ Gebietsdaten und deaktiviert solche ohne sichere native Zuordnung. Manuell veränderte Orte sowie Original-POIs und aufgezeichnete Reiserouten bleiben erhalten.

Die Katalogmigration 2026_10_30_00_adventure_city_parents.sql ordnet native Stadtwurzeln ihren geografischen Umgebungen zu, insbesondere Dalaran4395 dem Kristallsangwald2817 und Shattrath3703 Terokkar3519. Auch die acht Volksstädte bekommen ihre Heimatregion als semantischen Katalog-Elternbereich. Vorhandene manuelle Elternzuordnungen bleiben bestehen; Karten müssen übereinstimmen. Neue DBC-Exporte erzeugen dieselben editierbaren Vorgaben. Die native DBC- und Spielergebietshierarchie wird nicht geändert. Levelminimum, Fraktionssperren und fehlende Flugvorgaben werden über die vorhandene Katalogvererbung berücksichtigt.

Gruppenpläne prüfen auch das tatsächlich angekündigte nächste Ziel gegen die Berechtigungen des Bots. Ungültige gespeicherte/manuelle Ziele werden nicht mehr beworben. Bei Einladungen werden sowohl Anführer als auch Teilnehmer geprüft. Gespeicherte Tagespläne werden durch die vorhandene Reparatur beim Laden bzw. Katalogwechsel auf zulässige Ziele umgestellt.

Verbindlicher Ablauf vor künftigen Builds

  1. Den bisherigen Wert von Clientless.Adventure.Loader.Enabled sichern, auf0 setzen, reload config und clientless population reload ausführen. Bei einer noch laufenden Loader-Operation deren Abschluss abwarten und erneut laden.
  2. clientless logout safe all ausführen. Der Welt-Thread fordert einmalig einen sicheren Verhaltensstopp an und lässt die bestehenden Controller weiterlaufen. Er wartet auf lebende, geladene Bots ohne Kampf, Transportbindung, Taxi, Flug, Fall, Teleport, Zauber oder aktive Bewegung. Es gibt keinen erzwungenen Logout nach einer Wartefrist. Menschen und normale Netzwerksitzungen sind ausgenommen.
  3. Mit clientless logout status warten, bis pending=0 sessions=0 gemeldet wird. Erst dann cmake --build /home/wow_admin/wow_cata_server/build/debug -j10 starten. Bei blockierten Bots zuerst die Ursache untersuchen; nicht nebenher bauen.
  4. Den Loader durch Installation und Neustart hindurch pausiert lassen. Laufende Binärdateien nicht überschreiben; nach sauberem Serverstopp installieren. Frischen Ready-Eintrag, Prozess und Listener prüfen.
  5. clientless logout resume beendet die Sammel-Anforderung, falls derselbe Weltprozess weiterläuft. Nach Neustart ist sie ohnehin zurückgesetzt. Bisherige Loader-Konfiguration wiederherstellen, reload config und clientless population reload ausführen. Der Loader lädt die Bots wieder schrittweise. Die Regel ist zusätzlich dauerhaft in AGENTS.md festgehalten.

Einzelne Bots können mit clientless logout safe <guid> ebenso sicher abgemeldet werden. Der bisherige unmittelbare Einzel-Logout bleibt als Administrationswerkzeug bestehen und ist nicht der empfohlene Build-Ablauf.

Beim ersten Übergang auf diesen Ablauf war der sichere Sammel-Befehl noch nicht installiert. Die vorhandenen sicheren Intent-Stopps dienten zur Abmeldung. Für zwei im alten Schiffscode festhängende Bots wurde zunächst der bereits fertig gebaute vorherige Transportfix installiert. Tholgar92 und Lillina118 erreichten anschließend regulär den Anleger (Arrived, passenger=0,11:54:06). Bei den zuletzt stationären Bots Edwin36 und Drakogzug77 wurden vermutete verwaiste native Kampfzustände separat mit combatstop bereinigt; dies ist kein Bestandteil des neuen automatischen Logout-Verfahrens. Anschließend wurden ihre sicheren Stopps und Offline-Zustände bestätigt. Vor dem neuen Build waren sämtliche 110 Bots offline, der Loader aus und nur eine normale Spielersitzung aktiv.

Weltkarte

Der vorhandene GM-Befehl lautet .cheat explore 1. Ohne Zielauswahl wird die eigene Karte aufgedeckt; bei Auswahl eines Spielers dessen Karte. .cheat explore 0 löscht die Erkundungsbits wieder. Behoben wurden die bisher falsche Zielperson und das wirkungslose Löschen per SetFlag(...,0). Der Befehl schreibt jetzt alle Erkundungsfelder des ausgewählten Spielers korrekt.

Prüfstand

113 isolierte Clientless-Testprogramme erfolgreich. Neue Prüfungen führen die produktive POI-Zuordnung, den nativen Logout-Sicherheitscheck und den bestehenden Kartenbefehl aus. Weitere Prüfungen bestätigen die Katalogmigration einschließlich Idempotenz und Erhalt manueller Eltern sowie neue DBC-Exporte und Gruppenpläne mit unzulässigem Folgeziel. Die Integrationsergebnisse nach Installation werden im Session-Checkpoint und im Abschlussbericht festgehalten.

Build mit bestehender Debug/Ninja-Konfiguration und -j10 erfolgreich, ohne parallel eingeloggte Bots. Logs unter /tmp/vcore-city-safe-logout-*, Testausgaben unter /tmp/vcore-travel-fixes-tests/. Geografiesnapshots unter /tmp/vcore-city-fix-state/ enthalten keine Konfigurationszugangsdaten.

Bestätigte Integration

  • Finaler Testserverstart: PID 446178, frische Ready-Meldung nach 10 Sekunden, Listener 8085/8087. Beide Builds mit -j10 bei 0 Bots erfolgreich, ohne OOM-Abbruch.
  • Reparatur: 437 native Wächter-POIs, 166 nicht nutzbare Koordinaten übersprungen, 2916 aktive Locations einschließlich Instanzvarianten. Die Höhenprüfung nutzt zunächst NPC-Höhe +3; bei weit entferntem Bodentreffer folgt eine Probe von +35. Der nähere Treffer gewinnt. Nahe Innenböden werden beibehalten.
  • poi_guard_140: Karte 571, X 5831, Y 508,617, Z 657,7, Gebiet 4564, Zone 4395 Dalaran. Pibwin auf Stufe 18: own=0 invitation=0. Sein Tagesblock 12 behält Adventure, bekommt poi_tele_651 (Blutmythosinsel, niedriger Levelbereich).
  • Katalogeltern 4395→2817 und 3703→3519 bestätigt. Policytests bestätigen geerbte Levelminima 77 bzw. 62 und Flugvorgaben.
  • Nodes, Kanten und Transportstopps vor/nach Reparatur bytegleich. Alle 17 vorherigen manuellen Ortsdatensätze unverändert. 236 generierte Datensätze repariert/deaktiviert, 12 semantische Datensätze ergänzt. Snapshots unter /tmp/vcore-city-fix-state/.
  • Sammel-Logout mit Arthoran 26 und Pibwin 88 live ausgeführt: erste Rückmeldung pending=2/sessions=2/flight=1. Arthorans native Taxiverbindung 2221 endete vor seinem CLIENTLESS_SAFE_LOGOUT, danach Pibwins Bewegungsabschluss und Logout. Abschluss: pending=0 sessions=0. Kein zeitgesteuerter Zwangslogout.
  • Sammel-Anforderung mit logout resume beendet, ursprünglichen Loaderwert 1 wiederhergestellt, Config und Population neu geladen. Bots kehren schrittweise zurück; keine neuen Sammel-Logouts nach der Wiederaufnahme. Zielkonfiguration unverändert: 50 persistente + 5 temporäre Bots pro Fraktion. Abschließend alle 110 Bots online, keine ausstehenden Logins, Loader ohne Fehler.

Die Liveprüfung bestätigt Zielberechtigung und Logoutablauf. Sie ersetzt keine vollständige Abnahme sämtlicher Reisewege oder aller reparierten POIs. Der Kartenbefehl wurde am produktiven Handler isoliert geprüft; keinem Spieler wurde ungefragt seine Karte verändert.