Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba2a4e629c | ||
|
|
f8ee1d0ff6 | ||
|
|
65e4abb0b9 | ||
|
|
768810a82d | ||
|
|
a6572242c6 | ||
|
|
fe03ea8ca5 | ||
|
|
6f8f59ec6d | ||
|
|
ae0b7513d9 | ||
|
|
3056063f12 | ||
|
|
2778cf9bdd | ||
|
|
3c361e435a | ||
|
|
be049baacc | ||
|
|
856832e7bd | ||
|
|
7b4994400b | ||
|
|
d1ef007cef | ||
|
|
69b5a1c4a1 | ||
|
|
649915e575 | ||
|
|
60cab950bd | ||
|
|
77648c6b53 | ||
|
|
373818628d | ||
|
|
bc8f171055 | ||
|
|
19075b6c75 | ||
|
|
54d77d1e4d | ||
|
|
2841ee973b | ||
|
|
49712aadfe | ||
|
|
321a28640c | ||
|
|
0173a434f4 | ||
|
|
cac4142ec1 | ||
|
|
a758239da9 | ||
|
|
d3273c677e | ||
|
|
d6fea6ee68 |
No files matched your search
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Export the local Cataclysm DBC geography as an editable world-DB catalog.
|
||||
|
||||
Does not connect to a database. Existing operator edits survive repeated imports.
|
||||
"""
|
||||
import argparse
|
||||
import struct
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def dbc(path, fields):
|
||||
data = path.read_bytes()
|
||||
magic, count, actual, size, strings_size = struct.unpack_from('<4s4I', data)
|
||||
if magic != b'WDBC' or actual != fields or size != fields * 4:
|
||||
raise ValueError(f'Unexpected Cataclysm DBC layout: {path}')
|
||||
if len(data) != 20 + count * size + strings_size:
|
||||
raise ValueError(f'Truncated or unsupported DBC: {path}')
|
||||
strings = data[20 + count * size:]
|
||||
rows = [struct.unpack_from('<' + 'I' * fields, data, 20 + i * size)
|
||||
for i in range(count)]
|
||||
|
||||
def name(offset):
|
||||
if offset >= len(strings):
|
||||
raise ValueError(f'Invalid string offset in {path}')
|
||||
return strings[offset:].split(b'\0', 1)[0].decode('utf-8')
|
||||
|
||||
return rows, name
|
||||
|
||||
|
||||
def quote(value):
|
||||
# Hex strings avoid dependence on session SQL backslash escaping modes.
|
||||
return "CONVERT(X'" + value.encode('utf-8').hex() + "' USING utf8mb4)"
|
||||
|
||||
|
||||
def export(directory):
|
||||
maps, map_name = dbc(directory / 'Map.dbc', 20)
|
||||
areas, area_name = dbc(directory / 'AreaTable.dbc', 26)
|
||||
map_ids = {r[0] for r in maps}
|
||||
area_ids = {r[0] for r in areas}
|
||||
if any(r[2] and r[2] not in area_ids for r in areas):
|
||||
raise ValueError('AreaTable contains missing parent areas')
|
||||
sql = ["-- Generated from local Cataclysm 4.3.4 DBC; do not overwrite operator edits.",
|
||||
"-- All access policies are AdventureBot-only; never player restrictions.",
|
||||
"CREATE TABLE IF NOT EXISTS vcore_adventure_map_catalog (",
|
||||
" map_id INT UNSIGNED NOT NULL PRIMARY KEY,",
|
||||
" display_name VARCHAR(255) NOT NULL,",
|
||||
" map_type TINYINT UNSIGNED NOT NULL,",
|
||||
" expansion TINYINT UNSIGNED NOT NULL,",
|
||||
" notes VARCHAR(255) NOT NULL DEFAULT ''",
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
"CREATE TABLE IF NOT EXISTS vcore_adventure_area_catalog (",
|
||||
" area_id INT UNSIGNED NOT NULL PRIMARY KEY,",
|
||||
" map_id INT UNSIGNED NOT NULL,",
|
||||
" parent_area_id INT UNSIGNED NOT NULL DEFAULT 0,",
|
||||
" display_name VARCHAR(255) NOT NULL,",
|
||||
" allowed_factions TINYINT UNSIGNED DEFAULT NULL COMMENT 'NULL inherit; 0 closed; 1 Alliance; 2 Horde; 3 both',",
|
||||
" min_level TINYINT UNSIGNED DEFAULT NULL COMMENT 'Recommended level band, NULL inherit/unknown',",
|
||||
" max_level TINYINT UNSIGNED DEFAULT NULL COMMENT 'Recommended level band, not an upper access limit',",
|
||||
" max_level_gap TINYINT UNSIGNED DEFAULT NULL COMMENT 'Allowed levels below min_level; NULL inherit, default 5',",
|
||||
" prefer_flight TINYINT UNSIGNED DEFAULT NULL COMMENT 'NULL inherit; 0 normal; 1 prefer legal flight',",
|
||||
" notes VARCHAR(255) NOT NULL DEFAULT '',",
|
||||
" KEY parent_area (parent_area_id), KEY map_area (map_id)",
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;",
|
||||
"START TRANSACTION;"]
|
||||
for r in sorted(maps):
|
||||
sql.append('INSERT IGNORE INTO vcore_adventure_map_catalog '
|
||||
'(map_id,display_name,map_type,expansion) VALUES '
|
||||
f'({r[0]},{quote(map_name(r[6]))},{r[2]},{r[16]});')
|
||||
# Native AreaTable also contains obsolete areas whose Map row is absent.
|
||||
# Retain their identity explicitly; they must not become usable destinations.
|
||||
for map_id in sorted({r[1] for r in areas} - map_ids):
|
||||
sql.append('INSERT IGNORE INTO vcore_adventure_map_catalog '
|
||||
'(map_id,display_name,map_type,expansion,notes) VALUES '
|
||||
f"({map_id},'Missing Map.dbc entry',255,0,'Unavailable native map');")
|
||||
|
||||
alliance = {1, 12, 141, 3524, 3525, 1519, 1537, 1657, 3557,
|
||||
4714, 4755, 4774, 4706, 5351}
|
||||
horde = {14, 85, 215, 3430, 3433, 1497, 1637, 1638, 3487,
|
||||
4707, 4720, 4737}
|
||||
outland = {3483, 3521, 3519, 3518, 3522, 3523, 3520, 3703}
|
||||
cataclysm = {616, 4922, 5034, 5042, 5095, 5389}
|
||||
# Native city roots still have physical surroundings. These semantic
|
||||
# catalog parents are editable and never alter the native DBC hierarchy.
|
||||
city_parents = {1519:12,1537:1,1657:141,1637:14,1638:215,1497:85,
|
||||
3487:3430,3557:3524,3703:3519,4395:2817}
|
||||
area_maps = {r[0]:r[1] for r in areas}
|
||||
for r in sorted(areas):
|
||||
area, map_id, parent = r[:3]
|
||||
if not parent and area_maps.get(city_parents.get(area)) == map_id:
|
||||
parent = city_parents[area]
|
||||
faction = '1' if area in alliance else '2' if area in horde else 'NULL'
|
||||
note = 'Racial home region/capital' if faction != 'NULL' else ''
|
||||
if area == 5146:
|
||||
faction, note = '0', 'Vashjir closed to all AdventureBots, including child areas'
|
||||
if map_id not in map_ids:
|
||||
faction, note = '0', 'Unavailable native map'
|
||||
flight = '1' if area in outland | cataclysm or (map_id == 571 and parent == 0) else 'NULL'
|
||||
sql.append('INSERT IGNORE INTO vcore_adventure_area_catalog '
|
||||
'(area_id,map_id,parent_area_id,display_name,allowed_factions,prefer_flight,notes,min_level,max_level) '
|
||||
f'SELECT {area},{map_id},{parent},{quote(area_name(r[11]))},{faction},{flight},{quote(note)},'
|
||||
'z.min_level,z.max_level FROM (SELECT 1) seed '
|
||||
f'LEFT JOIN vcore_adventure_zone z ON z.zone_id={area} AND z.enabled=1;')
|
||||
# Level bands are seeded only on INSERT, including deliberately NULL edits.
|
||||
sql.append('COMMIT;')
|
||||
return '\n'.join(sql) + '\n'
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('dbc_directory', type=Path)
|
||||
parser.add_argument('output_sql', type=Path)
|
||||
args = parser.parse_args()
|
||||
args.output_sql.write_text(export(args.dbc_directory), encoding='utf-8')
|
||||
@@ -0,0 +1,126 @@
|
||||
# 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.
|
||||
@@ -0,0 +1,138 @@
|
||||
# Gruppentest am 30.10.2026 bis 04:00 Uhr MEZ
|
||||
|
||||
Die automatische Beobachtung lief von 02:20:56 bis 04:00:00 Uhr MEZ. Der Server
|
||||
läuft weiter. Um 04:00 Uhr wurden die ursprünglichen 15 Prozent für die temporäre
|
||||
Botrotation wiederhergestellt. Der Loader bleibt aktiviert; eingestellt sind
|
||||
weiterhin je Fraktion 50 persistente und 5 temporäre Bots.
|
||||
|
||||
Es gab keinen unbeabsichtigten Laufzeitabsturz. Ein angekündigter Neustart um
|
||||
02:37 Uhr spielte die während der Beobachtung gefundene Korrektur ein.
|
||||
|
||||
## Änderungen und Testaufbau
|
||||
|
||||
- `373818628d`: Instanzmodi, vorzeitiger Gruppenaufbruch und Flugvoraussetzungen.
|
||||
- `77648c6b53`: Navigationsfallbacks nach vorgezogenem Aufbruch erhalten.
|
||||
- Die Flugvoraussetzung gilt für die im editierbaren Gebietskatalog ausgewiesenen
|
||||
Flugregionen der Scherbenwelt und von Cataclysm. Nordend verlangt zusätzlich
|
||||
Stufe 68 und Kaltwetterflug. Die niedrigstufigen Blutelfen- und Draenei-Gebiete
|
||||
auf Karte 530 bleiben getrennt. Builds mit `-j10`; 69 Tests bestanden. Für die
|
||||
anschließend gefundene Regression wurden drei Produktionstests erneut geprüft.
|
||||
- Von 110 Bots nahmen 92 teil. 18 Bots unter Stufe 15 blieben ausgenommen.
|
||||
- Nur die Blöcke 02:00–03:00 und 03:00–04:00 Uhr wurden geändert: zuerst
|
||||
Gruppensuche in Sturmwind beziehungsweise Orgrimmar, danach 76 Instanz- und
|
||||
16 Raid-Intents. Alle gewählten Ziele bestanden den nativen Eligibility-Check.
|
||||
- Nach sicherem Logout wurden Teilnehmer in ihre Hauptstädte gesetzt und alte
|
||||
Leichen-, Geist-, Transport-, Taxi-, Besuchs- und Handoff-Reste bereinigt.
|
||||
Die übrigen Tagesblöcke blieben erhalten.
|
||||
|
||||
## Bestätigte Abläufe
|
||||
|
||||
Alle 110 Bots waren gleichzeitig online. Es gab maximal 26 Gruppen mit
|
||||
Testteilnehmern, am Ende 17. Im Beobachtungsfenster wurden 156 Meldungen im
|
||||
Hauptstadtchat und 220 Bot-Einladungen protokolliert. Vorbereitungsszenen und
|
||||
Suchgänge wurden tatsächlich ausgeführt. Drei Fünfergruppen wurden vor dem
|
||||
Stundenwechsel vollständig und begannen ihre Sammelfrist. Auch die feste
|
||||
Sammelphase ab 02:55 Uhr und der Wechsel um 03:00 Uhr wurden beobachtet.
|
||||
|
||||
**Sechs tatsächliche Eintritte und sechs Rückkehren sind bestätigt:**
|
||||
|
||||
| Bot | Besuch |
|
||||
| --- | --- |
|
||||
| Elaansa, GUID 110 | Verlies, Karte 34, Instanz 1 |
|
||||
| Hilddis, GUID 56 | Verlies, Karte 34, Instanz 3 |
|
||||
| Hildda 64, Nimbin 74, Noranda 53 | gemeinsam Festung der Stürme, Karte 550, Instanz 2 |
|
||||
| Brynli, GUID 84 | Festung der Stürme, Karte 550, Instanz 4 |
|
||||
|
||||
Alle sechs Eintritte verwendeten den normalen Modus. Ein heroischer Eintritt
|
||||
wurde in diesem Lauf nicht bestätigt. Fünf Rückkehren erfolgten in der geplanten
|
||||
Austrittsphase ab 03:55 Uhr; Brynli kehrte bereits früher zurück. Die Rückkehrlogs
|
||||
weisen HP-Verluste von 1, 37, 46, 32, 10 und 1 Prozent aus, jeweils innerhalb der
|
||||
vereinbarten Grenze. Danach folgte die Rastphase.
|
||||
|
||||
Elaansas ursprünglicher Folgeslot »Verlies« blieb trotz des zuvor kopierten
|
||||
Deadmines-Ziels erhalten. Reine Botgruppen besuchten die Instanzen weiterhin
|
||||
performativ; dies war keine Abnahme von Kampfrollen oder Bossmechaniken.
|
||||
|
||||
51 Transportübergänge wurden beendet, davon 43 mit Testteilnehmern. Das sind
|
||||
Fahrten, nicht 51 unterschiedliche Bots. Die neue Zeppelinverbindung wurde
|
||||
viermal von Orgrimmar nach Warsong und dreimal zurück vollständig durchlaufen.
|
||||
Für die Kraken gab es drei erfolgreiche Ausstiege in Valiance sowie Fehlerfälle.
|
||||
Auch Tiefenbahn und Bravery wurden erfolgreich benutzt.
|
||||
|
||||
Eine Stichprobe von elf gespeicherten Bots in den verpflichtenden Flugregionen
|
||||
zeigte durchgehend Reiten 225, Lizenz 90267, Kaltwetterflug 54197 und drei gelernte
|
||||
Flugreittiere. Eine unqualifizierte Belegung wurde nicht gefunden.
|
||||
|
||||
Die höchste gemessene RSS-Belegung betrug etwa 7,521 GiB. Die CPU-Prozessanzeige
|
||||
lag meist bei rund einem bis 1,3 Kernen im Zeitmittel. Das ist keine Messung der
|
||||
maximalen Ticklatenz und keine Prognose für den Produktionsserver.
|
||||
|
||||
## Während der Beobachtung behoben
|
||||
|
||||
Die frühe Intentkopie wurde nach einem gescheiterten Reiseversuch ständig erneut
|
||||
angewendet. Dadurch überschrieb sie den normalen Navigationsfallback und plante
|
||||
das ursprüngliche Instanzziel immer wieder neu. Commit `77648c6b53` wendet die
|
||||
Kopie nur beim Übergang an. Danach gelten das wirksame Fallbackziel und dessen
|
||||
Vererbung an die Gruppe. Ein Gruppenaustritt setzt den Bot ebenfalls nicht zurück.
|
||||
|
||||
Regressionstests prüfen wiederholte Updates, die Vererbung des Fallbackziels und
|
||||
das Verlassen der Gruppe. Die 1.693 rohen EARLY-Meldungen stammen aus dieser
|
||||
Wiederholung vor der Korrektur; sie sind keine 1.693 echten Aufbrüche. Nach dem
|
||||
Einspielen trat die Schleife nicht erneut auf.
|
||||
|
||||
## Offene Befunde
|
||||
|
||||
1. **Gruppen verlieren beim Neustart gildenlose Mitglieder.** Der Core lud 25
|
||||
Gruppendefinitionen und 70 Mitgliedszeilen. `Group::LoadMemberFromDB` deutet
|
||||
einen fehlgeschlagenen Aufruf von `GetPlayerGuildIdByGUID` als fehlenden
|
||||
Charakter und löscht das Mitglied. Die Cachefunktion liefert aber auch für
|
||||
einen vorhandenen Charakter ohne Gilde `false`. Die Gruppen bildeten sich
|
||||
anschließend neu. Die frühere Aussage, die Mitgliedschaften seien erhalten
|
||||
geblieben, ist damit korrigiert. Diese native Ursache betrifft auch Spieler
|
||||
ohne Gilde und wurde während des laufenden Tests nicht umgebaut.
|
||||
2. **Unterbrochener Schiffsausstieg kann hängen bleiben.** Tholgar 92 und Lillina
|
||||
118 erzeugten wiederholte Meldungen »unsafe gap over 8 yards«. Tholgar begann
|
||||
um 03:08:32 Uhr den Ausstieg in Valiance. Um 03:09:36 Uhr fuhr das Schiff mit
|
||||
ihm auf dem Übergangsweg wieder ab. Die Wiederaufnahme versucht danach den
|
||||
Endstand, der von seiner Zwischenposition über acht Yards entfernt liegt.
|
||||
Die Aufnahme selbst ist kontinuierlich: größter Abstand in Sturmwind 4,043,
|
||||
in Valiance 3,013 Yards. Keine Aufnahme wurde verändert. Die 12.620 Meldungen
|
||||
sind Wiederholungen dieser zwei Bots, keine 12.620 unterschiedlichen Fahrten.
|
||||
3. **Die Anreise bleibt die größte Begrenzung.** Nur 6 von 92 Teilnehmern haben
|
||||
einen bestätigten Eintritt. Viele andere reisen noch oder planen wiederholt
|
||||
neu. Es gab insgesamt 7.372 Intentfallbacks, teilweise durch den inzwischen
|
||||
korrigierten Fehler verzerrt. Das Navigationlog enthält 3.884 Recovery-Starts,
|
||||
558 Recovery-Fehlschläge und 1.276 Edge-Fehlschläge. Das sind keine voneinander
|
||||
unabhängigen Fehlerfälle. Beispiele sind abgewiesene Flugstarts aus Gasthäusern,
|
||||
fehlende sichere Landepunkte und unvollständige Bodenanschlüsse.
|
||||
4. **Die Routenwahl berücksichtigt eine Portalbedingung nicht.** Makuran 141 auf
|
||||
Stufe 52 versucht das Portal von Orgrimmar zu den Verwüsteten Landen zu nutzen
|
||||
(Spawn 211298, GO 195142, Spell 65729). Die native Spellbedingung verlangt
|
||||
Stufe 58; sechs Versuche scheiterten. Das Portal erzwingt seine Bedingung
|
||||
korrekt. Der Planer muss sie vor der Auswahl berücksichtigen.
|
||||
5. **Ein Solo-Raidversuch wurde abgewiesen.** Braneven 121 auf Stufe 85 scheiterte
|
||||
am Thron der Vier Winde, Karte 754, Entry 6672, und rastete anschließend. Er
|
||||
war nach einem Austritt mit Grund `leader-afk` gruppenlos. Die native
|
||||
Gruppenzulassung muss genauer geprüft werden. Es wurden keine Bedingungen
|
||||
entfernt oder pauschalen Freischaltungen vorgenommen.
|
||||
6. Es gab 21 nichtfatale kurze Spline-Warnungen mit NPC- und Playerbotbezug. Bei
|
||||
GUID 126 wurden Geistfreigabe und Friedhof-Fallbackbelebung beobachtet, keine
|
||||
Kettentodserie. 38 Gruppenverlassen-Meldungen hatten den Grund `leader-afk`;
|
||||
bei Bots kann dies eine Folge steckengebliebener Leadernavigation sein.
|
||||
|
||||
## Nachweise und Auswertungsgrenzen
|
||||
|
||||
Sichere Messdaten liegen unter `checkpoints/2026-10-30-group-observation/`.
|
||||
`summary.json` enthält Eintritte, Rückkehren, Transportankünfte, Fehlerbeispiele
|
||||
und Messwerte; `findings.json` die gezielten Diagnosen. Vollständige Rohdaten
|
||||
bleiben unter `/tmp/vcore-group-observation-20261030/`. Der Konfigurationsbackup
|
||||
enthält Zugangsdaten und wurde nicht ins Repository kopiert.
|
||||
|
||||
Die Navigationlogs rotieren bei 128 MiB. Die Auswertung umfasst die Archive von
|
||||
02:32:32 und 03:50:52 Uhr sowie die aktive Datei, jeweils auf den Zeitraum von
|
||||
02:20:56 bis 04:00 Uhr gefiltert. Transportmeldungen stehen im Navigationlog.
|
||||
|
||||
`reload config` um 04:00 Uhr öffnete `Server.log` im Schreibmodus neu. Deshalb
|
||||
stammen die Eintritts- und Rückkehrnachweise aus dem auf das Beobachtungsende
|
||||
begrenzten Konsolenmitschnitt. Die Prozesslücke um 02:20:56 Uhr war die anfängliche
|
||||
Startrace, jene um 02:37 Uhr die angekündigte Wartung, kein ungeplanter Ausfall.
|
||||
@@ -0,0 +1,85 @@
|
||||
# Reise- und Gruppenfixes vom 30.10.2026
|
||||
|
||||
## Betriebsgrenze
|
||||
|
||||
Der Nutzer zeichnet am laufenden Testserver Routen auf. Daher ausschließlich
|
||||
Quellcode, lokaler Build mit `-j10` und isolierte Tests; **keine Installation,
|
||||
kein Neustart und keine Änderungen an aufgezeichneten Routen oder Live-Daten**.
|
||||
Die native Instanz-/Raid-Zulassung bleibt erhalten.
|
||||
|
||||
## Änderungen
|
||||
|
||||
- Gruppenwiederherstellung: Ein vorhandener Charakter ohne Gilde ist weiterhin
|
||||
ein gültiges Gruppenmitglied. Nur nicht vorhandene Charaktere werden entfernt;
|
||||
Rollen, Untergruppe und Mitgliedsflags werden regulär wiederhergestellt.
|
||||
- Portalplanung: Ein generischer read-only ConditionMgr-Zugriff bewertet die
|
||||
bereits geladenen Spielerbedingungen für den jeweiligen nativen Portalzauber.
|
||||
Level, Quests, Gegenstände und weitere Spieleranforderungen einschließlich
|
||||
AND/OR-Gruppen, Referenzen und negativer Bedingungen werden berücksichtigt.
|
||||
Die Spielerrolle im nativen Cast bestimmt den geprüften ConditionTarget.
|
||||
Orts-/Kampf-/Skriptbedingungen bleiben bis zur tatsächlichen Benutzung offen.
|
||||
Diese dynamische Prüfung erfolgt vor dem Cache der statischen Gebietserlaubnis
|
||||
und nochmals vor der Benutzung. Keine festen Ersatz-Level, entfernten
|
||||
Bedingungen oder künstlichen Portalteleports.
|
||||
- Deckrückkehr: Aufgezeichnete Ausstiege benötigen kein optionales freies Bordnetz.
|
||||
Auch Kraken und Zeppeline können eine unterbrochene Rampenposition sicher zum
|
||||
aufgezeichneten Stand korrigieren. Weiterhin nur bei stehendem Transport,
|
||||
echter Passagierbindung und genügend verbleibender Haltezeit.
|
||||
- Transportzustand: Ein Fehler bei noch angebundenem Passagier behält die Fahrt
|
||||
und deren Ziel bei, statt sie pro Tick als neue Fahrt zu übernehmen. Kurze
|
||||
Wiederholungsverzögerung; sichere Ausstiegsversuche am nächsten passenden Halt.
|
||||
Die Ausstiegsreserve berücksichtigt auch die aktuelle Steuerungstaktung.
|
||||
- Verlust beim Ein-/Aussteigen: Der erwartete Passagierzustand wird aus dem
|
||||
tatsächlichen Fortschritt der aufgezeichneten Übergangspunkte abgeleitet.
|
||||
Ein beabsichtigtes Erreichen des Landpunkts löst keine Bergung aus; tatsächlicher
|
||||
Verlust kann die bestehende Rettung zum aufgezeichneten Abfahrtsanleger nutzen.
|
||||
- Flugstart: Ein unterstützter Bodenstand in einem Gebäude führt zunächst zur
|
||||
Suche nach einem erreichbaren offenen Abflugpunkt. Bis 200 Yards Suchradius,
|
||||
vollständiger unverdächtiger MMAP-Bodenweg bis 600 Yards, native Außenbereichs-
|
||||
und Kollisionsprüfung sowie Gebietskatalog. Erst dort native Flugmount-Auswahl
|
||||
und Cast. Reitfertigkeit und regionale Flugberechtigungen bleiben erforderlich.
|
||||
- Landung: Mehrere Ringe bis 180 Yards, vollständiger MMAP-Anschluss bis 600 Yards
|
||||
zum Ziel. Ein Höhenunterschied allein schließt einen sicheren Bodenanschluss
|
||||
nicht aus; Wasser-, Kollisions-, Gebiets- und native Pfadprüfungen bleiben.
|
||||
- Kartengrenzen bleiben echte Portal-/Schiffs-/Zeppelinabschnitte. Flug ersetzt
|
||||
weder einen Kartenübergang noch eine native Zugangsvoraussetzung.
|
||||
|
||||
## Temporäre Diagnose
|
||||
|
||||
`ClientlessTravelTelemetry.h` enthält den ausdrücklichen Vermerk
|
||||
`TEMPORARY_ADVENTURE_TRAVEL_TELEMETRY` / vor Entwicklungsabschluss entfernen.
|
||||
|
||||
`TEMP_TRAVEL` protokolliert ausschließlich aktive Instanz-/Raidreisen: Reise-ID,
|
||||
Bot, Gruppe, Anführer, Ziel, Route/Abschnitte, Transportphasen, Portalankunft,
|
||||
Flugzustand und Berechtigungen, Start-/Landekandidaten und Ablehnungszähler,
|
||||
Fortschritt sowie Eingang und das getrennte Ergebnis der nativen Zulassung.
|
||||
Fortschritt höchstens alle 20 Sekunden, gleiche Ereignisdetails innerhalb einer
|
||||
Minute unterdrückt, insgesamt höchstens 40 Zeilen je Bot/Minute. Auch wechselnde
|
||||
Fallback-Ziele setzen dieses Minutenbudget nicht zurück. Offline oder anderer
|
||||
Intent entfernt die Erfassung. Das Verhalten hängt nicht von der Diagnose ab.
|
||||
|
||||
Vor Entwicklungsabschluss diese Instrumentierung und ihre Aufrufstellen entfernen.
|
||||
|
||||
## Prüfung
|
||||
|
||||
109 Clientless-Testprogramme erfolgreich (vollständiger Lauf), einschließlich
|
||||
neuer produktiver Methoden-Harnesses für gildenlose Gruppen, Portalbedingungen,
|
||||
alternative Landeflächen und die begrenzte Telemetrie. Transport-/Abflugtests
|
||||
wurden um unterbrochene Fahrten, Schiffe ohne Bordnetz, Verluste beim Ein- und
|
||||
Aussteigen und die Bodenannäherung aus einem Gebäude erweitert.
|
||||
|
||||
Die Harnesses verwenden deterministische Welt-/Terrain-Doubles. Sie bestätigen
|
||||
Entscheidungen und Zustandsübergänge, ersetzen aber keine Prüfung mit echten
|
||||
VMAP/MMAP-Dateien und fahrenden Schiffen im laufenden Spiel. Durchgängige Reisen
|
||||
zu allen Instanzzielen und das Verhalten der Gruppenmitglieder müssen nach der
|
||||
später freigegebenen Installation mit der neuen Telemetrie beobachtet werden.
|
||||
|
||||
Build: bestehende Debug/Ninja-Konfiguration und Installationspräfix unverändert.
|
||||
Erster `-j10`-Lauf durch getöteten Compilerprozess unter Speicherlast abgebrochen;
|
||||
Wiederholung ebenfalls mit `-j10`. Abschließender `-j10`-Build erfolgreich (exit 0), inklusive der letzten
|
||||
Bodenstützprüfung; Log `/tmp/vcore-travel-fixes-build-final.log`.
|
||||
Rohlogs: `/tmp/vcore-travel-fixes-build*.log`, Testlogs und Ergebnisliste unter
|
||||
`/tmp/vcore-travel-fixes-tests/`. Keine Gameplay-Abnahme behauptet.
|
||||
|
||||
Der vorherige Laufzeitabsturz hat keinen erhaltenen vollständigen Stacktrace;
|
||||
diese Änderungen sind kein Nachweis, dass dessen Ursache behoben ist.
|
||||
@@ -0,0 +1,132 @@
|
||||
# Ursachenanalyse: Raidtest 01.11.2026, 22/23 Uhr
|
||||
|
||||
Nur Diagnose; kein Produktionscode, Botplan, Loader oder Serverzustand geändert.
|
||||
Branch feature/clientless-player-core; vorhandene Checkpoints/WIP erhalten.
|
||||
|
||||
## 1. Bestätigter Aufbruchblocker: falsche Zielvariante
|
||||
|
||||
Vorbereitung verwendete instance_visit_at_6354. BuildInstanceVariants in
|
||||
AdventureLocationMgr.cpp bevorzugt bei Raids mit vorhandener 25er-Normalvariante
|
||||
Difficulty1 für den Basisschlüssel. Difficulty0 wird als _d0 erzeugt.
|
||||
Native MapDifficulty.dbc für Karte671: modes0/1/2/3 haben10/25/10/25 Plätze.
|
||||
Dies wurde direkt aus der installierten DBC gelesen, nicht aus Namen geraten.
|
||||
Die passende 10er-Normalvariante ist instance_visit_at_6354_d0; native Eligibility
|
||||
für Renren bestätigt map671/content1/own1/invitation1 für beide Schlüssel.
|
||||
|
||||
Zusätzliche Inkonsistenz: InstanceCapacity=min(20,maxPlayers) begrenzt die 25er-
|
||||
Variante auf20, während Name und Difficulty bei25 bleiben. GroupPlan übernimmt
|
||||
InstanceCapacity. Complete verlangt exakt Capacity Mitglieder plus Rollen:
|
||||
capacity20 benötigt2T/4H/14D; tatsächlich sind10Bots mit2T/2H/6D in Gruppe2.
|
||||
Complete ist somit false, CheckFullGroup aktiviert keinen frühen Abreisehandoff.
|
||||
Um23:00 blockiert Begin vor ResolveInstance/Queue(travel_to_node) in WaitingGroup.
|
||||
Der korrekte Eingangspfad wird folglich gar nicht angefordert. Aktuell alle10
|
||||
im selben raid-Intent/WaitingGroup. Kein Beleg für ein Problem der Bastionroute.
|
||||
|
||||
Der falsche Basisschlüssel war ein Fehler der Testvorbereitung. Die20/25-
|
||||
Inkonsistenz ist ein separater Implementierungsfehler. Ein bloßer Teleport oder
|
||||
Reisereset kann beides nicht beheben. Der vorhandene Variantentest erwartet
|
||||
explizit20 für25er-Modi; Tests decken diese fehlerhafte Semantik daher nicht auf.
|
||||
Keine Tests/Builds in dieser reinen Diagnose gestartet.
|
||||
|
||||
## 2. Bestätigte Zerstreuungskette: Reiseablehnung und ungebundener Fallback
|
||||
|
||||
Historisches rotiertes Navigationlog:22:00:02 guid159 bei
|
||||
(-8864.300,682.378,97.943), ZielAllison(-8867.790,673.673,97.986).
|
||||
NAV_PLAN calculated1/complete1/type0x1, Weg9.38yd,4Punkte,maxZDelta0.03,
|
||||
finalDistance0.08 und reason ok. NAV_START trotzdem PathRejected.
|
||||
Fünf Recoveryversuche zu anderen Graphankern schlagen ebenfalls fehl;
|
||||
Flugfallback kann den Startplatz nicht erreichen.22:00:04 RECOVERY_FAILED und
|
||||
INTENT_ARRIVAL_REJECT beim vereinbarten Treffpunkt.
|
||||
|
||||
Fallback schützt einen aktiven Instanzbesuch sowie Botgruppenmitglieder mit
|
||||
GroupOverride, aber nicht den Treffpunkt einer Gruppenbildung beim Leader.
|
||||
Er durchsucht ALLE Allowed-Locations und priorisiert andere Maps lediglich mit
|
||||
Distanzaufschlag100000. Es gibt keine Bindung an vereinbarten Treffpunkt,
|
||||
Sturmwind oder aktuelle Hauptstadt. Logs zeigen Allison->GildedRose->weitere
|
||||
SW-Orte->Eisenschmiede->andere Hauptstädte, insgesamt37 Ersatzwahlen beim Leader.
|
||||
AdoptGroup übernimmt jeweils den Laufzeitzustand des Leaders. Mitglieder
|
||||
beenden laufende Taxi/Flug/Transport-Schritte vor dem Wechsel; deshalb verfolgen
|
||||
sie zeitversetzt verschiedene alte Ziele und verteilen sich über Kontinente.
|
||||
|
||||
Die genaue geometrische Ursache der ERSTEN PathRejected-Ablehnung ist offen.
|
||||
MMAP hat einen vollständigen Weg geliefert. Nachfolgende Ausführungsprüfungen
|
||||
umfassen AllowsSegment und den für Gruppen installierten GroundPathValidator
|
||||
(Höhenprobe/Steigung/LOS). Beide können ohne präzises NAV_REJECT-Log abbrechen.
|
||||
Die vorhandenen Logs rechtfertigen keine eindeutige Schuldzuweisung an eine
|
||||
bestimmte Höhen-/LOS-Probe. Zur Behebung diesen Ort gezielt reproduzieren und
|
||||
Ablehnungszweig/Koordinaten/erwartete und gemessene Höhe diagnostizieren; keine
|
||||
pauschale Abschaltung von Sicherheitsprüfungen.
|
||||
|
||||
## 3. Zwei beim Stundenwechsel verzögerte Mitglieder
|
||||
|
||||
Um23:00 warteten164/165 noch auf eine Leaderroute für die alte Gruppenbildung.
|
||||
Queue hängt Botmitgliedern route_source an; der Executor wartet bis15Sekunden
|
||||
auf eine geteilte Route, danach erfolgt eigenständige Anschlussplanung.
|
||||
SetWanted fordert während aktiver Reise StopAtNode an; Switching wartet auf
|
||||
Busy=false und führt gegebenenfalls einen Graphknoten-Handover aus.
|
||||
Nachfolgende native Diagnosen: beide travel_to_node stormwind_tradecenter
|
||||
Completed/Arrived und raid/WaitingGroup. Die anfängliche Aussage eines dauerhaften
|
||||
Intent-Hängers ist nicht belegt; das beobachtete Warten war vorübergehend.
|
||||
|
||||
## Gezielte Korrekturen für einen Folgetest
|
||||
|
||||
- Testziel explizit instance_visit_at_6354_d0; Difficulty0/capacity10/2T2H6D
|
||||
zusammen mit nativer Gruppen-Difficulty und Complete überprüfen.
|
||||
- 25er-Modi nicht als20er-Gruppe für einen25er-Raid vollständig melden;
|
||||
konsistente tatsächliche Kapazität oder ausdrückliche Nichtunterstützung.
|
||||
- Formationstreffpunkt beim Leader stabil halten; Fehlschlag führt zu lokaler
|
||||
Wiederholung/Diagnose, nicht automatischem Hauptstadtwechsel.
|
||||
- Anfangsablehnung in GoldenerRose mit genauer Ausführungsdiagnostik reproduzieren.
|
||||
- Regressionen für vollständige10er-Gruppe/früheAbreise, Treffpunktbindung bei
|
||||
Reisefehler, Stundenwechsel mit ausstehender geteilter Route und20/25-Konsistenz.
|
||||
|
||||
Belege: checkpoints/2026-11-01-raid-2200/initial-navigation-failure.log,
|
||||
investigation-console.log, reset-console.log und verified-db.tsv. Server.log
|
||||
enthält die Formation-Fallbacks und Mergefolge. Gameplay/Instanzanreise unbestätigt.
|
||||
|
||||
## Zusatz: drei Nutzerfragen zu Portalen und Kolonne, ca.23:17–23:21
|
||||
|
||||
1. Eisenschmiede: Portalspawn217855/GO195141/Spell65728 ist gebunden an
|
||||
edge1827 portal_use, enabled1/cost1, vonportal_go_217855_source nach
|
||||
portal_go_217855_target (VerwüsteteLande). Renren erreichte Quelle tatsächlich;
|
||||
23:09:48 folgte laut Log free_flight direkt zurBastion statt portal_use.
|
||||
Start wurde verworfen: no reachable open takeoff point, outdoor0,
|
||||
Diagnosecounter surface/indoor/area/column/mmap/movement=0/0/0/1/63/0.
|
||||
Danach Recovery über virtuelleStraße wird vom safetyAdapter abgelehnt.
|
||||
Also Portalbenutzung in dieser Folge NICHT ausgeführt, keine nachgewiesene
|
||||
native Portalzugangsverweigerung. Replan anQuelle: start->free_flight wiederholt.
|
||||
Plannerportalguard gilt nur isPortalSource && previous enthältCurrentState;
|
||||
Quellknoten alsStartwurzel fällt dadurch aus demGuard. Ein interaktivesPortal
|
||||
teleportiert anders als einAreaTrigger nicht beim bloßenAnlaufen.
|
||||
|
||||
2. Sturmwind-Schattenhochland: spawn200627/GO207694/Spell85545, edge1801,
|
||||
Quelle(-8186.15,413.729,116.75), Ziel(-4890.07,-6626.74,10.2846), map0.
|
||||
Enabled1/cost1. DB zeigt KEINE eingehende festeKante zurQuelle. Zurückliegender
|
||||
Livebeleg Elanora16:57:17 benutztPortal nativ mit arrivalError0; Voraussetzungen
|
||||
nicht pauschal alsGrund behaupten. Level80+-AdventureUnlock existiert.
|
||||
Aktuelle Route zumBastioneingang: SWtradecenter->taxi2->taxi6->IFportalQuelle,
|
||||
danach freieFlugplanung/Recovery. Nur dynamischerAnschluss kannSWPortal
|
||||
verbinden (allgemeineBrücken max200yd, Flugkandidaten16/Plan und6/Ursprung).
|
||||
Offline geometrische Kandidatenrangberechnung OHNEArea/Prereq/FlightFilter:
|
||||
SWportalQuelle steht vonSWtradecenter sowietaxi2 sogar aufRang1 der
|
||||
Makrokandidaten. Damit ist reineDistanzsortierung NICHT alsAblehnungsgrund
|
||||
belegt. Es fehlen personenbezogene Logs zu Kandidatenbudget/Estimate-Ablehnung
|
||||
und Folgeverbindung abPortalziel. Exakten verlorenenRoutenvergleich erst mit
|
||||
gezieltemPlantrace behaupten. Keine Runtimeplanung/Teleport zuTest erzwungen.
|
||||
|
||||
3. Kolonne: AdventureInteractionMgr kehrt beiBotLed vorGroupTravelMgr::Follow
|
||||
zurück. Botgruppenmitglieder adoptierenExecutorroute (AdoptRoute), teilen also
|
||||
Makroziel/Route, nicht automatisch individuellePositionen. Die allgemeine
|
||||
Formation()/Follow-Steuerung wird dabei nicht verwendet. AdaptRoad läuft
|
||||
nur imStartRecordedEdgePath, nicht für lokaleMMAP-Zuläufe/local_bridge/start.
|
||||
AdaptRoad erhält den gemeinsamenEndpunkt; wennSeitversatz unsicher ist, zweiter
|
||||
Versuch mitside0. Damit kann selbstStraßenadapter aufgleicheLinie zurückfallen.
|
||||
NativeTaxiflüge haben identischen nativenPfad ohne separateKolonnenversätze.
|
||||
EigeneFreeFlight hat sharedTrail mit3.5s+slot*0.6s Startverzögerung nur wenn
|
||||
passenderLeaderflightRecord mit gleichemZiel vorhanden. Kein allgemeiner
|
||||
Abstandsregler über alleReisemodi; keinePortalWarteaufstellung.
|
||||
Nutzerbeobachtung desÜbereinanderlaufens passt zu diesen Integrationslücken;
|
||||
keinBeleg, dass jedeFormationkomponente deaktiviert wäre.
|
||||
|
||||
Belege Zusatz: ironforge-portal-route-evidence.log; Sourceprüfung der erwähnten
|
||||
Methoden und nur lesendeWorldDB-Abfragen. KeineBot-/Codeänderung/Build/Restart.
|
||||
@@ -0,0 +1,72 @@
|
||||
# Testauswertung: 02.11.2026, Gruppenbildung 06:00 / Instanzen 07:00
|
||||
|
||||
Erstellt: 02.11.2026 08:00:09 CET. Geplanter Auswertungszeitpunkt: 08:00 UTC+01:00.
|
||||
|
||||
- Geprüfte Testbots: 92. Unter Stufe 15 ausgenommen: 18.
|
||||
- Feste Treffpunkte: Allianz Goldene Rose in Sturmwind; Horde Broken Tusk in Orgrimmar.
|
||||
- Status-Snapshots: 22; ausgewertete eindeutige Logereignisse: 16592.
|
||||
- Erste erfasste Statusstichprobe: 2026-11-02T06:13:38.615403+01:00; frühere Ereignisse sind nicht vollständig erfasst.
|
||||
- Bots mit belegter Ankunft am festgelegten Formationstreffpunkt: 40.
|
||||
- Bots mit protokolliertem tatsächlichem Instanzbeitritt: 0.
|
||||
- Snapshots ohne laufenden Testserver: 0.
|
||||
|
||||
## Bekannte Zehnergruppe: Bastion des Zwielichts, normal
|
||||
|
||||
- Maximal gemeinsam in einer nativen Gruppe beobachtet: 9/10.
|
||||
- Alle zehn gemeinsam nachgewiesen: nein; durch die Stichproben nicht nachgewiesen.
|
||||
- Bots mit Instanzplanung: 9/10; mit tatsächlichem Beitritt zu Karte 671 im Modus 0: 0/10.
|
||||
|
||||
| GUID | Name | Rolle | Bastion betreten | Letzter nativer Status |
|
||||
|---:|---|---|---|---|
|
||||
| 159 | Renren | damage | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / instance visit waiting for safe native state |
|
||||
| 160 | Marndra | damage | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 161 | Marnda | healer | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 162 | Aruendas | healer | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 163 | Winienwi | damage | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 164 | Taliaarnora | damage | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 165 | Brynda | damage | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 166 | Corric | damage | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / waiting for a suitable group / native browser queue |
|
||||
| 167 | Ragnorli | tank | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
| 176 | Ashaelri | tank | nicht nachgewiesen | raid / instance_visit_at_6354_d0 / travelling to instance_visit_at_6354_d0 |
|
||||
|
||||
## Übernahme der Anführerroute
|
||||
|
||||
- Protokollierte Routenübernahmen mit Journey-Seed: 78.
|
||||
- Gleicher zuletzt beobachteter Anführer-Seed: 72; abweichend: 4; Anführer-Seed im Beobachtungsfenster nicht bekannt: 2.
|
||||
- Ein abweichender letzter Seed erfordert Prüfung der konkreten Reise und des Zeitpunkts; diese Zählung allein beweist keinen Fehler.
|
||||
|
||||
## Fehler und Reiseereignisse
|
||||
|
||||
- GROUP_MERGE: 28.
|
||||
- GROUP_MANAGER_RUN: 9.
|
||||
- GROUP_EARLY_DEPART: 15.
|
||||
- PORTAL_USE_START: 36.
|
||||
- RECOVERY_FAILED: 117.
|
||||
- INSTANCE_TRAVEL_RETRY: 11.
|
||||
- INSTANCE_ENTRY_DENIED: 0.
|
||||
|
||||
Häufigste protokollierte Fehler:
|
||||
|
||||
- RECOVERY_FAILED: route-local-PathRejected (26 Ereignisse).
|
||||
- RECOVERY_FAILED: free-flight-unavailable: safely returned after abort: no safe bounded flight corridor; holding position mounted (15 Ereignisse).
|
||||
- RECOVERY_FAILED: free-flight-unavailable: departure-unavailable: ground approach interrupted (12 Ereignisse).
|
||||
- RECOVERY_FAILED: free-flight-unavailable: no free solid landing with a validated target approach (12 Ereignisse).
|
||||
- INSTANCE_TRAVEL_RETRY: siehe Rohlog (11 Ereignisse).
|
||||
- RECOVERY_FAILED: deferred-start-movement-failed (9 Ereignisse).
|
||||
- RECOVERY_FAILED: deferred-start-no-progress (7 Ereignisse).
|
||||
- RECOVERY_FAILED: final-local-PathRejected (6 Ereignisse).
|
||||
- RECOVERY_FAILED: deferred-start-endpoint-replan (6 Ereignisse).
|
||||
- RECOVERY_FAILED: wander-ended-Arrived (4 Ereignisse).
|
||||
- RECOVERY_FAILED: deferred-start-attempts-exhausted (4 Ereignisse).
|
||||
- RECOVERY_FAILED: recorded group road rejected by safety adapter (4 Ereignisse).
|
||||
|
||||
## Grenzen der Auswertung
|
||||
|
||||
- Ausgewertet werden technische Zustände und native Logereignisse; keine visuelle Gameplay-Abnahme und keine Bestätigung von Bosskämpfen.
|
||||
- Ein Reiseplan ist kein Ankunftsnachweis. Fehlende Ereignisse werden als nicht nachgewiesen ausgewiesen.
|
||||
- Die Gruppenmitgliedschaft und Zustände werden alle fünf Minuten stichprobenartig gelesen; kurzlebige Zwischenzustände können fehlen.
|
||||
- Charakterpositionen aus DB-Snapshots sind zuletzt gespeicherte Positionen. Live-Reisepositionen stehen in den TEMP_TRAVEL-Ereignissen.
|
||||
- Der Beobachter repariert, teleportiert oder startet den Server nicht. Ausfälle werden dokumentiert.
|
||||
- Letzter Snapshot: 2026-11-02T07:59:25.206244+01:00.
|
||||
|
||||
Rohdaten: doc/clientless/checkpoints/2026-11-02-0600-group-test/ (manifest.json, snapshots.jsonl, events.jsonl, snapshot-*.log).
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,158 @@
|
||||
# Veränderbarer Gebietskatalog der AdventureBots
|
||||
|
||||
Der Katalog liegt in der **World-Datenbank**, nicht in C++ oder in den Nodes.
|
||||
Migration: `sql/custom/world/2026_10_29_02_adventure_area_catalog.sql`.
|
||||
Sie setzt die bestehende Migration `2026_10_29_00_adventure_population.sql`
|
||||
mit `vcore_adventure_zone` voraus. Erneutes Einspielen erhält vorhandene Einträge.
|
||||
|
||||
## Stand und Geltungsbereich
|
||||
|
||||
Die Regeln sind in Tagesplanung, TravelGraph und Bewegungsausführung angebunden.
|
||||
`clientless adventure reload` lädt Gebiets- und Nodefreigaben sowie Location- und
|
||||
TravelGraph-Kataloge im laufenden Betrieb neu. Spätere Änderungen benötigen
|
||||
keinen Build, keine Installation und keinen Neustart. Ungültige Gebietskataloge
|
||||
(z.B. Elternzyklen oder unzulässige Masken) werden vor Austausch des aktiven
|
||||
Snapshots abgewiesen.
|
||||
|
||||
Neue Tagespläne wählen nur zulässige Locations. Bestehende Tagespläne werden
|
||||
beim Einloggen und nach erfolgreichem Reload geprüft: Unzulässige Ziele werden
|
||||
ersetzt und gespeichert; Intents und Stunden bleiben erhalten. Sind keine
|
||||
zulässigen Ziele vorhanden, bleibt das Ziel leer, statt eine Sperre zu umgehen.
|
||||
Die aktuelle Mikroaktion oder ein bereits gestarteter nativer Transport wird
|
||||
nicht mitten in einer Bewegung gewaltsam abgebrochen. Neue Reiseabschnitte
|
||||
werden erneut geprüft. Ein bereits in einem gesperrten Gebiet stehender Bot wird
|
||||
nicht automatisch teleportiert; diese Regeln ersetzen keine eigene Bergungslogik.
|
||||
|
||||
Die Regeln betreffen ausschließlich autonome AdventureBots. Sie sperren keine
|
||||
Gebiete für menschliche Spieler und verändern weder DBC noch NPC-Fraktionen.
|
||||
|
||||
## Inhalt
|
||||
|
||||
`vcore_adventure_map_catalog` enthält Karten-ID, Anzeigename, Kartentyp und
|
||||
Erweiterung. Kartentyp 255 markiert alte Gebiete ohne vorhandenen Map.dbc-Eintrag.
|
||||
Solche Gebiete sind ausdrücklich gesperrt. Dungeon-/Raid-/Schlachtfeldkarten
|
||||
bleiben gekennzeichnet und werden nicht als normale offene Welt behandelt.
|
||||
|
||||
`vcore_adventure_area_catalog` enthält alle Gebiete und Untergebiete aus der
|
||||
lokalen Cataclysm-4.3.4-AreaTable.dbc, mit Namen, Karten-ID und Elterngebiet.
|
||||
Die Namen sind hier deutsch; die stabile Referenz ist immer die numerische ID.
|
||||
|
||||
| Spalte | Bedeutung |
|
||||
| --- | --- |
|
||||
| `area_id` | Native AreaTable-ID, auch für übergeordnete Zonen |
|
||||
| `parent_area_id` | Übergeordnetes Gebiet; 0 bedeutet Wurzelgebiet |
|
||||
| `allowed_factions` | NULL: erben; 0: gesperrt; 1: Allianz; 2: Horde; 3: beide |
|
||||
| `min_level`, `max_level` | Empfohlener Levelbereich; NULL: erben/unbekannt |
|
||||
| `max_level_gap` | Erlaubter Abstand unter der Mindeststufe; NULL: erben, Standard 5 |
|
||||
| `prefer_flight` | NULL: erben; 0: normale Reisegewichtung; 1: erlaubte Flüge bevorzugen |
|
||||
| `notes` | Frei bearbeitbare Begründung/Notiz |
|
||||
|
||||
Die Mindeststufe ist eine untere Zugangsgrenze mit der angegebenen Toleranz.
|
||||
`max_level` sperrt höherstufige Bots nicht aus ihren Heimatgebieten aus.
|
||||
Die vorhandenen, manuell gepflegten Levelbereiche aus `vcore_adventure_zone`
|
||||
werden beim Import übernommen. Unbekannte Bereiche bleiben NULL, statt einen
|
||||
nicht belegten sicheren Levelbereich vorzutäuschen. Unbekannte Freilandbereiche sind unter Stufe85 gesperrt.
|
||||
|
||||
## Verbindliche Hierarchie
|
||||
|
||||
Alle Vorfahren eines Gebiets sind zu berücksichtigen. Fraktionsfreigaben werden
|
||||
geschnitten: Ein Kind mit Freigabe 3 kann einen gesperrten Elternbereich nicht
|
||||
freigeben. Dasselbe gilt anschließend für einen neutralen Node in einem
|
||||
fraktionsgesperrten Gebiet. Ein Node darf zusätzliche Einschränkungen besitzen,
|
||||
aber die Gebietsfreigabe nicht erweitern. Die geltende Reihenfolge ist
|
||||
**Karte vorhanden → Gebiet samt Vorfahren → Node → Verbindung/Transport**.
|
||||
|
||||
NULL bedeutet Vererbung, ausdrücklich 0 bedeutet bei Fraktionen Sperre und bei
|
||||
Flugpräferenz normale Gewichtung. Flugpräferenzen ersetzen keine Reitfähigkeit,
|
||||
Fluglizenzen, nativen Flugverbote oder Kollisionsprüfung. Sichere Endpunkte
|
||||
allein reichen nicht für sichere Wege: Zwischengebiete müssen ebenfalls geprüft
|
||||
werden. Ein bereits in einem gesperrten Gebiet stehender Bot braucht einen
|
||||
gesonderten sicheren Ausweg, statt die Sperre für reguläre Reisen aufzuheben.
|
||||
|
||||
## Voreinstellungen
|
||||
|
||||
- Rassische Startregionen und Hauptstädte haben Fraktionsfreigaben. Darunter
|
||||
Dun Morogh/Elwynn/Teldrassil/Azur- und Blutmythosinseln/Gilneas für Allianz
|
||||
sowie Durotar/Tirisfal/Mulgore/Immersangwald/Geisterlande/Kezan/Verlorene Inseln
|
||||
für Horde. Die zugehörigen Hauptstädte sind ebenfalls eingetragen.
|
||||
- Vashj'ir (5146) ist für alle gesperrt. Tang'tharwald (4815), Schimmernde Weiten
|
||||
(5144) und Abyssische Tiefen (5145) erben diese Sperre über die echte DBC-Hierarchie.
|
||||
- Die Scherbenweltgebiete einschließlich Shattrath, Nordend sowie Hyjal,
|
||||
Tiefenheim, Uldum, Schattenhochland und Tol Barad bevorzugen erlaubtes Fliegen.
|
||||
Native Flugverbote haben stets Vorrang. Karte 530 wird bewusst nicht pauschal
|
||||
als Scherbenwelt behandelt: Sie enthält auch die Blutelfen-/Draenei-Startgebiete.
|
||||
|
||||
Tiefenbahn und Schiff Sturmwind–Rut'theran haben explizite Allianz-Nodefreigaben.
|
||||
Hauptstadtportale werden über ihre Zielgebiete gesperrt; auch neutrale Quellnodes
|
||||
können diese Sperre nicht umgehen.
|
||||
|
||||
## Nodefreigaben
|
||||
|
||||
Migration: `sql/custom/world/2026_10_29_03_adventure_node_access.sql`.
|
||||
`vcore_clientless_node_access` erlaubt für jeden Node eine zusätzliche
|
||||
`allowed_factions`-Maske mit gleicher Bedeutung wie bei Gebieten. NULL bedeutet
|
||||
keine manuelle Einschränkung. Neue Nodes können über INSERT ergänzt werden.
|
||||
Die Tabelle enthält initial alle vorhandenen Nodekeys.
|
||||
|
||||
Flugknoten werden bei jedem Reload automatisch einem Flugmeister im Umkreis von
|
||||
100 Yards zugeordnet. Maßgeblich sind die Fraktionsvorlagen der NPCs und ihre
|
||||
Feindseligkeit gegenüber Allianz/Horde; neutrale Flugmeister erlauben beide.
|
||||
Unklare Zuordnungen bleiben gesperrt. `flightmaster_spawn_id` ermöglicht eine
|
||||
explizite Zuordnung zu einem bestimmten NPC-Spawn innerhalb dieses Umkreises.
|
||||
Manuelle Masken können native NPC-Freigaben weiter einschränken, nicht erweitern.
|
||||
Die tatsächlich berechnete Maske ist im Diagnosebefehl als `nodeMask` sichtbar.
|
||||
|
||||
```sql
|
||||
UPDATE vcore_clientless_node_access SET allowed_factions=1
|
||||
WHERE node_key='mein_node';
|
||||
```
|
||||
|
||||
Nach einer Änderung an Gebieten oder Nodes in der Serverkonsole:
|
||||
|
||||
```text
|
||||
clientless adventure reload
|
||||
clientless adventure area 26 taxi_11
|
||||
```
|
||||
|
||||
Die Diagnose zeigt für den angegebenen Online-Bot das aufgelöste Gebiet,
|
||||
Fraktionsmaske, Levelgrenze, Flugpräferenz, Nodefreigabe und Gesamterlaubnis.
|
||||
Ohne Nodekey wird die aktuelle Position geprüft. Die Zahl26 ist hier nur ein
|
||||
Beispiel für Arthoran; der Befehl funktioniert mit jedem Online-AdventureBot.
|
||||
|
||||
Gespeicherte Bodenwege und lokale MMAP-Wege werden an ihren Wegpunkten und
|
||||
zusätzlich mit maximal40Yards Abstand geprüft. Flugtaxiwege berücksichtigen ihre
|
||||
nativen Wegpunkte, freie Flüge ihre geplanten und tatsächlich gestarteten
|
||||
Abschnitte. Virtuelle Graphverbindungen verwenden dieselben Prüfungen, auch bei
|
||||
zwischengespeicherter Weggeometrie. Diese räumliche Abtastung ist keine mathematisch
|
||||
lückenlose Prüfung jedes einzelnen Grenzpunkts. Schiffs-/Tiefenbahnfahrten prüfen
|
||||
beide Haltestellen und Nodefreigaben statt einen Bodenweg quer durch das Meer.
|
||||
|
||||
|
||||
## Bearbeitung ohne Neukompilierung
|
||||
|
||||
Beispiel: Gebiet und seine unmittelbar untergeordneten Gebiete ansehen:
|
||||
|
||||
```sql
|
||||
SELECT * FROM vcore_adventure_area_catalog
|
||||
WHERE area_id=5146 OR parent_area_id=5146;
|
||||
```
|
||||
|
||||
Beispiel: Flugpräferenz und Leveltoleranz eines Gebiets bearbeiten:
|
||||
|
||||
```sql
|
||||
UPDATE vcore_adventure_area_catalog
|
||||
SET prefer_flight=1, max_level_gap=5, notes='Flugreisen bevorzugen'
|
||||
WHERE area_id=616;
|
||||
```
|
||||
|
||||
Nicht die generierte SQL-Datei erneut einspielen, um vorhandene Zeilen zu ändern:
|
||||
`INSERT IGNORE` bewahrt absichtlich Betreiberanpassungen. Stattdessen gezielte
|
||||
UPDATEs verwenden. Die alte Leveltabelle dient nur noch als Importquelle; der laufende Server
|
||||
verwendet die Levelbereiche dieses Katalogs. Änderungen der alten Tabelle
|
||||
werden nicht automatisch in diesen Katalog kopiert.
|
||||
|
||||
Die Ausgangsdaten lassen sich ohne DB-Verbindung reproduzieren:
|
||||
|
||||
```bash
|
||||
python3 contrib/clientless/export_area_catalog.py /pfad/zu/dbc/deDE /tmp/area-catalog.sql
|
||||
```
|
||||
@@ -0,0 +1,14 @@
|
||||
# Portals to the Blasted Lands
|
||||
|
||||
Enabled on the test world database on 2026-10-29 using the existing native importer:
|
||||
|
||||
```text
|
||||
clientless portal object import 219963
|
||||
clientless portal object import 211359
|
||||
clientless portal object import 211298
|
||||
clientless adventure reload
|
||||
```
|
||||
|
||||
Stormwind spawn 219963 (entry 195141, spell 65728); Orgrimmar spawns 211359 and 211298 (entry 195142, spell 65729). The coincident Orgrimmar spawn 218904 is intentionally not duplicated in the graph. Source node ACLs are 1 (Alliance) and 2 (Horde), respectively, in `vcore_clientless_node_access`. Destination nodes retain the shared Blasted Lands area policy. Native spell destinations are used, with one-way click edges and no invented teleport. Existing graph enabled flags are preserved by repeated imports.
|
||||
|
||||
Bindings verified in the database (edges 1758–1760); native importer confirms active graph bindings. End-to-end traversal is pending gameplay verification. No C++ changes or binary installation. The server was already stopped when activation began; recovered with a fresh startup, ready marker and both 8085/8087 listeners verified. Console: `/tmp/vcore-portal-enable-start-20261029.log`.
|
||||
@@ -0,0 +1,143 @@
|
||||
# Autonomous AdventureBot groups
|
||||
|
||||
Bot groups use native invitations, party membership, leadership, raid conversion,
|
||||
instance bindings and persistence. The first inviter becomes leader. Human-led
|
||||
groups retain the existing interaction/follow behavior. A human invitation to an
|
||||
already grouped bot acts as a join request: a bounded GUID-only CPC notification
|
||||
lets the bot leader offer a reverse native invitation, subject to personality,
|
||||
faction and capacity. Once the player joins, native leadership is transferred to
|
||||
the human and bots switch to the existing player-led behavior. This does not
|
||||
parse player chat or forcibly remove any member. Role assignment, healer
|
||||
or tank AI, and replacement of absent players remain separate work.
|
||||
|
||||
## Recruitment and preparation
|
||||
|
||||
Adventure, compatible professions, social, instance and raid intents recruit.
|
||||
Local encounters require phase, visibility, LOS and25-yard proximity. A lone bot
|
||||
may request admission to an existing matching group; its leader sends the native
|
||||
invitation. A leader may recruit individual bots. Recruitment and acceptance are
|
||||
personality dependent, with20–40 seconds between searches,2–4 seconds for native
|
||||
invite responses (provisional native leaders never answer their own invite) and a10-minute pair cooldown. Dead/combat/fleeing/transit bots do
|
||||
not recruit. Same faction and an inclusive five-level spread are required.
|
||||
Profession groups need a common primary profession.
|
||||
|
||||
`groupformation` prepares the next hour's intent in a capital. During this phase,
|
||||
matching NEXT intents are required, not matching original destinations. The
|
||||
leader's existing formation location becomes the meeting point; members inherit
|
||||
it and subsequently inherit the leader's activity target and deadline. Their own
|
||||
stored day plans remain intact and are restored on departure. Departure decisions
|
||||
track the personal plan, so inheriting a different group destination is not
|
||||
misinterpreted as an intent change. Unexpired manual
|
||||
activities are restored too; expired manual activities end. New day generation inserts
|
||||
preparation before instance/raid blocks, and probabilistically before other
|
||||
eligible blocks; backwards processing prevents preparations preparing another
|
||||
preparation. Existing stored days are preserved.
|
||||
|
||||
The faction-separated native custom channel `sucheNachGruppe` carries bounded
|
||||
recruitment and response messages across capitals. The manager pairs structured
|
||||
bot plans; it never interprets player chat. Opposite-faction channel traffic is
|
||||
not used. Capital zones include racial capitals, Shattrath and Dalaran.
|
||||
Announcements currently use German RP text.
|
||||
|
||||
Recruitment capacity includes the leader and pending invitations: instance5,
|
||||
raid20, social10, adventure/profession3. Groups larger than five use native raid
|
||||
membership. Full groups stop searching. These are intent-specific recruitment
|
||||
limits; when the leader chooses a smaller activity, excess bot members depart
|
||||
at a safe point before recruitment continues. Native map admission limits and existing/permanent lockouts remain
|
||||
in force. Raid preparation requests the native25-player normal difficulty; the catalog
|
||||
uses native downscaling and requires capacity for at least20 members, excluding
|
||||
ten-player-only raid maps. Legacy20/40-player raids remain possible.
|
||||
No role guarantees are implied.
|
||||
|
||||
Preparation never waits for a full group or for members to arrive. The leader's
|
||||
next intent starts on its ordinary deadline. Late members catch up. Formation
|
||||
suppresses the AFK/inactivity departure timer and refreshes its baseline; the
|
||||
planned formation-to-activity transition is exempt from intent-change departure.
|
||||
Later changes retain the existing loyalty-based departure behavior, deferred in
|
||||
combat/instances/transit. Native removal handles leadership and party dissolution.
|
||||
|
||||
### Final formation manager
|
||||
|
||||
During the final ten minutes of `groupformation`, a deterministic fallback runs
|
||||
every 30 seconds. It prefers the largest compatible bot-led group, fills only its
|
||||
currently missing roles, and may move a bot out of a smaller incomplete bot-led
|
||||
group. Human-led and browser/LFG groups are never reorganized. Every transfer is
|
||||
revalidated against faction, the inclusive five-level range, profession rules,
|
||||
the leader's chosen destination, that destination's level/access restrictions,
|
||||
area policy and native capacity. Level 85 is an isolated matching category: a
|
||||
level-85 bot is only consolidated with other level-85 bots. This is a greedy
|
||||
fallback intended to maximize complete groups without replacing normal social
|
||||
formation; it does not claim a globally optimal partition.
|
||||
|
||||
The ordinary five-minute gathering/departure rule remains authoritative. A
|
||||
complete group can therefore finish consolidation by minute 50 and gather from
|
||||
minute 55. At the block boundary, groups still incomplete use the configured
|
||||
browser behavior and do not begin an overland dungeon or raid journey. The
|
||||
manager never changes stored day-plan slots or a group's leader target.
|
||||
|
||||
GM diagnostics and explicit test fallback are available as
|
||||
`clientless groupmanager preview`, `clientless groupmanager run`, and
|
||||
`clientless groupmanager status`. `run` uses the same access, role, faction and
|
||||
transfer checks but deliberately ignores the ten-minute time gate; it does not
|
||||
override human leadership or native admission rules.
|
||||
|
||||
## Shared travel and instances
|
||||
|
||||
Followers run their AdventureBehavior controller with the leader's effective
|
||||
intent/location/deadline, keeping their personal daily schedule. After arrival,
|
||||
non-instance followers use native checked local following instead of independently
|
||||
performing unrelated micro-actions. Leaders continue their own activities.
|
||||
|
||||
Generic CPC travel actions accept `route_source=<native-group-leader-guid>`.
|
||||
The executor copies the leader's route edges and final local destination, keeping
|
||||
execution/transport state separate. Late arrivals plan a native approach to the
|
||||
shared route's previous reached node and replay the remaining edges. A bounded
|
||||
15-second wait handles follower actions processed before the leader plans. If no
|
||||
matching macro snapshot exists (including a local-only leader leg), the ordinary
|
||||
native catch-up planner runs; this is not a synthetic transfer or an absolute
|
||||
formation guarantee. Individual permissions/path failures still use native
|
||||
travel recovery. `TRAVEL_SHARED_ROUTE` provides evidence of actual copying.
|
||||
|
||||
Free-flight members with the same target consume the leader's published flight
|
||||
segments. Each member mounts normally and rechecks its own collision corridor.
|
||||
A shared trail survives leader arrival/new planning through shared ownership.
|
||||
Waiting for additional published points holds flight position; an aborted or
|
||||
blocked trail uses existing checked breadcrumb return. No position, speed or
|
||||
flight-license cheat is introduced. `FLIGHT_SHARED_TRAIL` marks attachment.
|
||||
|
||||
`raid` selects only native raid-map entrances; `instance` excludes them. These
|
||||
are verified from native map data through the existing entrance catalog rather
|
||||
than name matching. Both use the existing remainder-of-block visit and final
|
||||
five-minute outside rest, individual0–50% maximum-health loss, save/restart and
|
||||
native portal return. Native group binding supplies the shared instance copy;
|
||||
unrelated shared solo bindings remain rejected. Members do not use separate
|
||||
synthetic private copies.
|
||||
|
||||
Only the group leader initiates personality/intent-driven PvP. Other bots assist
|
||||
through the existing damage executor. All group members retain the absolute rule against tactical fleeing,
|
||||
regardless of health or level.
|
||||
|
||||
## Operations and verification
|
||||
|
||||
Apply `sql/custom/world/2026_10_28_01_adventure_groups.sql`; it is idempotent and
|
||||
preserves edited weights/current day plans. No character migration is needed.
|
||||
`clientless adventure reload` reloads catalog data.
|
||||
|
||||
Diagnostics: `clientless interaction <guid> leave` performs a safe native
|
||||
departure/cancels a pending invite for test cleanup. `clientless interaction <guid>` includes next intent, formation,
|
||||
capacity, bot leadership and own plan location. `clientless adventure plan <guid>`
|
||||
shows stored day slots. `clientless adventure prepare <guid> <next-intent>
|
||||
<capital-location> [seconds]` stages a manual preparation, with a chosen normal
|
||||
next destination, lasting30–3600 seconds and followed by a one-hour activity.
|
||||
It uses normal navigation, invitations and execution, and can start incomplete.
|
||||
Manual preparations are runtime test state, not restart-persisted day plans.
|
||||
|
||||
Automated fixtures execute production recruitment, provisional-leader invite
|
||||
handling, full world-tick behavior clocks in bot groups, player admission and
|
||||
leadership, inheritance, instance
|
||||
lifecycle, map-type filtering, route adoption and flight-trail geometry. They
|
||||
cover different original destinations, singleton admission, native inviter
|
||||
leadership, caps/pending reservations, raid conversion, protected transition,
|
||||
unchanged personal plans, preparation deadlines, shared edges/free flight,
|
||||
collision and abort behavior. Full native live group trips,20-member raids,
|
||||
real AFK duration and visual gameplay remain acceptance tests for the user.
|
||||
@@ -0,0 +1,139 @@
|
||||
# AdventureBot-Gruppen, Browser und PvP
|
||||
|
||||
Stand: Implementierung gebaut (-j10), alle120Clientless-Tests erfolgreich; noch nicht installiert/live abgenommen.
|
||||
Dungeon-, Raid- und PvP-Intents verwenden die bestehenden Tagespläne. `pvp` ist
|
||||
neu und wird bei der Profilerzeugung als gewichtete Aktivitätspräferenz angeboten.
|
||||
Bestehende Profile können `activity_affinity.pvp` ausdrücklich setzen; sonst gilt
|
||||
im Planer ein kleiner, durch Aggression gewichteter Standardwert.
|
||||
|
||||
## Abreise und Rollen
|
||||
|
||||
Dungeon-/Raidbesuche starten selbstständig erst mit vollständiger geeigneter
|
||||
Gruppe. Dungeonrollen:1Tank,1Heiler,3DD. Raidrollen richten sich nach der
|
||||
bestehenden Zielkapazität: bis10Mitglieder2/2/6,20Mitglieder2/4/14,
|
||||
25Mitglieder2/6/17. Die bereits vorhandenen Kapazitätsgrenzen der Locations
|
||||
bleiben maßgeblich. Profile legen Botrollen fest, Spielerrollen werden aus
|
||||
vorhandenen Gruppenrollen beziehungsweise ihrer Spezialisierung ermittelt.
|
||||
|
||||
Die erste tatsächliche Abreise gibt die gesamte Botgruppe für den laufenden
|
||||
Intent frei. Spätere Austritte und Rollenlücken stoppen diese Reise nicht und
|
||||
lösen keinen Browserwechsel aus. Gespeicherte laufende Instanzbesuche werden
|
||||
weiterhin wiederaufgenommen. Spielergeführte Gruppen folgen ihrem Spieler;
|
||||
Bots melden diese Gruppen nicht eigenmächtig an.
|
||||
|
||||
Unvollständige Botgruppen und einzelne Bots warten am aktuellen Ort und melden
|
||||
sich bei zulässigem Browser an. Native Prüfungen für Level, Erweiterung,
|
||||
Gegenstandsstufe, Zugänge, Sperren, Rollen und Accountrechte bleiben erhalten.
|
||||
Die lokalen Cataclysm-DBC-Daten enthalten die Drachenseele-Flügel416/417 als
|
||||
Stufe85-Angebote mit2Tanks,6Heilern und17DDs. Ihr TypeID ist1 (Dungeon), die Karte
|
||||
ist jedoch ein Raid. Die Botregeln unterscheiden deshalb anhand der tatsächlichen
|
||||
Karte; sie behandeln diese Angebote nicht versehentlich als Fünfer-Dungeons.
|
||||
Die native Anmeldung dieser Type1-Flügel nutzt die vorhandene Dungeonfinder-
|
||||
Berechtigung, nicht den separaten Legacy-Raidbrowser-Schalter. Der Bot-Schalter
|
||||
für Raidbeitritt bleibt trotzdem anhand der tatsächlichen Raidkarte wirksam.
|
||||
`DungeonFinder.OptionsMask` wurde nicht verändert.
|
||||
Die Browserwahl verwendet zugängliche Angebote, nicht zwangsläufig das vorher
|
||||
im Tagesplan ausgewählte Reiseziel. Rolle und Angebot werden nativ bestätigt;
|
||||
Vermittlung und Teleport bleiben Aufgaben des vorhandenen Cores.
|
||||
|
||||
## Schalter
|
||||
|
||||
| Konfiguration | Standard |
|
||||
|---|---:|
|
||||
|Clientless.Browser.Dungeon.QueueEnabled|1|
|
||||
|Clientless.Browser.Dungeon.JoinEnabled|1|
|
||||
|Clientless.Browser.Raid.QueueEnabled|1|
|
||||
|Clientless.Browser.Raid.JoinEnabled|0|
|
||||
|Clientless.Browser.Battleground.QueueEnabled|1|
|
||||
|Clientless.Browser.Battleground.JoinEnabled|0|
|
||||
|Clientless.Browser.AllowBotOnlyTests|0|
|
||||
|
||||
`QueueEnabled` erlaubt das Anmelden. `JoinEnabled` erlaubt es, Bots tatsächlich
|
||||
in eine vermittelte Besetzung aufzunehmen. Bei abgeschaltetem Beitritt bleiben
|
||||
sie in der Suche, werden aber nicht in Angebote für Spieler eingerechnet und
|
||||
reservieren keine Plätze in startenden Partien.
|
||||
|
||||
Im Normalbetrieb braucht jede vermittelte Besetzung mindestens einen echten,
|
||||
verbundenen Spieler. Ein nach Verbindungsabbruch noch vorhandener Registereintrag
|
||||
reicht nicht: Die Realm-Verbindung muss offen sein. Die zweite Verbindung darf
|
||||
beim regulären Instanztransfer wechseln. Eine beliebige Person in einer anderen Warteschlange zählt
|
||||
nicht. Prüfung erfolgt vor dem Angebot und vor dem Beitritt erneut. LFG-Gruppen
|
||||
mit Bots erhalten einen echten Spieler als Anführer. Reine Botbesetzungen sind
|
||||
nur mit `AllowBotOnlyTests=1` möglich; zusätzlich müssen Queue und Join für den
|
||||
jeweiligen Browser aktiviert sein. Diese Testausnahme ersetzt weder Mindestgrößen
|
||||
noch native Zugangsvoraussetzungen. Vorhandene Low-Population-Regeln des Servers
|
||||
bleiben davon getrennt. Gruppen ohne Clientless-Teilnehmer behalten ihren Ablauf.
|
||||
|
||||
Die Regeln sind generische CPC-Admission-Regeln. DungeonFinding und Battlegrounds
|
||||
hängen dafür nicht vom AdventureBot-System ab. Die Adventure-KI wählt lediglich
|
||||
Anmeldungen und Rollen. Keine zusätzlichen externen Dienste oder Netzwerkschnittstellen.
|
||||
|
||||
## PvP
|
||||
|
||||
Ein PvP-Block mit Hauptstadtslocation bedeutet direkte Schlachtfeldsuche.
|
||||
Welt-PvP-Ziele kommen aus zulässigen Gebietslocations von TolBarad/TolBarad-Halbinsel,
|
||||
Höllenfeuerhalbinsel, Zangarmarschen, Nagrand und den Wäldern von Terokkar.
|
||||
Gebietskatalog, Fraktion, tatsächliches Mindestlevel und Fluganforderungen gelten
|
||||
auch hier. Für Welt-PvP genügt eine geeignete Gruppe ab zwei Mitgliedern; fehlen
|
||||
Mitglieder, geht der Bot stattdessen in die Schlachtfeldsuche. Diese läuft über
|
||||
die nativen normalen Schlachtfelder, nicht über Arena oder gewertetes PvP.
|
||||
UnterStufe45 wird Kriegshymnenschlucht angefragt, danach ein zufälliges Schlachtfeld;
|
||||
unterStufe10 erfolgt keine Anmeldung und kein neu generierter PvP-Block.
|
||||
Bei Schlachtfeld-Gruppensuche werden die nativen Levelbereiche der gewünschten
|
||||
Schlachtfeldvorlage verglichen, einschließlich der Mindeststufe für Zufallssuche. Die nativen Prüfungen entscheiden endgültig.
|
||||
|
||||
Derzeit geht es um Anmeldung und Beitritt. Spezifische Quest-, Flaggenträger-,
|
||||
Basen- und Bossmechaniken sind damit nicht implementiert. Welt-PvP benutzt zunächst
|
||||
vorhandene Erkundungsaktionen und die bisherigen persönlichkeitsabhängigen
|
||||
PvP-Angriffsregeln. Schlachtfeld-/Raidbeitritt ist daher standardmäßig gesperrt.
|
||||
|
||||
## Gruppen zusammenführen
|
||||
|
||||
Während der Gruppenbildung steigt die Wechselbereitschaft mit der verstrichenen
|
||||
Zeit. Größere passende Botgruppen werden bevorzugt. Auch Mitglieder kleinerer
|
||||
unvollständiger Botgruppen können wechseln, insbesondere um einen offenen
|
||||
Rollenplatz zu besetzen. Offene Einladungen reservieren bereits Rollenplätze;
|
||||
die eigene Reservierung verhindert nicht die Annahme. Überzählige Rollen aus
|
||||
falsch besetzten Gruppen dürfen auch in kleinere passende Gruppen wechseln,
|
||||
und das Vervollständigen einer zulässigen Gruppe hat Vorrang. Bereits abgereiste
|
||||
Anführer schützen auch Mitglieder, deren persönlicher Plan noch Gruppenbildung
|
||||
anzeigt. Ziel und Voraussetzungen der aufnehmenden Gruppe gelten.
|
||||
Die native Einladung/Annahme erfolgt im Worldthread; bei Ablehnung wird die
|
||||
ursprüngliche Gruppe soweit möglich wiederhergestellt.120Sekunden Wechselpause
|
||||
und eine eindeutige Rangfolge gleich großer Gruppen verhindern Pendeln.
|
||||
Spielergeführte Gruppen, volle passende Gruppen, laufende Reisen und bereits
|
||||
laufende Browsergruppen werden nicht automatisch umverteilt. Die feste
|
||||
Sammelfrist am Stundenende wird nicht verlängert.
|
||||
|
||||
## Validierung und Betrieb
|
||||
|
||||
Vor jedem Build Loader/Testannahme pausieren und sicheren Logout abwarten.
|
||||
Während der laufenden Schiffsaufzeichnung darf bei verbleibenden Bots auch nach
|
||||
fünfMinuten kein Shutdown erzwungen werden: Build dann zurückstellen. Installation
|
||||
und Neustart erst nach Freigabe für die Aufzeichnung. Zugehörige Tests:
|
||||
`test_browser_admission.py`, `test_group_role_composition.py`,
|
||||
`test_adventure_instance_begin.py`, `test_adventure_groups.py`,
|
||||
`test_browser_participants.py`, `test_browser_match_order.py`,
|
||||
`test_browser_bg_brackets.py`. Rollenabfragen werden außerhalb der Versorgungs-
|
||||
und Kampfaktionen beantwortet, nur solange die native Abfrage noch offen ist.
|
||||
Alle120Clientless-Testskripte wurden ausgeführt und bestanden. Sechs ältere
|
||||
Adapter benötigten die neuen Zustandsfelder/Schnittstellen; zusätzliche Assertions
|
||||
prüfen PvP-Persistenz, Browser-Wartephasen, Wiederaufnahme begonnener Reisen und
|
||||
AFK-Schutz während der Suche. Der vollständige CMake-Build und der abschließende
|
||||
inkrementelle Build liefen mit-j10 erfolgreich durch. Beide Config-Dateien wurden
|
||||
auf die vereinbarten Browserwerte geprüft. Details und Logs:
|
||||
`doc/clientless/checkpoints/2026-10-31-browser/validation-status.json` und
|
||||
`regression/final-summary.json`. Der vorherige114/120-Lauf samt Fehlerlogs ist
|
||||
als Diagnose erhalten; die behobenen Fälle wurden gezielt erneut ausgeführt.
|
||||
|
||||
Der Testserver war nach dem externen Umgebungsneustart bereits offline. Es wurden
|
||||
keine Bots für den Build zwangsausgeloggt, keine laufenden Transporte unterbrochen
|
||||
und kein Server durch diesen Arbeitslauf gestoppt. Loader und TestBot-Ausführung
|
||||
bleiben pausiert (Config0/0); ursprünglicher TestBot-Wert1 ist in
|
||||
`resumed-build-state.json` gespeichert. Installation/Start erst nach Freigabe.
|
||||
Vor dem nächsten zulässigen Start die sieben zuletzt verbliebenen Bots anhand
|
||||
`restart-recovery-needed.json` für Zustandsprüfungen vorsehen.
|
||||
|
||||
Diese Tests prüfen Regeln und echte extrahierte Produktionsfunktionen mit
|
||||
Adaptern. Ein tatsächlicher Browser-Beitritt mit echten Spielern und die visuelle
|
||||
Abnahme stehen aus. Es wurde weder installiert noch ein Worldserver gestartet.
|
||||
@@ -0,0 +1,42 @@
|
||||
# Build-Bergung am 30.10.2026
|
||||
|
||||
Loader seit etwa15:44 pausiert, sicherer Logout seit derselben Phase angefordert.
|
||||
Snapshot nach17:09; Fünf-Minuten-Frist damit deutlich überschritten.
|
||||
Regulärer Server-Shutdown vor dem Build; keine Einzel-Logouts erzwungen.
|
||||
|
||||
| GUID | Bot | Fraktion | Karte | Position X/Y/Z | Flugstatus vor Shutdown |
|
||||
|---:|---|---|---:|---|---|
|
||||
| 43 | Fizzira | Allianz | 530 | -267.066 / 3215.06 / 66.1018 | Failed |
|
||||
| 46 | Selthas | Horde | 571 | 3975.16 / 6846.42 / 204.755 | Failed |
|
||||
| 53 | Noranda | Allianz | 530 | -3103 / 2595 / 62.9246 | Arrived |
|
||||
| 84 | Brynli | Allianz | 530 | 3471.56 / 5253.22 / 150.785 | Failed |
|
||||
| 91 | Norara | Horde | 0 | 1805 / 327 / 94.8042 | Failed |
|
||||
| 101 | Korutam | Horde | 1 | 1655.55 / -4313.52 / 78.9182 | Failed |
|
||||
| 104 | Lillini | Allianz | 0 | -8893.24 / 691.307 / 127.343 | Failed |
|
||||
| 118 | Lillina | Allianz | 1 | 5391.2 / -3378.67 / 1649.72 | Failed |
|
||||
|
||||
Sieben Failed-Flugzustände, Noranda mit Arrived. Letzter Sammelstatus:
|
||||
8Sessions,1Kampf,7Flug,0Transport,0Ladevorgänge. Kein Bot mit gespeichertem
|
||||
Transportpassagier oder Taxipfad. Details/Positionen sind unter
|
||||
`/tmp/vcore-recorder-5yd-recovery/` gesichert.
|
||||
|
||||
## Nachprüfung
|
||||
|
||||
Build mit `-j10`, Installation und Transport-Regressionstest bestanden.
|
||||
Neustart PID471677; frische Ready-Meldung, Prozess und Ports8085/8087 geprüft.
|
||||
|
||||
Alle8Bots nach Login geprüft, einschließlich tatsächlicher Fuß-/Bodenhöhe.
|
||||
Fizzira, Selthas, Brynli, Norara, Korutam und Lillini schwebten nach Neustart
|
||||
weiter über dem Boden, obwohl das Flugkennzeichen teilweise verschwunden war.
|
||||
Native Teleports nach Sturmwind bzw.Orgrimmar bestätigt. Noranda stand auf
|
||||
festem Boden, blieb aber im Kampf und blockierte weiter den sicheren Logout;
|
||||
ebenfalls nativ nach Sturmwind zurückgesetzt. Lillina stand auf gültigem Boden
|
||||
und konnte ohne Bergung sicher ausloggen.
|
||||
|
||||
Endstand: alle8offline, keine gespeicherten Transportbindungen oder Taxipfade.
|
||||
Sieben Hauptstadtpositionen in `final.tsv` bestätigt. Temporäre reine
|
||||
Prüfprofile entfernt; ursprüngliche generierte Profile unverändert erhalten.
|
||||
Loader bleibt0 wegen laufender Routenaufzeichnung; Originalwert1 liegt unter
|
||||
`/tmp/vcore-elunes-recording-loader.json`. Sicherer Logout bleibt angefordert,
|
||||
bis die Aufzeichnung beendet ist. Recorder-Startentfernung5Yards jetzt live.
|
||||
Kein neuer Commit oder Push.
|
||||
@@ -0,0 +1,64 @@
|
||||
# Capital Cataclysm portals and Tol Barad
|
||||
|
||||
World migration `2026_10_29_07_capital_cataclysm_portals.sql` adds twelve native
|
||||
GameObject portal graph bindings, six for each capital. Source faction ACL is
|
||||
Alliance1 or Horde2; destination area rules retain precedence. Imports and SQL
|
||||
seed only: existing enabled flags and manually adjusted positions survive.
|
||||
|
||||
| Destination | Stormwind spawn | Orgrimmar spawn |
|
||||
| --- | --- | --- |
|
||||
| Hyjal | 200624 | 219028 |
|
||||
| Deepholm | 200625 | 211258 |
|
||||
| Uldum | 200626 | 211259 |
|
||||
| Twilight Highlands | 200627 | 211260 |
|
||||
| Tol Barad Peninsula | 220365 | 211264 |
|
||||
| Vashj'ir | 220366 | 211257 |
|
||||
|
||||
Orgrimmar Tol Barad duplicate219035 is coincident with211264 and deliberately
|
||||
has no second graph edge. Its shared template receives the same repair.
|
||||
|
||||
Nine existing portal templates worked in native tests without caster changes.
|
||||
Orgrimmar Tol Barad206595 accepted clicks but failed to transfer Edwin85 in two
|
||||
attempts; changing only this template to native visitor-cast mode made its
|
||||
88341 teleport work. Native target coordinates and conditions remain unchanged.
|
||||
An early Hyjal failure inference was corrected: first save/read was too early,
|
||||
final save showed successful arrival. No blanket caster change was retained.
|
||||
|
||||
Vashj'ir server-only spells90244/90245 had neither effects nor target positions.
|
||||
The migration supplies direct native teleport effects160117/160118 and visitor
|
||||
casting for207690/207691. The fixed landing comes from the existing project
|
||||
SmugglersScar game_tele1514 at map0(-4570.29,3478.06,-101.809). This is a deliberate
|
||||
fixed cave destination, not reconstructed retail quest-progress destination
|
||||
selection. No quest completion is granted or visibility condition bypassed.
|
||||
|
||||
Vashj'ir and children remain closed by unchanged area5146 faction mask0. Both
|
||||
source and destination nodes and the portal edges exist/enabled. Native area
|
||||
queries for Alliance35 and Horde36 resolve the landing to5057 with inherited
|
||||
factionMask0 and allowed0. Actual hard travel_to_node attempts are rejected with
|
||||
`destination node denied by area/node catalog` for both factions. Diagnostic
|
||||
native-click tests intentionally exercise the underlying portal, outside
|
||||
ordinary autonomous planning; the ban was never disabled.
|
||||
|
||||
## Verification and cleanup
|
||||
|
||||
Twelve native CMSG_GAMEOBJ_USE clicks with level85 Karggan35 and Edwin36 reached
|
||||
their expected spell_target_position destinations. Full position snapshots are
|
||||
in checkpoints/2026-10-29-capital-cata-portals/probes.json. Before-Tol-fix output
|
||||
is retained separately. An initial post-restart retest attempted a click before
|
||||
Edwin finished login and was rejected; the successful retest waited for online
|
||||
state and native interaction-range validation. Do not count that login race as
|
||||
a portal failure or an unverified success.
|
||||
|
||||
Migration replay preserved binding/effect/target results. Existing native portal
|
||||
use, transfer/ACK and area-node regressions passed. No new C++ changes/build were
|
||||
required; two restarts loaded server spell/template DB changes. Final server
|
||||
PID362937 under gdb/tmux vcore-worldserver, console
|
||||
/tmp/vcore-cata-portals-final-start-20261029.log; freshready11s,8085/8087 verified.
|
||||
Known OutdoorPvP shutdown fault traces retained in earlier consoles.
|
||||
|
||||
The two temporary specific profiles were removed and generated profiles plus
|
||||
daily schedules restored. Testbots returned to their own capitals. Twelve
|
||||
vcore_cata_probe_* game_tele fixtures were deleted and cache reloaded (count0).
|
||||
No human character modified. Prior uncommitted transport fixes preserved.
|
||||
Native transfers are verified; final client-side visual acceptance remains with
|
||||
the user. No commit or push requested for this task.
|
||||
@@ -0,0 +1,92 @@
|
||||
# Hauptstadt-Portale: Untersuchung vom 30.10.2026
|
||||
|
||||
Vorherige abgeschlossene Änderungen lokal als `649915e575` committed, kein Push.
|
||||
|
||||
## Direkt ergänzte Verbindungen im laufenden Graphen
|
||||
|
||||
Über den vorhandenen nativen Import erfolgreich registriert:
|
||||
|
||||
| Ort | Spawn | Verbindung |
|
||||
|---|---:|---|
|
||||
| Eisenschmiede |217855|Verwüstete Lande|
|
||||
| Darnassus |219119|Verwüstete Lande|
|
||||
| Exodar |151163|Verwüstete Lande|
|
||||
| Darnassus |219120|Exodar|
|
||||
| Unterstadt |203251|Verwüstete Lande|
|
||||
| Donnerfels |214456|Verwüstete Lande|
|
||||
| Silbermond |151162|Verwüstete Lande|
|
||||
| Dalaran |56568|Orgrimmar|
|
||||
| Dalaran |61217|Sturmwind|
|
||||
| Dalaran |57634|Höhlen der Zeit|
|
||||
| Dalaran |60709|Purpursalon|
|
||||
| Dalaran |151243|Violette Zitadelle|
|
||||
|
||||
Sturmwind und Orgrimmar besitzen bereits ihre Cata-Portale und Verbindungen zu den
|
||||
Verwüsteten Landen. Doppelte vorhandene Spawnpositionen werden getrennt geprüft;
|
||||
keine vorhandenen Koordinaten oder manuell deaktivierten Kanten überschrieben.
|
||||
Vashj'ir bleibt durch den Gebietskatalog gesperrt.
|
||||
|
||||
## Installierte Unterstützung nativer Klickportale
|
||||
|
||||
Die Translokationskugeln Silbermond12608/Unterstadt203457 sind GOOBER(type10),
|
||||
keine SPELLCASTER(type22). Native Spellskripte35376→25649 bzw35727→35730
|
||||
lassen den Besucher den eigentlichen Teleport auf sich selbst wirken. Shattraths
|
||||
Portal zur Insel Quel'Danas47196 hat eine entsprechende Skriptkette44876→44870.
|
||||
Dalarans Wintergrasp-Portal61496 nutzt einen festen nativen Skript-Teleport.
|
||||
|
||||
Der Resolver akzeptiert deshalb zusätzlich harmlose Goober ohne Quest, Event,
|
||||
Gossip, Schloss, Verbrauch oder gekoppelte Falle. Aufgelöst werden ausschließlich
|
||||
feste native DB-Ziele, einzelne Besucher-Selbstcasts oder einzelne feste native
|
||||
Teleportaktionen; keine beliebigen Skripte oder geratenen Zielpositionen.
|
||||
Zyklen, mehrere Aktionen, andere Zielrollen und zu lange Verzögerungen bleiben
|
||||
abgewiesen. Tatsächliche Benutzung weiterhin über normalen GameObject-Click,
|
||||
native Bedingungen, Sichtbarkeit, Phase, Reichweite und Teleport-ACK.
|
||||
Voraussetzungen aller aufgelösten Zauber werden vor der Routenplanung geprüft.
|
||||
|
||||
Neue reproduzierbare Migration:
|
||||
`sql/custom/world/2026_10_30_01_capital_click_portals.sql` (angewendet und auf Idempotenz geprüft).
|
||||
Sie erhält vorhandene Positionen, Kosten, Sperren und manuelle Fraktionsmasken.
|
||||
Maelstrom-Questportale erhalten sichtbare Nodes, aber keine aktive gewöhnliche
|
||||
Transitkante. Nicht gespawnte Exodar→Darnassus- und Shattrath→Orgrimmar-Templates
|
||||
werden nicht als künstliche Portale erzeugt.
|
||||
|
||||
Shattraths Sturmwind-Kante1752 wurde nach erfolgreichem nativen Klicktest von
|
||||
ihrer überholten LOS-Testsperre befreit. Die Migration trifft ausschließlich die
|
||||
Kante mit genau diesem alten Diagnosekommentar. Sonstige Sperren bleiben erhalten.
|
||||
Das Rückportal Purpursalon→Violette Zitadelle benötigte ebenfalls den öffentlichen
|
||||
Player-Cast-Modus; ausschließlich Template194012/Spell61420 wurde korrigiert.
|
||||
|
||||
Zusätzlich ergänzt: Dalarans Brunnen-Portal (AreaTrigger5273), dessen Position
|
||||
aus den lokalen Cataclysm-DBC und dessen Ziel aus der nativen DB stammen.
|
||||
|
||||
## Prüfung
|
||||
|
||||
Build mit `-j10` erfolgreich; nach sauberem Herunterfahren installiert. Beide
|
||||
Neustarts erreichten frisch `(worldserver-daemon) ready...`; Prozess und Ports
|
||||
8085/8087 geprüft. Alle114 Clientless-Tests bestanden. Resolver-/Executor-/ACK-
|
||||
Tests und SQL-Fixtures nach den letzten SQL-Anpassungen erneut bestanden.
|
||||
`git diff --check` sauber. Die SQL-Fixtures prüfen unter anderem native direkte
|
||||
und Skriptziele, Fraktionsmasken, Spawn-Entry-Zuordnung, Quest-Sperren, Idempotenz,
|
||||
den gezielten Player-Cast-Fix und Erhalt manueller Positionen/Kosten/Sperren.
|
||||
|
||||
Alle17 untersuchten Portalspawns wurden mit normalen, passend gelevelten Bots
|
||||
über den nativen GameObject-Klick erfolgreich benutzt:
|
||||
217855,203251,219119,151163,214456,151162,219120,12608,203457,56568,61217,
|
||||
57634,60709,151243,61496,83,47196.
|
||||
Prüfung erfolgte durch Vergleich des tatsächlich gespeicherten Karten-/XYZ-Ziels
|
||||
mit dem nativen Portalziel. Adminteleports dienten nur dem Aufstellen an der
|
||||
Quelle. Drei erste Horde-Versuche schlugen bei zu frühem Klick nach dem
|
||||
Aufstellen fehl; Wiederholungen nach Abschluss des Transfers waren erfolgreich.
|
||||
Das Purpursalon-Rückportal bestand nach dem gezielten Player-Cast-Fix.
|
||||
Nachweise unter `/tmp/vcore-capital-portals-state/probe-*.json`.
|
||||
Dies bestätigt einzelne native Portalbenutzungen, keine vollständige Langzeit-
|
||||
Abnahme sämtlicher AdventureBot-Reisen durch die neuen Kanten.
|
||||
|
||||
Die14 zuvor blockierten Bots wurden mit expliziter einmaliger Nutzerfreigabe
|
||||
geborgen und anschließend nativ sicher ausgeloggt. Vor dem Build waren
|
||||
pending=0/sessions=0 bestätigt. Daraus folgt keine weitere Ausnahme von der
|
||||
Build-Regel. Temporäre Testprofile und19Teleportmarken wurden entfernt, ursprüngliche
|
||||
Positionen wiederhergestellt und beide Testbots sicher ausgeloggt. Loaderwert1
|
||||
ist wiederhergestellt; alle vier Zielpools50/5/50/5 werden schrittweise geladen.
|
||||
Letzte Statusprüfung: known110,12online (3jePool), kein Loaderfehler; beide
|
||||
Testbots verwenden wieder ihre ursprünglichen generierten Profile.
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,6 @@
|
||||
TrinityCore rev. 04aa87fcfc13+ 2026-10-28 11:30:47 +0100 (feature/clientless-player-core branch) (Unix, Debug, Static) (worldserver-daemon) ready...
|
||||
GROUP_BOT_INVITE leader=31 target=29 intent='social' forming=0
|
||||
INTERACTION_INVITE guid=29 leader=31 accepted=1
|
||||
INTERACTION_GROUP_LEAVE guid=31 reason='intent-change'
|
||||
Interactions guid=29 grouped=1 leader=31 partner=0 intent='social' schedule='soc
|
||||
Interactions guid=31 grouped=1 leader=31 partner=0 intent='social' schedule='soc
|
||||
@@ -0,0 +1,3 @@
|
||||
66 clientless test scripts passed; final interaction-manager regression rechecked. Native Lenara31 -> Aelion29 invitation accepted, native grouped1/leader31 observed, later normal intent-change departure. Timer defect discovered during smoke and fixed before final deployment. Full group route/raid/visual acceptance remains open.
|
||||
Latest production plan-signature regression rechecked: different inherited destinations do not trigger personal intent-change departure; restoration returns to the original manual destination.
|
||||
Final corrected Debug build installed; worldserver122595 fresh ready and port8085 verified. All four bots online;29/31 confirmed enabled0/grouped0 in Goldshire,30/32 original social intents,26offline. No temporary profile changes or overrides.
|
||||
@@ -0,0 +1,204 @@
|
||||
|
||||
TEST tests/clientless/test_adventure_area_node.py
|
||||
Production area destination excludes outside and unreachable graph nodes.
|
||||
|
||||
TEST tests/clientless/test_adventure_behavior_policy.py
|
||||
24-hour generation, shared intents with changing destinations, broad location classification and repetition penalties passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_exercise.py
|
||||
Production exercise: stance/charge/melee/casts, native validation delegation, bounded lifetime, invalid targets and unchanged native phases passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_preparation.py
|
||||
Production talent learner: native tiers/dependencies/class gates, all 26 legal level60 points, no capstone bypass and repeat safety passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_reactions.py
|
||||
Production combat focus, damage ordering, risk filters, corpse radius/delay, flight/group override, blocked escape, danger avoidance and malus-free persisted fallback passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_economy.py
|
||||
Economy: native service roles, friendly/phase/LOS/bounds gates, no bot service targets and coherent performative cues passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_economy_catalog.py
|
||||
Economy catalog: eleven actions, three faction-bound service anchors, native flag gates and idempotent preservation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_exploration.py
|
||||
Exploration: visible native props only, no chests/traps/furniture, phase/map/LOS/range gates and contextual preparation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_exploration_catalog.py
|
||||
Exploration catalog: ten actions, shared scenes, default wander replacement, explicit category eligibility and preserved edits passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_equipment.py
|
||||
Production equipment affinity: mana-only/direct/triggered procs, caster/physical stat effects and bounded cycles passed
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_ownership.py
|
||||
Production generator commands: batch bounds, dedicated ownership, persistent/online/removing retirement protection and retired login refusal passed
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_policy.py
|
||||
Production generator: 6144 cultural names and 61440 real Lua profiles, profession coherence, personality ranges, escaping and equipment/armor gates passed
|
||||
|
||||
TEST tests/clientless/test_adventure_graph_handover.py
|
||||
Production graph handover waits for ship/taxi/flight/teleport and stops at safe road/node boundaries.
|
||||
|
||||
TEST tests/clientless/test_adventure_group_plan.py
|
||||
Production group plans: leader meeting/goal/deadline inheritance, untouched personal day, manual preparation and instance-state guards passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_groups.py
|
||||
Production recruitment: capitals, different goals, native inviter leadership, joining existing groups, capacity/reservations, raid conversion, planned transition and local contact passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance.py
|
||||
Production instance lifecycle: time budget, true entry, denied/shared entry, native rear exit, restart, expired copy, late arrival, HP and return replay passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_autoresume.py
|
||||
Instance startup script: no schema/no visits stays idle; saved visitors resume with the Adventure controller and native accounts.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_begin.py
|
||||
Production entrance travel uses the existing location planner, requires mapping and retains normal social/area travel.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_catalog.py
|
||||
Instance migrations: outside entrances only, native graph preserved, disabled/missing transitions excluded, edits and saved visits preserved.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_persistence.py
|
||||
Production instance persistence: phases, original deadline, instance ID, transactional HP marker, failed commit and intent release passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_intent_state.py
|
||||
Production intent arrival, failed/partial travel, deadlines and safe schedule handover passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_interactions.py
|
||||
/tmp/tmp_vzcr4vj/test.cpp: In member function ‘void AdventureInteractionMgr::Leave(Player*, Record&, const char*)’:
|
||||
/tmp/tmp_vzcr4vj/test.cpp:142:69: warning: unused parameter ‘reason’ [-Wunused-parameter]
|
||||
142 | void AdventureInteractionMgr::Leave(Player* p,Record& r,char const* reason)
|
||||
| ~~~~~~~~~~~~^~~~~~
|
||||
production interaction manager: invitations, factions, reservations, follow, AFK and deferred departure passed
|
||||
|
||||
TEST tests/clientless/test_adventure_leisure.py
|
||||
Leisure: substantial curved MMAP routes, mirrored return, interrupted return, rejected corridors, actual arrival, companion follow, riding, flight and fishing passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_leisure_catalog.py
|
||||
Leisure migration: native city anchor, shared scene references, pet-walk mapping and preservation of edited weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_location_import.py
|
||||
Locations: actual Debug SMALLINT reads retain continent IDs; explicit location eligibility and edited weight overrides passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_micro_reset.py
|
||||
Micro cleanup ends physical local movement, preserves transit and does not stand up dead players.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_catalog.py
|
||||
Profession catalog: native workstation roles, no workshop/resource inference, idempotence and preserved edits passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_profile.py
|
||||
Production profession parser, real Lua profiles, primary restrictions and secondary permissions passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_sightline.py
|
||||
Native workstation working-surface sightline and blocked geometry rejection passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_targets.py
|
||||
Production profession targets: native locks, phase/spawn/loot, stations, corpses, history and trainers passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_pvp.py
|
||||
Production PvP selector: level boundaries, radius, factions, native legality, navigation, intent, personality and resources passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_repair_catalog.py
|
||||
Repair action catalog: proper native service requirement, economy-only intent and preserved administrator weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest.py
|
||||
Recovery: authored places, bounds, arrival, occupancy, full rest duration, failure, reload and interruption passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_fire.py
|
||||
Rest fire: shared scene mapping, additive migration, preserved weights and authored creation-place policy passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_space.py
|
||||
Sleep footprint: furniture, body extent, overhead collision, ledges, stairs, missing heights, rotation and scale passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_targets.py
|
||||
Native sleep targets: chair exclusion, phase, despawn, floor search, indoors, water, storey, occupancy, bed/surface preference passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_social.py
|
||||
Production social flow: approach before talk, coherent greeting/talk/listen/farewell, lost targets, native chair confirmation and real fire confirmation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_social_fire.py
|
||||
Shared fire: native detection/provisioning, buildings/city/parent/zone restrictions, existing fires and outdoor/water checks passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supplies.py
|
||||
Production supplies: exact10% boundary, bandage-before-food, native lockout fallback, recovery completion, combat potions, mana-only drinking and daily/post-combat top-ups passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supply_catalog.py
|
||||
Supply migrations: all five roles, level60 netherweave tier, editable/disabled catalog preservation and persistent daily stamp passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supply_items.py
|
||||
Production native-item delegation: usable bandage tiers, native cooldown/lockout gates, real inventory consumption, self targeting and level60 secondary caps passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_training_catalog.py
|
||||
Training catalog: real dummy requirement, leisure-only intent, bounded duration and preserved administrator weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_walk.py
|
||||
Production travel gait reaches native spline, survives repaths, prevents mounting and preserves legacy running defaults.
|
||||
|
||||
TEST tests/clientless/test_clientless_character_factory.py
|
||||
Production native factory: character/profile atomicity, failed preparation/commit, cache publication order, account/security/name/cap gates passed
|
||||
|
||||
TEST tests/clientless/test_clientless_companion.py
|
||||
Native companion: provisioning, delayed summon, ownership, real item target, leash confirmation/timeout, reuse and cleanup passed.
|
||||
|
||||
TEST tests/clientless/test_clientless_damage_notifications.py
|
||||
Production damage handoff: 16 concurrent map-worker writers, ordered GUID-only events, clientless-only/positive damage gates and post-health notification passed.
|
||||
|
||||
TEST tests/clientless/test_clientless_near_teleport_observer.py
|
||||
Production near-teleport observer packet includes actual mover GUID and destination; clientless timestamp refreshed, regular client timestamp preserved.
|
||||
|
||||
TEST tests/clientless/test_clientless_skill_preparation.py
|
||||
Production offline skill preparation: native tier caps, no downgrading, rank/level/race/tier gates and no modification of online players passed
|
||||
|
||||
TEST tests/clientless/test_clientless_social_notifications.py
|
||||
Production social/helper queues: concurrent GUID-only delivery, bounded queues, human/self/zero-damage gates, pet attribution and lethal-cleanup ordering passed
|
||||
|
||||
TEST tests/clientless/test_default_phase.py
|
||||
Native PhaseShift: implicit/default 169 visibility, genuine custom-phase separation and reference updates passed.
|
||||
|
||||
TEST tests/clientless/test_flight_area_query.py
|
||||
Native terrain query map/phase, area/zone ordering and cache passed.
|
||||
|
||||
TEST tests/clientless/test_flight_handoff.py
|
||||
Flight handoff before spline end, terminal landing, return corners, collision stop and actual distance passed.
|
||||
|
||||
TEST tests/clientless/test_flight_policy.py
|
||||
Flight native eligibility, license/profile/zone policy, RP costs and fail-safe return decisions passed.
|
||||
|
||||
TEST tests/clientless/test_follow_spline_velocity.py
|
||||
Native follow: actual player/creature spline velocity, client gait and independent follower speeds passed.
|
||||
|
||||
TEST tests/clientless/test_free_flight.py
|
||||
Flight geometry passed: takeoff/landing, smoothed peak, ceiling, lateral/climbing avoidance, missing terrain and blocked corridors.
|
||||
|
||||
TEST tests/clientless/test_free_flight_planner.py
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
|
||||
TEST tests/clientless/test_ground_exit_continuation.py
|
||||
optional exits: repeated probes, retained route, delayed success, forward resume, flight fallback passed
|
||||
|
||||
TEST tests/clientless/test_local_spline_segments.py
|
||||
Production local spline clipping passes native path-length validation, tiny remainders and 1000 sampled paths.
|
||||
|
||||
TEST tests/clientless/test_lua_reload.py
|
||||
Lua reload regression tests passed (production reload/bindings, real Lua 5.4).
|
||||
|
||||
TEST tests/clientless/test_player_pure_max_skill.py
|
||||
Native pure skill cap: learned skills return stored cap; missing/deleted/zero-rank skills return0.
|
||||
|
||||
TEST tests/clientless/test_portal_transfer.py
|
||||
Portal near/far ACK and denied same-map transfer regressions passed.
|
||||
|
||||
TEST tests/clientless/test_portal_use.py
|
||||
Interactive portal native click, near/far/global ACK, denial, timeout and target checks passed.
|
||||
Native portal destination discovery and unsupported/ambiguous spell rejection passed.
|
||||
Production clientless ACK completion sequence increments only after completed near/far transfers.
|
||||
|
||||
TEST tests/clientless/test_shared_group_route.py
|
||||
Production generic shared routes: same edges/taxi/free flight, independent execution state, final local goal, late catch-up, permissions and stale-goal rejection passed.
|
||||
|
||||
TEST tests/clientless/test_taxi_import_disabled.py
|
||||
Taxi importer preserves disabled rows and their reasons.
|
||||
|
||||
TEST tests/clientless/test_transport.py
|
||||
Transport dock, frame, recorder, cross-map copy and ride regressions passed
|
||||
|
||||
TEST tests/clientless/test_transport_grid_loading.py
|
||||
Core transport grid initialization regressions passed (no CPC dependency).
|
||||
@@ -0,0 +1,19 @@
|
||||
from pathlib import Path
|
||||
import os,re,subprocess,sys
|
||||
root=Path('/home/wow_admin/wow_cata_server/source/TrinityCore')
|
||||
conf=Path('/home/wow_admin/wow_cata_server/server/debug/etc/worldserver.conf').read_text()
|
||||
def query(kind,sql):
|
||||
h,port,u,p,db=re.search(r'^'+kind+r'DatabaseInfo\s*=\s*"([^"]+)"',conf,re.M).group(1).split(';')
|
||||
env=os.environ.copy();env['MYSQL_PWD']=p
|
||||
r=subprocess.run(['mysql','--protocol=TCP','--host='+h,'--port='+port,'--user='+u,'--database='+db,'--batch','--connect-timeout=10'],input=sql,text=True,capture_output=True,env=env)
|
||||
if r.returncode:raise SystemExit(r.stderr.replace(p,'[redacted]'))
|
||||
return r.stdout
|
||||
|
||||
mode=sys.argv[1]
|
||||
if mode=='inspect':
|
||||
print(query('World',"SHOW CREATE TABLE vcore_adventure_day; SELECT zone_id,area_id,COUNT(*) n FROM vcore_adventure_location GROUP BY zone_id,area_id ORDER BY n DESC LIMIT 20;"))
|
||||
elif mode=='apply':
|
||||
print(query('World',(root/'sql/custom/world/2026_10_28_01_adventure_groups.sql').read_text()))
|
||||
elif mode=='state':
|
||||
print(query('Character',"SELECT guid,name,online,map,instance_id FROM characters WHERE guid IN(26,29,30,31,32); SELECT guid,leaderGuid,groupType FROM groups; SELECT guid,memberGuid FROM group_member ORDER BY guid,memberGuid;"))
|
||||
else:raise SystemExit('unknown mode')
|
||||
@@ -0,0 +1,5 @@
|
||||
TC> Adventure loader enabled=1 schema=1 busy=0 pools=10/2/10/2 known=25 rotations=0 manager=24 error=''
|
||||
pool=0 faction=alliance persistent=1 target=10 online=10 pending=0 saved=10
|
||||
pool=1 faction=alliance persistent=0 target=2 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=10 online=10 pending=0 saved=10
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
@@ -0,0 +1,13 @@
|
||||
Thread 1 (Thread 0x7ffff7e22380 (LWP 160076) "worldserver"):
|
||||
#0 SpellEffectInfo::CalcBaseValue (this=0x7fffdff27230, caster=0x7fffaa8bd000, target=0x0) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Spells/SpellInfo.cpp:550
|
||||
#1 0x0000555557ebd906 in SpellValue::SpellValue (this=0x7fff12f6a520, proto=0x7fffdff26f00, caster=0x7fffaa8bd000) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Spells/Spell.cpp:539
|
||||
#2 0x0000555557ebdaa1 in Spell::Spell (this=0x7fff4c696000, caster=0x7fffaa8bd000, info=0x7fffdff26f00, triggerFlags=TRIGGERED_FULL_MASK, originalCasterGUID=...) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Spells/Spell.cpp:566
|
||||
#3 0x00005555575d8d49 in WorldObject::CastSpell (this=0x7fffaa8bd000, targets=..., spellId=56342, args=...) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Entities/Object/Object.cpp:2959
|
||||
#4 0x000055555761a312 in Player::AddSpell (this=0x7fffaa8bd000, spellId=56342, active=true, learning=true, dependent=false, disabled=false, loading=false, fromSkill=0) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Entities/Player/Player.cpp:2918
|
||||
#5 0x000055555761b9d5 in Player::LearnSpell (this=0x7fffaa8bd000, spell_id=56342, dependent=false, fromSkill=0) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Entities/Player/Player.cpp:3109
|
||||
#6 0x00005555576a6ccd in Player::LearnTalent (this=0x7fffaa8bd000, talentId=9452, talentRank=0) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/Entities/Player/Player.cpp:25810
|
||||
#7 0x00005555580b2532 in operator() (__closure=0x7fffffffba80, id=9452, rank=0) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/World/AdventureGeneratorMgr.cpp:117
|
||||
#8 0x00005555580bca94 in AdventureTalentPolicy::Spend<(anonymous namespace)::Talents(Player*, const AdventureGeneratorPolicy::Archetype&)::<lambda(uint32, unsigned int)>, (anonymous namespace)::Talents(Player*, const AdventureGeneratorPolicy::Archetype&)::<lambda()> >(const std::vector<AdventureTalentPolicy::Talent, std::allocator<AdventureTalentPolicy::Talent> > &, struct {...}, struct {...}) (build=std::vector of length 19, capacity 19 = {...}, learn=..., remaining=...) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/World/AdventureTalentPolicy.h:18
|
||||
#9 0x00005555580b28fc in (anonymous namespace)::Talents (p=0x7fffaa8bd000, a=...) at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/World/AdventureGeneratorMgr.cpp:117
|
||||
#10 0x00005555580b7385 in AdventureGeneratorMgr::Prepare (this=0x55555a18ff00 <AdventureGeneratorMgr::instance()::mgr>, p=0x7fffaa8bd000, a=..., error="") at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/World/AdventureGeneratorMgr.cpp:419
|
||||
#11 0x00005555580bad71 in AdventureGeneratorMgr::Reconcile (this=0x55555a18ff00 <AdventureGeneratorMgr::instance()::mgr>, player=0x7fffaa8bd000, error="") at /home/wow_admin/wow_cata_server/source/TrinityCore/src/server/game/World/AdventureGeneratorMgr.cpp:601
|
||||
@@ -0,0 +1,11 @@
|
||||
Build: Debug, existing CMake configuration, -j10. Full1046-step rebuild
|
||||
for SpellInfo header fix plus final9-step class refinements succeeded.
|
||||
Installed with cmake --install after verifying no worldserver/authserver active.
|
||||
Third fresh startup: /tmp/vcore-class-combat-20261028-start3.log.
|
||||
Fresh ready marker, persistent worldserver PID167319 and port8085 LISTEN verified.
|
||||
Loader enabled, pools online10/2/10/2, pending0, manager24, error empty.
|
||||
Initial native Hunter44 talent preparation warning recovered: saved level63
|
||||
Survival tree809 with28 talent points, matching NumTalentsAtLevel.dbc.
|
||||
Original inventories21/26 unchanged against pre-task hashes.
|
||||
No in-game tank/healer/player-party acceptance or raid completion claimed.
|
||||
Existing missing-map719 and Into the Wilderness84729 misc9 warnings remain.
|
||||
@@ -0,0 +1,257 @@
|
||||
TEST tests/clientless/test_adventure_area_node.py
|
||||
Production area destination excludes outside and unreachable graph nodes.
|
||||
|
||||
TEST tests/clientless/test_adventure_async_database.py
|
||||
Async creation DB contracts: prepared connection masks, native security column names, no future waits, successful-save cache publication and world-update-only loader hook passed
|
||||
|
||||
TEST tests/clientless/test_adventure_behavior_policy.py
|
||||
24-hour generation, shared intents with changing destinations, broad location classification and repetition penalties passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_class_rotation.py
|
||||
Production class rotations: persistent PvE solo pools, native rank aura IDs, combo/holy power/proc/execute/resource gates, Eclipse and healer coverage passed
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_exercise.py
|
||||
Production exercise: stance/charge/melee/casts, native validation delegation, bounded lifetime, invalid targets and unchanged native phases passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_preparation.py
|
||||
Production talent learner: native tiers/dependencies/class gates, all 26 legal level60 points, no capstone bypass and repeat safety passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_reactions.py
|
||||
Production combat focus, damage ordering, risk filters, corpse radius/delay, flight/group override, blocked escape, danger avoidance and malus-free persisted fallback passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_day_persistence.py
|
||||
Production day planner: all 24 TINYINT slots restored across logins, incomplete/old-day replacement, full transaction and curiosity/level weighting passed
|
||||
|
||||
TEST tests/clientless/test_adventure_economy.py
|
||||
Economy: native service roles, friendly/phase/LOS/bounds gates, no bot service targets and coherent performative cues passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_economy_catalog.py
|
||||
Economy catalog: eleven actions, three faction-bound service anchors, native flag gates and idempotent preservation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_encounter.py
|
||||
Production encounters: bot-only exclusion, mixed mode, extension hook, wait/revive, wipe fallback/reentry/gather/return, living-player priority, kick exit and offline cleanup passed
|
||||
|
||||
TEST tests/clientless/test_adventure_equipment_maintenance.py
|
||||
Production gear maintenance: same birth/retention gate rejects wrong armor/stats, malformed effects, level, temporary, reputation, map, holiday, native-use and slot mismatches passed
|
||||
|
||||
TEST tests/clientless/test_adventure_exploration.py
|
||||
Exploration: visible native props only, no chests/traps/furniture, phase/map/LOS/range gates and contextual preparation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_exploration_catalog.py
|
||||
Exploration catalog: ten actions, shared scenes, default wander replacement, explicit category eligibility and preserved edits passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_equipment.py
|
||||
Production equipment affinity: mana-only/direct/triggered procs, caster/physical stat effects and bounded cycles passed
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_ownership.py
|
||||
Production generator commands: batch bounds, dedicated ownership, persistent/online/removing retirement protection and retired login refusal passed
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_policy.py
|
||||
Production generator: 6144 cultural names and 61440 real Lua profiles, profession coherence, personality ranges, escaping and equipment/armor gates passed
|
||||
|
||||
TEST tests/clientless/test_adventure_graph_handover.py
|
||||
Production graph handover waits for ship/taxi/flight/teleport and stops at safe road/node boundaries.
|
||||
|
||||
TEST tests/clientless/test_adventure_ground_avoidance.py
|
||||
Production ground avoidance: harmful/friendly, phase169, height, reachable safe endpoint, rejected paths and reuse without cast/movement thrashing passed
|
||||
|
||||
TEST tests/clientless/test_adventure_group_plan.py
|
||||
Production group plans: leader meeting/goal/deadline inheritance, untouched personal day, manual preparation and instance-state guards passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_groups.py
|
||||
Production recruitment: capitals, different goals, native inviter leadership, joining existing groups, capacity/reservations, raid conversion, planned transition and local contact passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance.py
|
||||
Production instance lifecycle: time budget, true entry, denied/shared entry, native rear exit, restart, expired copy, late arrival, HP and return replay passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_autoresume.py
|
||||
Deferred instance script: missing schema/visits stays idle; no login work on startup; saved visitors resume with Adventure controllers and native accounts.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_begin.py
|
||||
Production entrance travel uses the existing location planner, requires mapping and retains normal social/area travel.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_catalog.py
|
||||
Instance migrations: outside entrances only, native graph preserved, disabled/missing transitions excluded, edits and saved visits preserved.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_loader.py
|
||||
Production instance recovery: no startup DB/login work, asynchronous delayed/paced manual recovery, generated-bot quota ownership, absent-schema compatibility and existing preparation ticks passed
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_persistence.py
|
||||
Production instance persistence: phases, original deadline, instance ID, transactional HP marker, failed commit and intent release passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_intent_state.py
|
||||
Production intent arrival, failed/partial travel, deadlines and safe schedule handover passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_interactions.py
|
||||
/tmp/tmpefb2v_zu/test.cpp: In member function ‘void AdventureInteractionMgr::Leave(Player*, Record&, const char*)’:
|
||||
/tmp/tmpefb2v_zu/test.cpp:142:69: warning: unused parameter ‘reason’ [-Wunused-parameter]
|
||||
142 | void AdventureInteractionMgr::Leave(Player* p,Record& r,char const* reason)
|
||||
| ~~~~~~~~~~~~^~~~~~
|
||||
production interaction manager: invitations, factions, reservations, follow, AFK and deferred departure passed
|
||||
|
||||
TEST tests/clientless/test_adventure_leisure.py
|
||||
Leisure: substantial curved MMAP routes, mirrored return, interrupted return, rejected corridors, actual arrival, companion follow, riding, flight and fishing passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_leisure_catalog.py
|
||||
Leisure migration: native city anchor, shared scene references, pet-walk mapping and preservation of edited weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_location_import.py
|
||||
Locations: actual Debug SMALLINT reads retain continent IDs; explicit location eligibility and edited weight overrides passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_manager_inventory.py
|
||||
Production inventory maintenance: only full backpacks, native stack trimming, level-appropriate supplies, tools, leash, fishing pole, containers and untouched equipped slots passed
|
||||
|
||||
TEST tests/clientless/test_adventure_micro_reset.py
|
||||
Micro cleanup ends physical local movement, preserves transit and does not stand up dead players.
|
||||
|
||||
TEST tests/clientless/test_adventure_population.py
|
||||
Production population: four independent faction/persistence targets, fair selection, pending reservations, retries, existing inventory, once-per-boot rotation and connected/persistent protection passed
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_catalog.py
|
||||
Profession catalog: native workstation roles, no workshop/resource inference, idempotence and preserved edits passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_profile.py
|
||||
Production profession parser, real Lua profiles, primary restrictions and secondary permissions passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_sightline.py
|
||||
Native workstation working-surface sightline and blocked geometry rejection passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_targets.py
|
||||
Production profession targets: native locks, phase/spawn/loot, stations, corpses, history and trainers passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profile_selection.py
|
||||
Production profile selection: real Lua ID dictionaries, exact 9:1 companion weighting, zero/negative/infinite/NaN/oversized weights rejected and legacy companion fallback passed
|
||||
|
||||
TEST tests/clientless/test_adventure_pvp.py
|
||||
Production PvP selector: level boundaries, radius, factions, native legality, navigation, intent, personality and resources passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_repair_catalog.py
|
||||
Repair action catalog: proper native service requirement, economy-only intent and preserved administrator weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest.py
|
||||
Recovery: authored places, bounds, arrival, occupancy, full rest duration, failure, reload and interruption passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_fire.py
|
||||
Rest fire: shared scene mapping, additive migration, preserved weights and authored creation-place policy passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_space.py
|
||||
Sleep footprint: furniture, body extent, overhead collision, ledges, stairs, missing heights, rotation and scale passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_targets.py
|
||||
Native sleep targets: chair exclusion, phase, despawn, floor search, indoors, water, storey, occupancy, bed/surface preference passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rotation.py
|
||||
/tmp/tmpk5e83d51/test.cpp: In instantiation of ‘std::string Trinity::StringFormat(const char*, A ...) [with A = {}; std::string = std::__cxx11::basic_string<char>]’:
|
||||
/tmp/tmpk5e83d51/test.cpp:22:126: required from ‘void Tx::PAppend(const char*, A ...) [with A = {}]’
|
||||
22 | struct Tx{std::vector<std::string>sql;template<class...A>void PAppend(char const*f,A...a){sql.push_back(Trinity::StringFormat(f,a...));}};
|
||||
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
|
||||
/tmp/tmpk5e83d51/test.cpp:51:75: required from here
|
||||
51 | auto barrier=CharacterDatabase.BeginTransaction();barrier->PAppend("DO 0");
|
||||
| ~~~~~~~~~~~~~~~~^~~~~~~~
|
||||
/tmp/tmpk5e83d51/test.cpp:11:113: warning: format not a string literal and no format arguments [-Wformat-security]
|
||||
11 | namespace Trinity{template<class...A>std::string StringFormat(char const* f,A...args){char b[4096];std::snprintf(b,sizeof(b),f,args...);return b;}}
|
||||
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
|
||||
Production rotation: connected/native-online protection, ownership refusal, native delete failure, world cleanup failure and journal-retained retry before successful profile/plan/state removal passed
|
||||
|
||||
TEST tests/clientless/test_adventure_social.py
|
||||
Production social flow: approach before talk, coherent greeting/talk/listen/farewell, lost targets, native chair confirmation and real fire confirmation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_social_fire.py
|
||||
Shared fire: native detection/provisioning, buildings/city/parent/zone restrictions, existing fires and outdoor/water checks passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supplies.py
|
||||
Production supplies: exact10% boundary, bandage-before-food, native lockout fallback, recovery completion, combat potions, mana-only drinking and daily/post-combat top-ups passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supply_catalog.py
|
||||
Supply migrations: all five roles, level60 netherweave tier, editable/disabled catalog preservation and persistent daily stamp passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supply_items.py
|
||||
Production native-item delegation: usable bandage tiers, native cooldown/lockout gates, real inventory consumption, self targeting and level60 secondary caps passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_talent_templates.py
|
||||
Canonical Cata PvE builds: 4.3.4 class/tree/rank/prerequisite gates, all 1..41 point budgets, solo selection coverage passed
|
||||
|
||||
TEST tests/clientless/test_adventure_training_catalog.py
|
||||
Training catalog: real dummy requirement, leisure-only intent, bounded duration and preserved administrator weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_walk.py
|
||||
Production travel gait reaches native spline, survives repaths, prevents mounting and preserves legacy running defaults.
|
||||
|
||||
TEST tests/clientless/test_clientless_character_factory.py
|
||||
Production native factory: character/profile atomicity, failed preparation/commit, cache publication order, account/security/name/cap gates passed
|
||||
|
||||
TEST tests/clientless/test_clientless_companion.py
|
||||
Native companion: provisioning, delayed summon, ownership, real item target, leash confirmation/timeout, reuse and cleanup passed.
|
||||
|
||||
TEST tests/clientless/test_clientless_damage_notifications.py
|
||||
Production damage handoff: 16 concurrent map-worker writers, ordered GUID-only events, clientless-only/positive damage gates and post-health notification passed.
|
||||
|
||||
TEST tests/clientless/test_clientless_near_teleport_observer.py
|
||||
Production near-teleport observer packet includes actual mover GUID and destination; clientless timestamp refreshed, regular client timestamp preserved.
|
||||
|
||||
TEST tests/clientless/test_clientless_skill_preparation.py
|
||||
Production offline skill preparation: native tier caps, no downgrading, rank/level/race/tier gates and no modification of online players passed
|
||||
|
||||
TEST tests/clientless/test_clientless_social_notifications.py
|
||||
Production social/helper queues: concurrent GUID-only delivery, bounded queues, human/self/zero-damage gates, pet attribution and lethal-cleanup ordering passed
|
||||
|
||||
TEST tests/clientless/test_default_phase.py
|
||||
Native PhaseShift: implicit/default 169 visibility, genuine custom-phase separation and reference updates passed.
|
||||
|
||||
TEST tests/clientless/test_empty_spell_effect.py
|
||||
Native empty spell effects: poisoned-memory scaling initialization, Lock and Load cleared slot, active effect values and all-empty spell values passed
|
||||
|
||||
TEST tests/clientless/test_flight_area_query.py
|
||||
Native terrain query map/phase, area/zone ordering and cache passed.
|
||||
|
||||
TEST tests/clientless/test_flight_handoff.py
|
||||
Flight handoff before spline end, terminal landing, return corners, collision stop and actual distance passed.
|
||||
|
||||
TEST tests/clientless/test_flight_policy.py
|
||||
Flight native eligibility, license/profile/zone policy, RP costs and fail-safe return decisions passed.
|
||||
|
||||
TEST tests/clientless/test_follow_spline_velocity.py
|
||||
Native follow: actual player/creature spline velocity, client gait and independent follower speeds passed.
|
||||
|
||||
TEST tests/clientless/test_free_flight.py
|
||||
Flight geometry passed: takeoff/landing, smoothed peak, ceiling, lateral/climbing avoidance, missing terrain and blocked corridors.
|
||||
|
||||
TEST tests/clientless/test_free_flight_planner.py
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
|
||||
TEST tests/clientless/test_ground_exit_continuation.py
|
||||
optional exits: repeated probes, retained route, delayed success, forward resume, flight fallback passed
|
||||
|
||||
TEST tests/clientless/test_item_equip_cooldown.py
|
||||
Native item equip cooldown: zero/sentinel/missing spells safely skipped, valid use cooldown preserved and longer/disabled cooldowns untouched passed
|
||||
|
||||
TEST tests/clientless/test_local_spline_segments.py
|
||||
Production local spline clipping passes native path-length validation, tiny remainders and 1000 sampled paths.
|
||||
|
||||
TEST tests/clientless/test_lua_reload.py
|
||||
Lua reload regression tests passed (production reload/bindings, real Lua 5.4).
|
||||
|
||||
TEST tests/clientless/test_player_pure_max_skill.py
|
||||
Native pure skill cap: learned skills return stored cap; missing/deleted/zero-rank skills return0.
|
||||
|
||||
TEST tests/clientless/test_portal_transfer.py
|
||||
Portal near/far ACK and denied same-map transfer regressions passed.
|
||||
|
||||
TEST tests/clientless/test_portal_use.py
|
||||
Interactive portal native click, near/far/global ACK, denial, timeout and target checks passed.
|
||||
Native portal destination discovery and unsupported/ambiguous spell rejection passed.
|
||||
Production clientless ACK completion sequence increments only after completed near/far transfers.
|
||||
|
||||
TEST tests/clientless/test_shared_group_route.py
|
||||
Production generic shared routes: same edges/taxi/free flight, independent execution state, final local goal, late catch-up, permissions and stale-goal rejection passed.
|
||||
|
||||
TEST tests/clientless/test_taxi_import_disabled.py
|
||||
Taxi importer preserves disabled rows and their reasons.
|
||||
|
||||
TEST tests/clientless/test_transport.py
|
||||
Transport dock, frame, recorder, cross-map copy and ride regressions passed
|
||||
|
||||
TEST tests/clientless/test_transport_grid_loading.py
|
||||
Core transport grid initialization regressions passed (no CPC dependency).
|
||||
|
||||
TOTAL 80 FAILED []
|
||||
@@ -0,0 +1,6 @@
|
||||
[1/6] cd /home/wow_admin/wow_cata_server/source/TrinityCore && /usr/bin/cmake -DBUILDDIR="/home/wow_admin/wow_cata_server/build/debug" -P /home/wow_admin/wow_cata_server/source/TrinityCore/cmake/genrev.cmake /home/wow_admin/wow_cata_server/build/debug
|
||||
[2/6] Building CXX object src/server/game/CMakeFiles/game.dir/World/ClientlessLuaEngine.cpp.o
|
||||
[3/6] Building CXX object src/server/game/CMakeFiles/game.dir/World/AdventureGroupTravelMgr.cpp.o
|
||||
[4/6] Building CXX object src/server/game/CMakeFiles/game.dir/World/ClientlessActionExecutorMgr.cpp.o
|
||||
[5/6] Linking CXX static library src/server/game/libgame.a
|
||||
[6/6] Linking CXX executable src/server/worldserver/worldserver
|
||||
@@ -0,0 +1,26 @@
|
||||
TrinityCore rev. a758239da956+ 2026-10-28 22:37:18 +0100 (feature/clientless-player-core branch) (Unix, Debug, Static) (worldserver-daemon)
|
||||
World initialized in 0 minutes 15 seconds
|
||||
TrinityCore rev. a758239da956+ 2026-10-28 22:37:18 +0100 (feature/clientless-player-core branch) (Unix, Debug, Static) (worldserver-daemon) ready...
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=10/2/10/2 known=25 rotations=0 manager=5 error=''
|
||||
pool=0 faction=alliance persistent=1 target=10 online=2 pending=0 saved=10
|
||||
pool=1 faction=alliance persistent=0 target=2 online=1 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=10 online=1 pending=0 saved=10
|
||||
pool=3 faction=horde persistent=0 target=2 online=1 pending=0 saved=2
|
||||
No group travel state.
|
||||
Interactions guid=29 grouped=0 leader=0 partner=0 intent='rest' schedule=''
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=10/2/10/2 known=25 rotations=0 manager=17 error=''
|
||||
pool=0 faction=alliance persistent=1 target=10 online=7 pending=0 saved=10
|
||||
pool=1 faction=alliance persistent=0 target=2 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=10 online=6 pending=0 saved=10
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
No group travel state.
|
||||
Interactions guid=31 grouped=0 leader=0 partner=0 intent='economy' schedule=''
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=10/2/10/2 known=25 rotations=0 manager=24 error=''
|
||||
pool=0 faction=alliance persistent=1 target=10 online=10 pending=0 saved=10
|
||||
pool=1 faction=alliance persistent=0 target=2 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=10 online=10 pending=0 saved=10
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
|
||||
Final: PID183811 remains running; TCP8085 LISTEN.
|
||||
Native ungrouped interaction diagnostics work. No human-led travel acceptance performed.
|
||||
Existing terrain719/config/script warnings remain; no fatal/assertion observed in this startup.
|
||||
@@ -0,0 +1,263 @@
|
||||
TEST tests/clientless/test_adventure_area_node.py
|
||||
Production area destination excludes outside and unreachable graph nodes.
|
||||
|
||||
TEST tests/clientless/test_adventure_async_database.py
|
||||
Async creation DB contracts: prepared connection masks, native security column names, no future waits, successful-save cache publication and world-update-only loader hook passed
|
||||
|
||||
TEST tests/clientless/test_adventure_behavior_policy.py
|
||||
24-hour generation, shared intents with changing destinations, broad location classification and repetition penalties passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_class_rotation.py
|
||||
Production class rotations: persistent PvE solo pools, native rank aura IDs, combo/holy power/proc/execute/resource gates, Eclipse and healer coverage passed
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_exercise.py
|
||||
Production exercise: stance/charge/melee/casts, native validation delegation, bounded lifetime, invalid targets and unchanged native phases passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_preparation.py
|
||||
Production talent learner: native tiers/dependencies/class gates, all 26 legal level60 points, no capstone bypass and repeat safety passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_combat_reactions.py
|
||||
Production combat focus, damage ordering, risk filters, corpse radius/delay, flight/group override, blocked escape, danger avoidance and malus-free persisted fallback passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_day_persistence.py
|
||||
Production day planner: all 24 TINYINT slots restored across logins, incomplete/old-day replacement, full transaction and curiosity/level weighting passed
|
||||
|
||||
TEST tests/clientless/test_adventure_economy.py
|
||||
Economy: native service roles, friendly/phase/LOS/bounds gates, no bot service targets and coherent performative cues passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_economy_catalog.py
|
||||
Economy catalog: eleven actions, three faction-bound service anchors, native flag gates and idempotent preservation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_encounter.py
|
||||
Production encounters: bot-only exclusion, mixed mode, extension hook, wait/revive, wipe fallback/reentry/gather/return, living-player priority, kick exit and offline cleanup passed
|
||||
|
||||
TEST tests/clientless/test_adventure_equipment_maintenance.py
|
||||
Production gear maintenance: same birth/retention gate rejects wrong armor/stats, malformed effects, level, temporary, reputation, map, holiday, native-use and slot mismatches passed
|
||||
|
||||
TEST tests/clientless/test_adventure_exploration.py
|
||||
Exploration: visible native props only, no chests/traps/furniture, phase/map/LOS/range gates and contextual preparation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_exploration_catalog.py
|
||||
Exploration catalog: ten actions, shared scenes, default wander replacement, explicit category eligibility and preserved edits passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_equipment.py
|
||||
Production equipment affinity: mana-only/direct/triggered procs, caster/physical stat effects and bounded cycles passed
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_ownership.py
|
||||
Production generator commands: batch bounds, dedicated ownership, persistent/online/removing retirement protection and retired login refusal passed
|
||||
|
||||
TEST tests/clientless/test_adventure_generator_policy.py
|
||||
Production generator: 6144 cultural names and 61440 real Lua profiles, profession coherence, personality ranges, escaping and equipment/armor gates passed
|
||||
|
||||
TEST tests/clientless/test_adventure_graph_handover.py
|
||||
Production graph handover waits for ship/taxi/flight/teleport and stops at safe road/node boundaries.
|
||||
|
||||
TEST tests/clientless/test_adventure_ground_avoidance.py
|
||||
Production ground avoidance: harmful/friendly, phase169, height, reachable safe endpoint, rejected paths and reuse without cast/movement thrashing passed
|
||||
|
||||
TEST tests/clientless/test_adventure_group_plan.py
|
||||
Production group plans: leader meeting/goal/deadline inheritance, untouched personal day, manual preparation and instance-state guards passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_group_travel.py
|
||||
Production group travel: distinct slots, phase169 cliff safety, width, mounts, flight/kick landing, taxi grace, portal queue, bounded separation and recorded-road validation passed
|
||||
|
||||
TEST tests/clientless/test_adventure_groups.py
|
||||
Production recruitment: capitals, different goals, native inviter leadership, joining existing groups, capacity/reservations, raid conversion, planned transition and local contact passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance.py
|
||||
Production instance lifecycle: time budget, true entry, denied/shared entry, native rear exit, restart, expired copy, late arrival, HP and return replay passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_autoresume.py
|
||||
Deferred instance script: missing schema/visits stays idle; no login work on startup; saved visitors resume with Adventure controllers and native accounts.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_begin.py
|
||||
Production entrance travel uses the existing location planner, requires mapping and retains normal social/area travel.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_catalog.py
|
||||
Instance migrations: outside entrances only, native graph preserved, disabled/missing transitions excluded, edits and saved visits preserved.
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_loader.py
|
||||
Production instance recovery: no startup DB/login work, asynchronous delayed/paced manual recovery, generated-bot quota ownership, absent-schema compatibility and existing preparation ticks passed
|
||||
|
||||
TEST tests/clientless/test_adventure_instance_persistence.py
|
||||
Production instance persistence: phases, original deadline, instance ID, transactional HP marker, failed commit and intent release passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_intent_state.py
|
||||
Production intent arrival, failed/partial travel, deadlines and safe schedule handover passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_interactions.py
|
||||
production interaction manager: invitations, factions, reservations, follow, AFK and deferred departure passed
|
||||
/tmp/tmp4c3prj7a/test.cpp: In member function ‘void AdventureInteractionMgr::Leave(Player*, Record&, const char*)’:
|
||||
/tmp/tmp4c3prj7a/test.cpp:143:69: warning: unused parameter ‘reason’ [-Wunused-parameter]
|
||||
143 | void AdventureInteractionMgr::Leave(Player* p,Record& r,char const* reason)
|
||||
| ~~~~~~~~~~~~^~~~~~
|
||||
|
||||
TEST tests/clientless/test_adventure_leisure.py
|
||||
Leisure: substantial curved MMAP routes, mirrored return, interrupted return, rejected corridors, actual arrival, companion follow, riding, flight and fishing passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_leisure_catalog.py
|
||||
Leisure migration: native city anchor, shared scene references, pet-walk mapping and preservation of edited weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_location_import.py
|
||||
Locations: actual Debug SMALLINT reads retain continent IDs; explicit location eligibility and edited weight overrides passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_manager_inventory.py
|
||||
Production inventory maintenance: only full backpacks, native stack trimming, level-appropriate supplies, tools, leash, fishing pole, containers and untouched equipped slots passed
|
||||
|
||||
TEST tests/clientless/test_adventure_micro_reset.py
|
||||
Micro cleanup ends physical local movement, preserves transit and does not stand up dead players.
|
||||
|
||||
TEST tests/clientless/test_adventure_population.py
|
||||
Production population: four independent faction/persistence targets, fair selection, pending reservations, retries, existing inventory, once-per-boot rotation and connected/persistent protection passed
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_catalog.py
|
||||
Profession catalog: native workstation roles, no workshop/resource inference, idempotence and preserved edits passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_profile.py
|
||||
Production profession parser, real Lua profiles, primary restrictions and secondary permissions passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_sightline.py
|
||||
Native workstation working-surface sightline and blocked geometry rejection passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profession_targets.py
|
||||
Production profession targets: native locks, phase/spawn/loot, stations, corpses, history and trainers passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_profile_selection.py
|
||||
Production profile selection: real Lua ID dictionaries, exact 9:1 companion weighting, zero/negative/infinite/NaN/oversized weights rejected and legacy companion fallback passed
|
||||
|
||||
TEST tests/clientless/test_adventure_pvp.py
|
||||
Production PvP selector: level boundaries, radius, factions, native legality, navigation, intent, personality and resources passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_repair_catalog.py
|
||||
Repair action catalog: proper native service requirement, economy-only intent and preserved administrator weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest.py
|
||||
Recovery: authored places, bounds, arrival, occupancy, full rest duration, failure, reload and interruption passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_fire.py
|
||||
Rest fire: shared scene mapping, additive migration, preserved weights and authored creation-place policy passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_space.py
|
||||
Sleep footprint: furniture, body extent, overhead collision, ledges, stairs, missing heights, rotation and scale passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rest_targets.py
|
||||
Native sleep targets: chair exclusion, phase, despawn, floor search, indoors, water, storey, occupancy, bed/surface preference passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_rotation.py
|
||||
Production rotation: connected/native-online protection, ownership refusal, native delete failure, world cleanup failure and journal-retained retry before successful profile/plan/state removal passed
|
||||
/tmp/tmpthw2w5iq/test.cpp: In instantiation of ‘std::string Trinity::StringFormat(const char*, A ...) [with A = {}; std::string = std::__cxx11::basic_string<char>]’:
|
||||
/tmp/tmpthw2w5iq/test.cpp:22:126: required from ‘void Tx::PAppend(const char*, A ...) [with A = {}]’
|
||||
22 | struct Tx{std::vector<std::string>sql;template<class...A>void PAppend(char const*f,A...a){sql.push_back(Trinity::StringFormat(f,a...));}};
|
||||
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
|
||||
/tmp/tmpthw2w5iq/test.cpp:51:75: required from here
|
||||
51 | auto barrier=CharacterDatabase.BeginTransaction();barrier->PAppend("DO 0");
|
||||
| ~~~~~~~~~~~~~~~~^~~~~~~~
|
||||
/tmp/tmpthw2w5iq/test.cpp:11:113: warning: format not a string literal and no format arguments [-Wformat-security]
|
||||
11 | namespace Trinity{template<class...A>std::string StringFormat(char const* f,A...args){char b[4096];std::snprintf(b,sizeof(b),f,args...);return b;}}
|
||||
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
TEST tests/clientless/test_adventure_social.py
|
||||
Production social flow: approach before talk, coherent greeting/talk/listen/farewell, lost targets, native chair confirmation and real fire confirmation passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_social_fire.py
|
||||
Shared fire: native detection/provisioning, buildings/city/parent/zone restrictions, existing fires and outdoor/water checks passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supplies.py
|
||||
Production supplies: exact10% boundary, bandage-before-food, native lockout fallback, recovery completion, combat potions, mana-only drinking and daily/post-combat top-ups passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supply_catalog.py
|
||||
Supply migrations: all five roles, level60 netherweave tier, editable/disabled catalog preservation and persistent daily stamp passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_supply_items.py
|
||||
Production native-item delegation: usable bandage tiers, native cooldown/lockout gates, real inventory consumption, self targeting and level60 secondary caps passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_talent_templates.py
|
||||
Canonical Cata PvE builds: 4.3.4 class/tree/rank/prerequisite gates, all 1..41 point budgets, solo selection coverage passed
|
||||
|
||||
TEST tests/clientless/test_adventure_training_catalog.py
|
||||
Training catalog: real dummy requirement, leisure-only intent, bounded duration and preserved administrator weights passed.
|
||||
|
||||
TEST tests/clientless/test_adventure_walk.py
|
||||
Production travel gait reaches native spline, survives repaths, prevents mounting and preserves legacy running defaults.
|
||||
|
||||
TEST tests/clientless/test_clientless_character_factory.py
|
||||
Production native factory: character/profile atomicity, failed preparation/commit, cache publication order, account/security/name/cap gates passed
|
||||
|
||||
TEST tests/clientless/test_clientless_companion.py
|
||||
Native companion: provisioning, delayed summon, ownership, real item target, leash confirmation/timeout, reuse and cleanup passed.
|
||||
|
||||
TEST tests/clientless/test_clientless_damage_notifications.py
|
||||
Production damage handoff: 16 concurrent map-worker writers, ordered GUID-only events, clientless-only/positive damage gates and post-health notification passed.
|
||||
|
||||
TEST tests/clientless/test_clientless_near_teleport_observer.py
|
||||
Production near-teleport observer packet includes actual mover GUID and destination; clientless timestamp refreshed, regular client timestamp preserved.
|
||||
|
||||
TEST tests/clientless/test_clientless_skill_preparation.py
|
||||
Production offline skill preparation: native tier caps, no downgrading, rank/level/race/tier gates and no modification of online players passed
|
||||
|
||||
TEST tests/clientless/test_clientless_social_notifications.py
|
||||
Production social/helper queues: concurrent GUID-only delivery, bounded queues, human/self/zero-damage gates, pet attribution and lethal-cleanup ordering passed
|
||||
|
||||
TEST tests/clientless/test_default_phase.py
|
||||
Native PhaseShift: implicit/default 169 visibility, genuine custom-phase separation and reference updates passed.
|
||||
|
||||
TEST tests/clientless/test_empty_spell_effect.py
|
||||
Native empty spell effects: poisoned-memory scaling initialization, Lock and Load cleared slot, active effect values and all-empty spell values passed
|
||||
|
||||
TEST tests/clientless/test_flight_area_query.py
|
||||
Native terrain query map/phase, area/zone ordering and cache passed.
|
||||
|
||||
TEST tests/clientless/test_flight_handoff.py
|
||||
Flight handoff before spline end, terminal landing, return corners, collision stop and actual distance passed.
|
||||
|
||||
TEST tests/clientless/test_flight_policy.py
|
||||
Flight native eligibility, license/profile/zone policy, RP costs and fail-safe return decisions passed.
|
||||
|
||||
TEST tests/clientless/test_follow_spline_velocity.py
|
||||
Native follow: actual player/creature spline velocity, client gait and independent follower speeds passed.
|
||||
|
||||
TEST tests/clientless/test_free_flight.py
|
||||
Flight geometry passed: takeoff/landing, smoothed peak, ceiling, lateral/climbing avoidance, missing terrain and blocked corridors.
|
||||
|
||||
TEST tests/clientless/test_free_flight_planner.py
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
|
||||
TEST tests/clientless/test_ground_exit_continuation.py
|
||||
optional exits: repeated probes, retained route, delayed success, forward resume, flight fallback passed
|
||||
|
||||
TEST tests/clientless/test_group_flight_follow.py
|
||||
Moving-target flight: bounded phased corridors, obstacle hold, ceiling rejection, aerial formation hold, safe landing and return fallback passed
|
||||
|
||||
TEST tests/clientless/test_item_equip_cooldown.py
|
||||
Native item equip cooldown: zero/sentinel/missing spells safely skipped, valid use cooldown preserved and longer/disabled cooldowns untouched passed
|
||||
|
||||
TEST tests/clientless/test_local_spline_segments.py
|
||||
Production local spline clipping passes native path-length validation, tiny remainders and 1000 sampled paths.
|
||||
|
||||
TEST tests/clientless/test_lua_reload.py
|
||||
Lua reload regression tests passed (production reload/bindings, real Lua 5.4).
|
||||
|
||||
TEST tests/clientless/test_player_pure_max_skill.py
|
||||
Native pure skill cap: learned skills return stored cap; missing/deleted/zero-rank skills return0.
|
||||
|
||||
TEST tests/clientless/test_portal_transfer.py
|
||||
Portal near/far ACK and denied same-map transfer regressions passed.
|
||||
|
||||
TEST tests/clientless/test_portal_use.py
|
||||
Interactive portal native click, near/far/global ACK, denial, timeout and target checks passed.
|
||||
Native portal destination discovery and unsupported/ambiguous spell rejection passed.
|
||||
Production clientless ACK completion sequence increments only after completed near/far transfers.
|
||||
|
||||
TEST tests/clientless/test_shared_group_route.py
|
||||
Production generic shared routes: same edges/taxi/free flight, independent execution state, final local goal, late catch-up, permissions and stale-goal rejection passed.
|
||||
|
||||
TEST tests/clientless/test_taxi_import_disabled.py
|
||||
Taxi importer preserves disabled rows and their reasons.
|
||||
|
||||
TEST tests/clientless/test_transport.py
|
||||
Transport dock, frame, recorder, cross-map copy and ride regressions passed
|
||||
|
||||
TEST tests/clientless/test_transport_grid_loading.py
|
||||
Core transport grid initialization regressions passed (no CPC dependency).
|
||||
|
||||
TOTAL 82 FAILED []
|
||||
@@ -0,0 +1,11 @@
|
||||
Clientless.Adventure.Loader.Enabled = 0
|
||||
Clientless.Adventure.Loader.Alliance.Persistent = 0
|
||||
Clientless.Adventure.Loader.Alliance.Temporary = 0
|
||||
Clientless.Adventure.Loader.Horde.Persistent = 0
|
||||
Clientless.Adventure.Loader.Horde.Temporary = 0
|
||||
Clientless.Adventure.Loader.IntervalMs = 2000
|
||||
Clientless.Adventure.Loader.MinLevel = 1
|
||||
Clientless.Adventure.Loader.MaxLevel = 85
|
||||
Clientless.Adventure.Loader.RotationPercent = 15
|
||||
Clientless.Adventure.Loader.RotationMinAgeHours = 24
|
||||
Clientless.Adventure.Manager.IntervalSeconds = 300
|
||||
@@ -0,0 +1,20 @@
|
||||
zones
|
||||
78
|
||||
Table Create Table
|
||||
vcore_adventure_day CREATE TABLE `vcore_adventure_day` (\n `character_guid` int(10) unsigned NOT NULL,\n `local_date` int(10) unsigned NOT NULL,\n `hour_slot` tinyint(3) unsigned NOT NULL,\n `intent` varchar(32) NOT NULL,\n `location_key` varchar(100) NOT NULL,\n PRIMARY KEY (`character_guid`,`local_date`,`hour_slot`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
|
||||
character_guid name level race class online persistent state profile_bytes
|
||||
27 Dagri 60 3 1 0 0 retired 871
|
||||
28 Jarana 60 8 1 0 0 retired 870
|
||||
29 Aelion 60 4 1 1 0 ready 1761
|
||||
30 Zanzan 60 8 1 1 0 ready 1749
|
||||
31 Lenara 60 22 8 1 0 ready 1740
|
||||
32 Aldren 60 5 6 1 0 ready 1765
|
||||
33 Tinkbin 1 7 1 0 1 ready 1456
|
||||
34 Sylaria 1 10 4 0 1 ready 1478
|
||||
35 Karggan 85 3 5 0 1 ready 1530
|
||||
36 Edwin 85 5 1 0 1 ready 1543
|
||||
38 Renaarna 85 22 5 0 0 ready 1497
|
||||
account_id faction
|
||||
7 1
|
||||
8 2
|
||||
@@ -0,0 +1,4 @@
|
||||
TrinityCore rev. d6fea6ee6831+ 2026-10-28 15:00:41 +0100 (feature/clientless-player-core branch) (Unix, Debug, Static) (worldserver-daemon)
|
||||
World initialized in 0 minutes 11 seconds
|
||||
TrinityCore rev. d6fea6ee6831+ 2026-10-28 15:00:41 +0100 (feature/clientless-player-core branch) (Unix, Debug, Static) (worldserver-daemon) ready...
|
||||
No clientless sessions auto-started with all four targets zero, despite saved generated instance visit36.
|
||||
@@ -0,0 +1,25 @@
|
||||
World initialized in 0 minutes 11 seconds
|
||||
Adventure GUID 29: enabled=0 schedule=0 phase=0 intent='' location='' micro='' deadline=0 detail='stopped'
|
||||
TC> Adventure GUID 31: enabled=0 schedule=0 phase=0 intent='' location='' micro='' deadline=0 detail='stopped'
|
||||
Interactions guid=29 grouped=0 leader=0 partner=0 intent='' schedule=''
|
||||
Interactions guid=31 grouped=0 leader=0 partner=0 intent='' schedule=''
|
||||
TC> Adventure GUID 30: enabled=1 schedule=0 phase=1 intent='social' location='poi_npc_300050' micro='' deadline=1793208319 detail='travelling to poi_npc_300050'
|
||||
TC> Adventure GUID 32: enabled=1 schedule=0 phase=1 intent='social' location='poi_npc_321922' micro='' deadline=1793208319 detail='waiting for safe player/transport state'
|
||||
TC> Adventure loader enabled=0 schema=0 busy=0 pools=0/0/0/0 known=0 rotations=0 manager=4 error=''
|
||||
pool=0 faction=alliance persistent=1 target=0 online=0 pending=0 saved=0
|
||||
pool=1 faction=alliance persistent=0 target=0 online=0 pending=0 saved=0
|
||||
pool=2 faction=horde persistent=1 target=0 online=0 pending=0 saved=0
|
||||
pool=3 faction=horde persistent=0 target=0 online=0 pending=0 saved=0
|
||||
TC> All players saved.
|
||||
TC>Adventure GUID 29: enabled=0 schedule=0 phase=0 intent='' location='' micro='' deadline=0 detail='stopped'
|
||||
TC> Adventure GUID 31: enabled=0 schedule=0 phase=0 intent='' location='' micro='' deadline=0 detail='stopped'
|
||||
Interactions guid=29 grouped=0 leader=0 partner=0 intent='' schedule=''
|
||||
Interactions guid=31 grouped=0 leader=0 partner=0 intent='' schedule=''
|
||||
TC> Adventure GUID 30: enabled=1 schedule=0 phase=2 intent='social' location='poi_tele_823' micro='social_comment' deadline=1793208765 detail='social scene: comment'
|
||||
TC>Adventure GUID 32: enabled=1 schedule=0 phase=2 intent='social' location='poi_npc_321922' micro='social_listen' deadline=1793208766 detail='social scene: listen'
|
||||
TC> Adventure loader enabled=0 schema=0 busy=0 pools=0/0/0/0 known=0 rotations=0 manager=4 error=''
|
||||
pool=0 faction=alliance persistent=1 target=0 online=0 pending=0 saved=0
|
||||
pool=1 faction=alliance persistent=0 target=0 online=0 pending=0 saved=0
|
||||
pool=2 faction=horde persistent=1 target=0 online=0 pending=0 saved=0
|
||||
pool=3 faction=horde persistent=0 target=0 online=0 pending=0 saved=0
|
||||
TC> All players saved.
|
||||
@@ -0,0 +1,5 @@
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=10/2/10/2 known=25 rotations=0 manager=24 error=''
|
||||
pool=0 faction=alliance persistent=1 target=10 online=10 pending=0 saved=10
|
||||
pool=1 faction=alliance persistent=0 target=2 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=10 online=10 pending=0 saved=10
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
@@ -0,0 +1,117 @@
|
||||
guid name level talentTree persistent state
|
||||
33 Tinkbin 1 0 0 1 ready
|
||||
34 Sylaria 1 0 0 1 ready
|
||||
35 Karggan 85 795 0 1 ready
|
||||
36 Edwin 85 746 0 1 ready
|
||||
37 Elaisia 60 845 0 0 ready
|
||||
guid slot itemEntry
|
||||
33 0 63278
|
||||
33 1 27945
|
||||
33 2 59113
|
||||
33 4 3733
|
||||
33 5 65705
|
||||
33 6 6087
|
||||
33 7 57417
|
||||
33 8 60907
|
||||
33 9 15463
|
||||
33 10 56714
|
||||
33 11 59116
|
||||
33 12 12846
|
||||
33 13 40483
|
||||
33 14 60927
|
||||
33 15 65687
|
||||
33 16 56691
|
||||
33 19 54443
|
||||
33 20 54443
|
||||
33 21 54443
|
||||
33 22 54443
|
||||
34 0 9978
|
||||
34 1 27945
|
||||
34 2 59112
|
||||
34 4 61050
|
||||
34 5 59091
|
||||
34 6 56699
|
||||
34 7 2033
|
||||
34 8 60929
|
||||
34 9 60939
|
||||
34 10 57717
|
||||
34 11 59114
|
||||
34 12 12846
|
||||
34 13 40483
|
||||
34 14 65721
|
||||
34 15 56679
|
||||
34 16 6504
|
||||
34 17 28979
|
||||
34 19 54443
|
||||
34 20 54443
|
||||
34 21 54443
|
||||
34 22 54443
|
||||
35 0 75073
|
||||
35 1 58699
|
||||
35 2 75091
|
||||
35 4 75088
|
||||
35 5 75086
|
||||
35 6 75072
|
||||
35 7 75095
|
||||
35 8 75098
|
||||
35 9 75063
|
||||
35 10 75068
|
||||
35 11 56432
|
||||
35 12 58614
|
||||
35 13 56351
|
||||
35 14 75065
|
||||
35 15 63461
|
||||
35 17 65172
|
||||
35 19 54443
|
||||
35 20 54443
|
||||
35 21 54443
|
||||
35 22 54443
|
||||
36 0 75126
|
||||
36 1 75078
|
||||
36 2 75119
|
||||
36 4 75135
|
||||
36 5 75123
|
||||
36 6 75136
|
||||
36 7 75120
|
||||
36 8 75124
|
||||
36 9 75122
|
||||
36 10 58648
|
||||
36 11 75071
|
||||
36 12 56132
|
||||
36 13 73164
|
||||
36 14 75077
|
||||
36 15 56342
|
||||
36 19 54443
|
||||
36 20 54443
|
||||
36 21 54443
|
||||
36 22 54443
|
||||
37 0 77867
|
||||
37 1 21809
|
||||
37 2 21805
|
||||
37 4 23300
|
||||
37 5 22197
|
||||
37 6 13498
|
||||
37 7 31125
|
||||
37 8 22205
|
||||
37 9 77734
|
||||
37 10 12058
|
||||
37 11 19873
|
||||
37 12 19947
|
||||
37 13 21488
|
||||
37 14 22337
|
||||
37 15 19104
|
||||
37 16 18756
|
||||
37 19 54443
|
||||
37 20 54443
|
||||
37 21 54443
|
||||
37 22 54443
|
||||
guid spells
|
||||
33 24
|
||||
34 15
|
||||
35 109
|
||||
36 110
|
||||
37 85
|
||||
guid talent_spells
|
||||
35 22
|
||||
36 21
|
||||
37 13
|
||||
@@ -0,0 +1,3 @@
|
||||
guid items inventory_hash
|
||||
21 26 c684ea37abcbdce68e151d144c823fb43abd94f0ec860e03e35738845e37172a
|
||||
26 24 e1094ed84b20084243dac5338d88814eb54c3bc4ddd3ed64a1a4bca455013a93
|
||||
@@ -0,0 +1,3 @@
|
||||
guid items inventory_hash
|
||||
21 26 c684ea37abcbdce68e151d144c823fb43abd94f0ec860e03e35738845e37172a
|
||||
26 24 e1094ed84b20084243dac5338d88814eb54c3bc4ddd3ed64a1a4bca455013a93
|
||||
@@ -0,0 +1,11 @@
|
||||
guid name online map position_x position_y position_z
|
||||
26 Arthoran 0 0 -11683.5 -2317.07 25.1635
|
||||
29 Aelion 1 0 -9448.55 68.236 56.3225
|
||||
30 Zanzan 1 1 -826.364 -4879.64 19.5037
|
||||
31 Lenara 1 0 -9448.55 68.236 56.3225
|
||||
32 Aldren 1 0 1082.5 1578.14 27.8342
|
||||
33 Tinkbin 0 0 -5144.9 453.528 393.232
|
||||
34 Sylaria 0 530 8713 -6649.58 72.7513
|
||||
35 Karggan 0 0 -8622.47 407.783 102.924
|
||||
36 Edwin 0 0 -7065.2 -2602.84 256.074
|
||||
38 Renaarna 0 0 -8733.04 543.374 101.123
|
||||
@@ -0,0 +1,6 @@
|
||||
character_guid local_date slots day_hash
|
||||
33 20261028 24 ae72eb55c08e2d19c7de777e50778181a1ec37e7a7ca26aeb576b1255bcd0571
|
||||
34 20261028 24 ba3246dc3dbffed593e26672ec4d15dace181d2bd8b121fa9b34e2a96b60a964
|
||||
35 20261028 24 5fe768de3439ffc9adf00b9694f9bcdd5e91f1a2d1aa46724d04173300203536
|
||||
36 20261028 24 81c6f2da21e74edda3ff32e25cb3af0764f8ec13461e8a40d6efcf816a749cd0
|
||||
37 20261028 24 5d0052af0910553f70e9ccf411da0386b58e8911a63d2ff540358cb1fe8d1f3f
|
||||
@@ -0,0 +1,6 @@
|
||||
character_guid local_date slots day_hash
|
||||
33 20261028 24 ae72eb55c08e2d19c7de777e50778181a1ec37e7a7ca26aeb576b1255bcd0571
|
||||
34 20261028 24 ba3246dc3dbffed593e26672ec4d15dace181d2bd8b121fa9b34e2a96b60a964
|
||||
35 20261028 24 5fe768de3439ffc9adf00b9694f9bcdd5e91f1a2d1aa46724d04173300203536
|
||||
36 20261028 24 81c6f2da21e74edda3ff32e25cb3af0764f8ec13461e8a40d6efcf816a749cd0
|
||||
37 20261028 24 5d0052af0910553f70e9ccf411da0386b58e8911a63d2ff540358cb1fe8d1f3f
|
||||
@@ -0,0 +1,13 @@
|
||||
Profile/planner/population implementation complete on feature/clientless-player-core.
|
||||
75/75 production-code regression scripts passed; final Debug j10 built and installed.
|
||||
Worldserver139425 ready after11s, port8085 listening. No push/commit of this WIP.
|
||||
Loader disabled; four targets0, level1..85, rotation15%, minimum age24h.
|
||||
Aelion29 and Lenara31 manually online/stopped/ungrouped in Goldshire.
|
||||
Zanzan30 and Aldren32 restored to native Durotar/Silverpine home anchors/social goals.
|
||||
New33..36 persistent and38 temporary offline. Dedicated37 rotated/deleted.
|
||||
Native level1/85 both factions, protection60, profile-level repair, day relog/restart,
|
||||
expired-day replacement and native rotation/profile+day cleanup verified.
|
||||
Generated saved instance visitor36 does not auto-start under disabled/zero quotas;
|
||||
legacy unowned recovery remains asynchronous and paced. Existing21/26 inventory hashes match.
|
||||
Large populations, visual gameplay, complete role AI and navigation improvements await acceptance.
|
||||
See population.md and SESSION-RESUME.md for contracts, caveats and exact state.
|
||||
@@ -0,0 +1,167 @@
|
||||
TEST tests/clientless/test_adventure_area_node.py
|
||||
Production area destination excludes outside and unreachable graph nodes.
|
||||
TEST tests/clientless/test_adventure_async_database.py
|
||||
Async creation DB contracts: prepared connection masks, native security column names, no future waits, successful-save cache publication and world-update-only loader hook passed
|
||||
TEST tests/clientless/test_adventure_behavior_policy.py
|
||||
24-hour generation, shared intents with changing destinations, broad location classification and repetition penalties passed.
|
||||
TEST tests/clientless/test_adventure_combat_exercise.py
|
||||
Production exercise: stance/charge/melee/casts, native validation delegation, bounded lifetime, invalid targets and unchanged native phases passed.
|
||||
TEST tests/clientless/test_adventure_combat_preparation.py
|
||||
Production talent learner: native tiers/dependencies/class gates, all 26 legal level60 points, no capstone bypass and repeat safety passed.
|
||||
TEST tests/clientless/test_adventure_combat_reactions.py
|
||||
Production combat focus, damage ordering, risk filters, corpse radius/delay, flight/group override, blocked escape, danger avoidance and malus-free persisted fallback passed.
|
||||
TEST tests/clientless/test_adventure_day_persistence.py
|
||||
Production day planner: all 24 TINYINT slots restored across logins, incomplete/old-day replacement, full transaction and curiosity/level weighting passed
|
||||
TEST tests/clientless/test_adventure_economy.py
|
||||
Economy: native service roles, friendly/phase/LOS/bounds gates, no bot service targets and coherent performative cues passed.
|
||||
TEST tests/clientless/test_adventure_economy_catalog.py
|
||||
Economy catalog: eleven actions, three faction-bound service anchors, native flag gates and idempotent preservation passed.
|
||||
TEST tests/clientless/test_adventure_equipment_maintenance.py
|
||||
Production gear maintenance: same birth/retention gate rejects wrong armor/stats, malformed effects, level, temporary, reputation, map, holiday, native-use and slot mismatches passed
|
||||
TEST tests/clientless/test_adventure_exploration.py
|
||||
Exploration: visible native props only, no chests/traps/furniture, phase/map/LOS/range gates and contextual preparation passed.
|
||||
TEST tests/clientless/test_adventure_exploration_catalog.py
|
||||
Exploration catalog: ten actions, shared scenes, default wander replacement, explicit category eligibility and preserved edits passed.
|
||||
TEST tests/clientless/test_adventure_generator_equipment.py
|
||||
Production equipment affinity: mana-only/direct/triggered procs, caster/physical stat effects and bounded cycles passed
|
||||
TEST tests/clientless/test_adventure_generator_ownership.py
|
||||
Production generator commands: batch bounds, dedicated ownership, persistent/online/removing retirement protection and retired login refusal passed
|
||||
TEST tests/clientless/test_adventure_generator_policy.py
|
||||
Production generator: 6144 cultural names and 61440 real Lua profiles, profession coherence, personality ranges, escaping and equipment/armor gates passed
|
||||
TEST tests/clientless/test_adventure_graph_handover.py
|
||||
Production graph handover waits for ship/taxi/flight/teleport and stops at safe road/node boundaries.
|
||||
TEST tests/clientless/test_adventure_group_plan.py
|
||||
Production group plans: leader meeting/goal/deadline inheritance, untouched personal day, manual preparation and instance-state guards passed.
|
||||
TEST tests/clientless/test_adventure_groups.py
|
||||
Production recruitment: capitals, different goals, native inviter leadership, joining existing groups, capacity/reservations, raid conversion, planned transition and local contact passed.
|
||||
TEST tests/clientless/test_adventure_instance.py
|
||||
Production instance lifecycle: time budget, true entry, denied/shared entry, native rear exit, restart, expired copy, late arrival, HP and return replay passed.
|
||||
TEST tests/clientless/test_adventure_instance_autoresume.py
|
||||
Deferred instance script: missing schema/visits stays idle; no login work on startup; saved visitors resume with Adventure controllers and native accounts.
|
||||
TEST tests/clientless/test_adventure_instance_begin.py
|
||||
Production entrance travel uses the existing location planner, requires mapping and retains normal social/area travel.
|
||||
TEST tests/clientless/test_adventure_instance_catalog.py
|
||||
Instance migrations: outside entrances only, native graph preserved, disabled/missing transitions excluded, edits and saved visits preserved.
|
||||
TEST tests/clientless/test_adventure_instance_loader.py
|
||||
Production instance recovery: no startup DB/login work, asynchronous delayed/paced manual recovery, generated-bot quota ownership, absent-schema compatibility and existing preparation ticks passed
|
||||
TEST tests/clientless/test_adventure_instance_persistence.py
|
||||
Production instance persistence: phases, original deadline, instance ID, transactional HP marker, failed commit and intent release passed.
|
||||
TEST tests/clientless/test_adventure_intent_state.py
|
||||
Production intent arrival, failed/partial travel, deadlines and safe schedule handover passed.
|
||||
TEST tests/clientless/test_adventure_interactions.py
|
||||
/tmp/tmpwuo364tp/test.cpp: In member function ‘void AdventureInteractionMgr::Leave(Player*, Record&, const char*)’:
|
||||
/tmp/tmpwuo364tp/test.cpp:142:69: warning: unused parameter ‘reason’ [-Wunused-parameter]
|
||||
142 | void AdventureInteractionMgr::Leave(Player* p,Record& r,char const* reason)
|
||||
| ~~~~~~~~~~~~^~~~~~
|
||||
production interaction manager: invitations, factions, reservations, follow, AFK and deferred departure passed
|
||||
TEST tests/clientless/test_adventure_leisure.py
|
||||
Leisure: substantial curved MMAP routes, mirrored return, interrupted return, rejected corridors, actual arrival, companion follow, riding, flight and fishing passed.
|
||||
TEST tests/clientless/test_adventure_leisure_catalog.py
|
||||
Leisure migration: native city anchor, shared scene references, pet-walk mapping and preservation of edited weights passed.
|
||||
TEST tests/clientless/test_adventure_location_import.py
|
||||
Locations: actual Debug SMALLINT reads retain continent IDs; explicit location eligibility and edited weight overrides passed.
|
||||
TEST tests/clientless/test_adventure_manager_inventory.py
|
||||
Production inventory maintenance: only full backpacks, native stack trimming, level-appropriate supplies, tools, leash, fishing pole, containers and untouched equipped slots passed
|
||||
TEST tests/clientless/test_adventure_micro_reset.py
|
||||
Micro cleanup ends physical local movement, preserves transit and does not stand up dead players.
|
||||
TEST tests/clientless/test_adventure_population.py
|
||||
Production population: four independent faction/persistence targets, fair selection, pending reservations, retries, existing inventory, once-per-boot rotation and connected/persistent protection passed
|
||||
TEST tests/clientless/test_adventure_profession_catalog.py
|
||||
Profession catalog: native workstation roles, no workshop/resource inference, idempotence and preserved edits passed.
|
||||
TEST tests/clientless/test_adventure_profession_profile.py
|
||||
Production profession parser, real Lua profiles, primary restrictions and secondary permissions passed.
|
||||
TEST tests/clientless/test_adventure_profession_sightline.py
|
||||
Native workstation working-surface sightline and blocked geometry rejection passed.
|
||||
TEST tests/clientless/test_adventure_profession_targets.py
|
||||
Production profession targets: native locks, phase/spawn/loot, stations, corpses, history and trainers passed.
|
||||
TEST tests/clientless/test_adventure_profile_selection.py
|
||||
Production profile selection: real Lua ID dictionaries, exact 9:1 companion weighting, zero/negative/infinite/NaN/oversized weights rejected and legacy companion fallback passed
|
||||
TEST tests/clientless/test_adventure_pvp.py
|
||||
Production PvP selector: level boundaries, radius, factions, native legality, navigation, intent, personality and resources passed.
|
||||
TEST tests/clientless/test_adventure_repair_catalog.py
|
||||
Repair action catalog: proper native service requirement, economy-only intent and preserved administrator weights passed.
|
||||
TEST tests/clientless/test_adventure_rest.py
|
||||
Recovery: authored places, bounds, arrival, occupancy, full rest duration, failure, reload and interruption passed.
|
||||
TEST tests/clientless/test_adventure_rest_fire.py
|
||||
Rest fire: shared scene mapping, additive migration, preserved weights and authored creation-place policy passed.
|
||||
TEST tests/clientless/test_adventure_rest_space.py
|
||||
Sleep footprint: furniture, body extent, overhead collision, ledges, stairs, missing heights, rotation and scale passed.
|
||||
TEST tests/clientless/test_adventure_rest_targets.py
|
||||
Native sleep targets: chair exclusion, phase, despawn, floor search, indoors, water, storey, occupancy, bed/surface preference passed.
|
||||
TEST tests/clientless/test_adventure_rotation.py
|
||||
/tmp/tmpn8583ajg/test.cpp: In instantiation of ‘std::string Trinity::StringFormat(const char*, A ...) [with A = {}; std::string = std::__cxx11::basic_string<char>]’:
|
||||
/tmp/tmpn8583ajg/test.cpp:22:126: required from ‘void Tx::PAppend(const char*, A ...) [with A = {}]’
|
||||
22 | struct Tx{std::vector<std::string>sql;template<class...A>void PAppend(char const*f,A...a){sql.push_back(Trinity::StringFormat(f,a...));}};
|
||||
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
|
||||
/tmp/tmpn8583ajg/test.cpp:51:75: required from here
|
||||
51 | auto barrier=CharacterDatabase.BeginTransaction();barrier->PAppend("DO 0");
|
||||
| ~~~~~~~~~~~~~~~~^~~~~~~~
|
||||
/tmp/tmpn8583ajg/test.cpp:11:113: warning: format not a string literal and no format arguments [-Wformat-security]
|
||||
11 | namespace Trinity{template<class...A>std::string StringFormat(char const* f,A...args){char b[4096];std::snprintf(b,sizeof(b),f,args...);return b;}}
|
||||
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
|
||||
Production rotation: connected/native-online protection, ownership refusal, native delete failure, world cleanup failure and journal-retained retry before successful profile/plan/state removal passed
|
||||
TEST tests/clientless/test_adventure_social.py
|
||||
Production social flow: approach before talk, coherent greeting/talk/listen/farewell, lost targets, native chair confirmation and real fire confirmation passed.
|
||||
TEST tests/clientless/test_adventure_social_fire.py
|
||||
Shared fire: native detection/provisioning, buildings/city/parent/zone restrictions, existing fires and outdoor/water checks passed.
|
||||
TEST tests/clientless/test_adventure_supplies.py
|
||||
Production supplies: exact10% boundary, bandage-before-food, native lockout fallback, recovery completion, combat potions, mana-only drinking and daily/post-combat top-ups passed.
|
||||
TEST tests/clientless/test_adventure_supply_catalog.py
|
||||
Supply migrations: all five roles, level60 netherweave tier, editable/disabled catalog preservation and persistent daily stamp passed.
|
||||
TEST tests/clientless/test_adventure_supply_items.py
|
||||
Production native-item delegation: usable bandage tiers, native cooldown/lockout gates, real inventory consumption, self targeting and level60 secondary caps passed.
|
||||
TEST tests/clientless/test_adventure_training_catalog.py
|
||||
Training catalog: real dummy requirement, leisure-only intent, bounded duration and preserved administrator weights passed.
|
||||
TEST tests/clientless/test_adventure_walk.py
|
||||
Production travel gait reaches native spline, survives repaths, prevents mounting and preserves legacy running defaults.
|
||||
TEST tests/clientless/test_clientless_character_factory.py
|
||||
Production native factory: character/profile atomicity, failed preparation/commit, cache publication order, account/security/name/cap gates passed
|
||||
TEST tests/clientless/test_clientless_companion.py
|
||||
Native companion: provisioning, delayed summon, ownership, real item target, leash confirmation/timeout, reuse and cleanup passed.
|
||||
TEST tests/clientless/test_clientless_damage_notifications.py
|
||||
Production damage handoff: 16 concurrent map-worker writers, ordered GUID-only events, clientless-only/positive damage gates and post-health notification passed.
|
||||
TEST tests/clientless/test_clientless_near_teleport_observer.py
|
||||
Production near-teleport observer packet includes actual mover GUID and destination; clientless timestamp refreshed, regular client timestamp preserved.
|
||||
TEST tests/clientless/test_clientless_skill_preparation.py
|
||||
Production offline skill preparation: native tier caps, no downgrading, rank/level/race/tier gates and no modification of online players passed
|
||||
TEST tests/clientless/test_clientless_social_notifications.py
|
||||
Production social/helper queues: concurrent GUID-only delivery, bounded queues, human/self/zero-damage gates, pet attribution and lethal-cleanup ordering passed
|
||||
TEST tests/clientless/test_default_phase.py
|
||||
Native PhaseShift: implicit/default 169 visibility, genuine custom-phase separation and reference updates passed.
|
||||
TEST tests/clientless/test_flight_area_query.py
|
||||
Native terrain query map/phase, area/zone ordering and cache passed.
|
||||
TEST tests/clientless/test_flight_handoff.py
|
||||
Flight handoff before spline end, terminal landing, return corners, collision stop and actual distance passed.
|
||||
TEST tests/clientless/test_flight_policy.py
|
||||
Flight native eligibility, license/profile/zone policy, RP costs and fail-safe return decisions passed.
|
||||
TEST tests/clientless/test_follow_spline_velocity.py
|
||||
Native follow: actual player/creature spline velocity, client gait and independent follower speeds passed.
|
||||
TEST tests/clientless/test_free_flight.py
|
||||
Flight geometry passed: takeoff/landing, smoothed peak, ceiling, lateral/climbing avoidance, missing terrain and blocked corridors.
|
||||
TEST tests/clientless/test_free_flight_planner.py
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
TEST tests/clientless/test_ground_exit_continuation.py
|
||||
optional exits: repeated probes, retained route, delayed success, forward resume, flight fallback passed
|
||||
TEST tests/clientless/test_item_equip_cooldown.py
|
||||
Native item equip cooldown: zero/sentinel/missing spells safely skipped, valid use cooldown preserved and longer/disabled cooldowns untouched passed
|
||||
TEST tests/clientless/test_local_spline_segments.py
|
||||
Production local spline clipping passes native path-length validation, tiny remainders and 1000 sampled paths.
|
||||
TEST tests/clientless/test_lua_reload.py
|
||||
Lua reload regression tests passed (production reload/bindings, real Lua 5.4).
|
||||
TEST tests/clientless/test_player_pure_max_skill.py
|
||||
Native pure skill cap: learned skills return stored cap; missing/deleted/zero-rank skills return0.
|
||||
TEST tests/clientless/test_portal_transfer.py
|
||||
Portal near/far ACK and denied same-map transfer regressions passed.
|
||||
TEST tests/clientless/test_portal_use.py
|
||||
Interactive portal native click, near/far/global ACK, denial, timeout and target checks passed.
|
||||
Native portal destination discovery and unsupported/ambiguous spell rejection passed.
|
||||
Production clientless ACK completion sequence increments only after completed near/far transfers.
|
||||
TEST tests/clientless/test_shared_group_route.py
|
||||
Production generic shared routes: same edges/taxi/free flight, independent execution state, final local goal, late catch-up, permissions and stale-goal rejection passed.
|
||||
TEST tests/clientless/test_taxi_import_disabled.py
|
||||
Taxi importer preserves disabled rows and their reasons.
|
||||
TEST tests/clientless/test_transport.py
|
||||
Transport dock, frame, recorder, cross-map copy and ride regressions passed
|
||||
TEST tests/clientless/test_transport_grid_loading.py
|
||||
Core transport grid initialization regressions passed (no CPC dependency).
|
||||
TOTAL 75 FAILED []
|
||||
@@ -0,0 +1,41 @@
|
||||
from pathlib import Path
|
||||
import os,re,subprocess,sys
|
||||
root=Path('/home/wow_admin/wow_cata_server/source/TrinityCore')
|
||||
conf=Path('/home/wow_admin/wow_cata_server/server/debug/etc/worldserver.conf').read_text()
|
||||
def query(kind,sql):
|
||||
h,port,u,p,db=re.search(r'^'+kind+r'DatabaseInfo\s*=\s*"([^"]+)"',conf,re.M).group(1).split(';')
|
||||
env=os.environ.copy();env['MYSQL_PWD']=p
|
||||
r=subprocess.run(['mysql','--protocol=TCP','--host='+h,'--port='+port,'--user='+u,'--database='+db,'--batch','--connect-timeout=10'],input=sql,text=True,capture_output=True,env=env)
|
||||
if r.returncode:raise SystemExit(r.stderr.replace(p,'[redacted]'))
|
||||
return r.stdout
|
||||
|
||||
mode=sys.argv[1]
|
||||
if mode=='apply':
|
||||
for kind,name in [('World','sql/custom/world/2026_10_29_00_adventure_population.sql'),('Character','sql/custom/characters/2026_10_29_00_adventure_population.sql')]:
|
||||
print(query(kind,(root/name).read_text()))
|
||||
elif mode=='audit':
|
||||
print(query('World',"SELECT COUNT(*) AS zones FROM vcore_adventure_zone; SHOW CREATE TABLE vcore_adventure_day;"))
|
||||
print(query('Character',"SELECT g.character_guid,c.name,c.level,c.race,c.class,c.online,g.persistent,g.state,LENGTH(g.profile_lua) profile_bytes FROM vcore_adventure_generated_bot g JOIN characters c ON c.guid=g.character_guid ORDER BY c.guid; SELECT * FROM vcore_adventure_rotation; SELECT * FROM vcore_adventure_bot_account;"))
|
||||
elif mode=='originals':
|
||||
print(query('Character',"SELECT ci.guid,COUNT(*) items,SHA2(GROUP_CONCAT(CONCAT(ci.item,':',ii.itemEntry) ORDER BY ci.item SEPARATOR ','),256) inventory_hash FROM character_inventory ci JOIN item_instance ii ON ii.guid=ci.item WHERE ci.guid IN(21,26) GROUP BY ci.guid;"))
|
||||
elif mode=='dayhash':
|
||||
print(query('World',"SELECT character_guid,local_date,COUNT(*) slots,SHA2(GROUP_CONCAT(CONCAT(hour_slot,':',intent,':',location_key) ORDER BY hour_slot SEPARATOR '|'),256) day_hash FROM vcore_adventure_day WHERE character_guid BETWEEN 33 AND 50 GROUP BY character_guid,local_date;"))
|
||||
elif mode=='details':
|
||||
print(query('Character',"SELECT c.guid,c.name,c.level,c.talentTree,g.persistent,g.state FROM characters c JOIN vcore_adventure_generated_bot g ON g.character_guid=c.guid WHERE c.guid>=33; SELECT ci.guid,ci.slot,i.itemEntry FROM character_inventory ci JOIN item_instance i ON i.guid=ci.item WHERE ci.guid>=33 AND ci.bag=0 AND ci.slot<23 ORDER BY ci.guid,ci.slot; SELECT s.guid,COUNT(*) spells FROM character_spell s WHERE s.guid>=33 GROUP BY s.guid; SELECT t.guid,COUNT(*) talent_spells FROM character_talent t WHERE t.guid>=33 GROUP BY t.guid;"))
|
||||
elif mode=='expire37':
|
||||
row=query('Character',"SELECT c.online FROM characters c JOIN vcore_adventure_generated_bot g ON c.guid=g.character_guid WHERE c.guid=37 AND g.persistent=0 AND g.state='ready';")
|
||||
if row.strip().splitlines()!=['online','0']:raise SystemExit('Test bot37 must be offline and temporary')
|
||||
print(query('World',"UPDATE vcore_adventure_day SET local_date=20261027 WHERE character_guid=37; SELECT character_guid,local_date,COUNT(*) slots FROM vcore_adventure_day WHERE character_guid=37 GROUP BY character_guid,local_date;"))
|
||||
elif mode=='positions':
|
||||
print(query('Character',"SELECT guid,name,online,map,position_x,position_y,position_z FROM characters WHERE guid IN(26,29,30,31,32,33,34,35,36,38);"))
|
||||
elif mode=='visits':
|
||||
print(query('Character',"SELECT character_guid,phase,block_end,location_key FROM vcore_adventure_instance_visit ORDER BY character_guid;"))
|
||||
elif mode=='homes':
|
||||
print(query('World',"SELECT id,name,map,position_x,position_y,position_z FROM game_tele WHERE id=823 OR name LIKE '%sepul%' OR name='Brill'; SELECT point_key,map,position_x,position_y,position_z FROM vcore_clientless_world_point WHERE point_key='poi_npc_321922';"))
|
||||
elif mode=='near_home':
|
||||
print(query('World',"SELECT id,name,map,position_x,position_y,position_z FROM game_tele WHERE map=0 ORDER BY POW(position_x-1097.57,2)+POW(position_y-1587.29,2) LIMIT 3;"))
|
||||
elif mode=='zone_names':
|
||||
print(query('World',"SELECT DISTINCT zone_id,region_key FROM vcore_adventure_location WHERE zone_id IN(210,33,5287,5288,616,4709,493,2817,4755,5144,5145,4815,11,51,3) ORDER BY zone_id;"))
|
||||
elif mode=='plans':
|
||||
print(query('World',"SELECT character_guid,local_date,COUNT(*) slots,MIN(hour_slot),MAX(hour_slot),COUNT(DISTINCT location_key) locations FROM vcore_adventure_day GROUP BY character_guid,local_date;"))
|
||||
else:raise SystemExit('unknown mode')
|
||||
@@ -0,0 +1,58 @@
|
||||
BOT_LOADER_LOGIN guid=33 pool=0
|
||||
Clientless player character GUID 33 (account 7) reached state=Online.
|
||||
DAY_PLAN guid=33 date=20261028 slots=24
|
||||
BOT_LOADER_LOGIN guid=34 pool=2
|
||||
Clientless player character GUID 34 (account 8) reached state=Online.
|
||||
DAY_PLAN guid=34 date=20261028 slots=24
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=1/0/1/0 known=6 rotations=0 manager=2 error=''
|
||||
pool=0 faction=alliance persistent=1 target=1 online=1 pending=0 saved=1
|
||||
pool=1 faction=alliance persistent=0 target=0 online=0 pending=0 saved=2
|
||||
pool=2 faction=horde persistent=1 target=1 online=1 pending=0 saved=1
|
||||
pool=3 faction=horde persistent=0 target=0 online=0 pending=0 saved=2
|
||||
TC> Adventure loader enabled=1 schema=1 busy=1 pools=2/0/2/0 known=6 rotations=0 manager=2 error=''
|
||||
pool=0 faction=alliance persistent=1 target=2 online=1 pending=0 saved=1
|
||||
pool=1 faction=alliance persistent=0 target=0 online=0 pending=0 saved=2
|
||||
pool=2 faction=horde persistent=1 target=2 online=1 pending=0 saved=1
|
||||
pool=3 faction=horde persistent=0 target=0 online=0 pending=0 saved=2
|
||||
BOT_LOADER_LOGIN guid=35 pool=0
|
||||
Clientless player character GUID 35 (account 7) reached state=Online.
|
||||
DAY_PLAN guid=35 date=20261028 slots=24
|
||||
BOT_LOADER_LOGIN guid=36 pool=2
|
||||
Clientless player character GUID 36 (account 8) reached state=Online.
|
||||
DAY_PLAN guid=36 date=20261028 slots=24
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=2/0/2/0 known=8 rotations=0 manager=4 error=''
|
||||
pool=0 faction=alliance persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=0 online=0 pending=0 saved=2
|
||||
pool=2 faction=horde persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=0 online=0 pending=0 saved=2
|
||||
TC>You changed level of Tinkbin to 5.
|
||||
BOT_LOADER_LOGIN guid=33 pool=0
|
||||
Clientless player character GUID 33 (account 7) reached state=Online.
|
||||
TC> Adventure loader enabled=1 schema=1 busy=1 pools=2/2/2/2 known=8 rotations=0 manager=4 error=''
|
||||
pool=0 faction=alliance persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=2 online=0 pending=0 saved=2
|
||||
pool=2 faction=horde persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=2 online=0 pending=0 saved=2
|
||||
BOT_LOADER_LOGIN guid=29 pool=1
|
||||
Clientless player character GUID 29 (account 6) reached state=Online.
|
||||
DAY_PLAN guid=29 date=20261028 slots=24
|
||||
BOT_LOADER_LOGIN guid=30 pool=3
|
||||
Clientless player character GUID 30 (account 6) reached state=Online.
|
||||
DAY_PLAN guid=30 date=20261028 slots=24
|
||||
BOT_LOADER_LOGIN guid=31 pool=1
|
||||
Clientless player character GUID 31 (account 6) reached state=Online.
|
||||
DAY_PLAN guid=31 date=20261028 slots=24
|
||||
BOT_LOADER_LOGIN guid=32 pool=3
|
||||
Clientless player character GUID 32 (account 6) reached state=Online.
|
||||
DAY_PLAN guid=32 date=20261028 slots=24
|
||||
Generated Elaisia guid=37 race=1 class=1 level=60 archetype=warrior persistent=0 seed=2 home=poi_npc_280710 (offline).
|
||||
TC>return { identity = { name = "Elaisia", home_region = "elwynn", profile_version = 2, level = 60, class = 1, specialization = 2, role = "tank", seed = 2, home_zone = 12, home_capital = 1519, favorite_zone = 1377, favorite_region = "silithus", vocation = "Wandernder Waffenschmied", background = "Herkunft: Elwynn. Sucht auf Reisen Arbeit, neue Wege und Begegnungen." }, behavior = { enabled = true, daily_schedule = true, initial_intent = 'social', initial_location = "poi_npc_280710", initial_duration_seconds = 3600, locale = 'deDE' }, professions = { primary = { "mining", "blacksmithing" } }, personality = { sociability = 0.786, adventurousness = 0.328, aggression = 0.575, home_attachment = 0.418, wanderlust = 0.713, group_loyalty = 0.603, tavern_affinity = 0.311, wilderness_affinity = 0.457, city_affinity = 0.593, danger_tolerance = 0.496 }, region_affinity = { ["elwynn"] = 2.5 }, zone_affinity = { [12] = 4.0, [1377] = 5.0, [1519] = 4.0, }, activity_affinity = { social = 0.589, adventure = 0.761, profession = 0.483, leisure = 0.267, economy = 0.351, rest = 0.513, instance = 0.643, raid = 0.180 }, inventory = { keep_items = {37460,6256,5956,2901,7005,6217} }, movement = { can_ground_mount = true, ground_mount_speed_rate = 2, ground_mounts = {[2404]=1,[2402]=2,[2409]=1,}, ground_mount_count = 3, can_free_fly = true, flight_mounts = {[32235]=2,[32239]=10,[32240]=6,}, flight_mount_count = 3, companions = {[10673]=1,}, companion_count = 1, companion_leash_item = 37460 } }
|
||||
Clientless player character GUID 37 (account 7) reached state=Online.
|
||||
DAY_PLAN guid=37 date=20261028 slots=24
|
||||
Clientless player character GUID 37 (account 7) reached state=Online.
|
||||
DAY_PLAN guid=37 date=20261028 slots=24
|
||||
TC> Adventure loader enabled=0 schema=1 busy=0 pools=2/2/2/2 known=9 rotations=0 manager=8 error=''
|
||||
pool=0 faction=alliance persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=2 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
@@ -0,0 +1,41 @@
|
||||
Clientless player character GUID 36 (account 8) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=33 pool=0
|
||||
Clientless player character GUID 33 (account 7) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=29 pool=1
|
||||
Clientless player character GUID 29 (account 6) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=34 pool=2
|
||||
Clientless player character GUID 34 (account 8) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=30 pool=3
|
||||
Clientless player character GUID 30 (account 6) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=35 pool=0
|
||||
Clientless player character GUID 35 (account 7) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=31 pool=1
|
||||
Clientless player character GUID 31 (account 6) reached state=Online.
|
||||
BOT_LOADER_LOGIN guid=32 pool=3
|
||||
Clientless player character GUID 32 (account 6) reached state=Online.
|
||||
TC>Adventure loader enabled=1 schema=1 busy=0 pools=2/2/2/2 known=9 rotations=0 manager=8 error=''
|
||||
pool=0 faction=alliance persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=2 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
TC> Adventure loader enabled=1 schema=0 busy=1 pools=2/3/2/2 known=9 rotations=0 manager=8 error=''
|
||||
pool=0 faction=alliance persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=3 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=2 online=2 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=2 online=2 pending=0 saved=2
|
||||
BOT_ROTATED_REMOVED guid=37
|
||||
BOT_LOADER_LOGIN guid=38 pool=1
|
||||
Clientless player character GUID 38 (account 7) reached state=Online.
|
||||
DAY_PLAN guid=38 date=20261028 slots=24
|
||||
TC> Adventure loader enabled=0 schema=1 busy=0 pools=0/0/0/0 known=9 rotations=0 manager=9 error=''
|
||||
pool=0 faction=alliance persistent=1 target=0 online=2 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=0 online=3 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=0 online=2 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=0 online=2 pending=0 saved=2
|
||||
TC> Clientless player character GUID 29 (account 6) reached state=Online.
|
||||
TC>Clientless player character GUID 31 (account 6) reached state=Online.
|
||||
TC>Adventure loader enabled=0 schema=1 busy=0 pools=0/0/0/0 known=9 rotations=0 manager=4 error=''
|
||||
pool=0 faction=alliance persistent=1 target=0 online=0 pending=0 saved=2
|
||||
pool=1 faction=alliance persistent=0 target=0 online=2 pending=0 saved=3
|
||||
pool=2 faction=horde persistent=1 target=0 online=0 pending=0 saved=2
|
||||
pool=3 faction=horde persistent=0 target=0 online=2 pending=0 saved=2
|
||||
@@ -0,0 +1,10 @@
|
||||
TrinityCore rev. 0173a434f49d+ 2026-10-29 01:36:35 +0100 (feature/clientless-player-core branch) (Unix, Debug, Static) (worldserver-daemon) ready...
|
||||
pool=1 faction=alliance persistent=0 target=5 online=5 pending=0 saved=5
|
||||
pool=2 faction=horde persistent=1 target=50 online=48 pending=0 saved=50
|
||||
pool=3 faction=horde persistent=0 target=5 online=5 pending=0 saved=5
|
||||
[?2004hTC>Adventure loader enabled=1 schema=1 busy=0 pools=50/5/50/5 known=110 rotations=0 manager=110 error=''
|
||||
pool=0 faction=alliance persistent=1 target=50 online=50 pending=0 saved=50
|
||||
pool=1 faction=alliance persistent=0 target=5 online=5 pending=0 saved=5
|
||||
pool=2 faction=horde persistent=1 target=50 online=50 pending=0 saved=50
|
||||
pool=3 faction=horde persistent=0 target=5 online=5 pending=0 saved=5
|
||||
PID247021; TCP8085 listening; no ADVENTURE_DISABLED, assertion or SQL collation error in this startup.
|
||||
@@ -0,0 +1,16 @@
|
||||
[
|
||||
"Area access GUID 26: revision=1 map=0 area=1497 factionMask=2 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=2 allowed=0",
|
||||
"Area access GUID 26: revision=1 map=0 area=5342 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=1 allowed=1",
|
||||
"Area access GUID 26: revision=1 map=0 area=5144 factionMask=0 minLevel=80 maxLevel=82 gap=5 knownLevel=1 preferFlight=0 nodeMask=2 allowed=0",
|
||||
"Area access GUID 32: revision=1 map=369 area=2257 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=1 allowed=0",
|
||||
"Area access GUID 32: revision=1 map=0 area=4411 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=1 allowed=0",
|
||||
"Area access GUID 32: revision=1 map=0 area=1519 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=3 allowed=0",
|
||||
"Area access GUID 26: revision=1 map=530 area=3703 factionMask=3 minLevel=60 maxLevel=85 gap=5 knownLevel=1 preferFlight=1 nodeMask=3 allowed=1",
|
||||
"Area access GUID 32: revision=1 map=530 area=3703 factionMask=3 minLevel=60 maxLevel=85 gap=5 knownLevel=1 preferFlight=1 nodeMask=3 allowed=1",
|
||||
"Area access GUID 26: revision=1 map=571 area=4564 factionMask=3 minLevel=68 maxLevel=85 gap=5 knownLevel=1 preferFlight=1 nodeMask=3 allowed=0",
|
||||
"Adventure catalogs reloaded.",
|
||||
"Area access GUID 26: revision=2 map=0 area=5342 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=0 allowed=0",
|
||||
"Area access GUID 26: revision=3 map=0 area=5342 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=1 allowed=1",
|
||||
"Adventure catalog reload failed; check migration.",
|
||||
"Area access GUID 26: revision=3 map=0 area=5342 factionMask=1 minLevel=1 maxLevel=85 gap=5 knownLevel=1 preferFlight=0 nodeMask=1 allowed=1"
|
||||
]
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"online_generated_bots": 110,
|
||||
"checked_day_slots": 2640,
|
||||
"empty_locations": 0,
|
||||
"positions_without_declared_area": 298,
|
||||
"violations": []
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
test_adventure_area_policy.py
|
||||
Area inheritance, faction intersection, level limits, flight overrides and invalid data passed.
|
||||
|
||||
test_adventure_area_segment.py
|
||||
Segment geography cache, faction isolation, reload permissions, lazy completion and terrain swaps passed.
|
||||
|
||||
test_adventure_behavior_policy.py
|
||||
24-hour generation, shared intents with changing destinations, broad location classification and repetition penalties passed.
|
||||
|
||||
test_adventure_day_persistence.py
|
||||
Production day planner: all 24 TINYINT slots restored across logins, incomplete/old-day replacement, full transaction and curiosity/level weighting passed
|
||||
|
||||
test_adventure_intent_state.py
|
||||
Production intent arrival, failed/partial travel, deadlines and safe schedule handover passed.
|
||||
|
||||
test_graph_probe_cache.py
|
||||
Graph probe cache: exact directed/map/instance keys, successful geometry only, invalidation and bounded storage passed
|
||||
|
||||
test_free_flight_planner.py
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
|
||||
test_flight_policy.py
|
||||
Flight native eligibility, license/profile/zone policy, RP costs and fail-safe return decisions passed.
|
||||
|
||||
test_adventure_group_plan.py
|
||||
Production group plans: leader meeting/goal/deadline inheritance, untouched personal day, manual preparation and instance-state guards passed.
|
||||
Production group travel: distinct slots, phase169 cliff safety, width, mounts, flight/kick landing, taxi grace, portal queue, bounded separation and recorded-road validation passed
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
@@ -0,0 +1,88 @@
|
||||
# Gebietskatalog: technische Abnahme vom 29.10.2026
|
||||
|
||||
Branch `feature/clientless-player-core`, Basiscommit `0173a434f4`, Änderungen
|
||||
noch nicht committet. Ausschließlich dedizierter Testserver und dessen Datenbank.
|
||||
|
||||
## Implementierung
|
||||
|
||||
- Gebietskatalog und Vorfahren: Fraktionsschnittmenge, Mindestlevel mit
|
||||
konfigurierbarer Toleranz, ererbte Flugpräferenz; unbekannte Freiland-Levelbereiche
|
||||
unter Stufe85 gesperrt. Keine obere Sperre für Heimkehrer über dem Gebietslevel.
|
||||
- Tagesplanung prüft Metadaten und native Gebietsauflösung der Zielkoordinaten.
|
||||
Beim Laden/Reload nur illegale Ziele ersetzen; Intents/Stunden bleiben bestehen.
|
||||
Die neuen Levelbereiche ersetzen die alte Tabelle als Laufzeitquelle.
|
||||
- Nodefreigaben für sämtliche Nodearten, automatische Flugmeisterzuordnung aus
|
||||
nativen NPC-Fraktionsvorlagen einschließlich Spawn-NPCflag-Overrides. Neutrale
|
||||
Meister bleiben beidseitig erreichbar; ungeklärte Zuordnungen werden gesperrt.
|
||||
- TravelGraph, virtuelle Brücken/Ein-/Ausstiege, tatsächliche MMAP-/aufgezeichnete
|
||||
Bodenwege, Flugtaxiabschnitte und freie Flüge berücksichtigen Zugangsregeln.
|
||||
Tiefenbahn und Sturmwind–Rut'theran-Schiff explizit Allianz. Hauptstadtportale
|
||||
prüfen ihr Zielgebiet, einschließlich direkter Portalfolge bei Spielergruppen.
|
||||
- `clientless adventure reload` übernimmt Regeln ohne Build/Installation/Restart.
|
||||
Ein ungültiger Gebietssnapshot ersetzt den bisherigen nicht.
|
||||
- Geometrieproben werden zwischen Bots wiederverwendet, inklusive nativer
|
||||
Terrain-Swaps. Berechtigungen bleiben von Fraktion/Level/aktuellem Katalog
|
||||
abhängig. Die Fluggraphsuche verwirft vor Terrainproben mathematisch sicher
|
||||
Verbindungen, die eine schon gefundene Route nicht verbessern können.
|
||||
|
||||
## Nachweise
|
||||
|
||||
Build mit unveränderter Debug-CMake-Konfiguration erfolgreich. Letztes Buildlog
|
||||
`/tmp/vcore-area-build-verified.log`; Installation jeweils erst nach beendetem
|
||||
Worldserver. Zehn Testprogramme bestanden (siehe `tests.log`), darunter echte
|
||||
Produktionsfunktionen für Planwiederherstellung, verbotene virtuelle Routen trotz
|
||||
Geometriecache, Segmentcache/Fraktionswechsel/Reload, Flugpolitik und Gruppenreise.
|
||||
|
||||
`live-access.json` dokumentiert native Serverdiagnosen:
|
||||
|
||||
- Arthoran: Unterstadt verboten, Eisenschmiede erlaubt, Vashj'ir verboten.
|
||||
- Aldren: Tiefenbahn und Allianzschiff verboten.
|
||||
- Neutraler Portalnode nach Sturmwind: nodeMask3, dennoch Horde verboten.
|
||||
- Neutraler Shattrath-Flugknoten: beide Fraktionen erlaubt.
|
||||
- Dalaran: Arthoran mit Stufe60 wegen Mindestlevel68/Toleranz5 ausgeschlossen.
|
||||
- Taxi6 im laufenden Betrieb gesperrt, per Reload wirksam, Originalwert wieder
|
||||
hergestellt und erneut erlaubt. Kein Build/Restart zwischen diesen Schritten.
|
||||
- Absichtlich ungültige Flugpräferenz2: Reload abgewiesen, gültiger Snapshot
|
||||
weiter verwendet; DB-Originalwert anschließend wiederhergestellt.
|
||||
|
||||
`plans-110.json`: Alle110 Bots geladen, 2640 persistierte Tagesplanblöcke geprüft,
|
||||
keine leeren Ziele und keine Verstöße in den hinterlegten Gebietszuordnungen.
|
||||
298Slots hatten keine explizite Gebiets-ID; diese Zahl umfasst Mehrfachnutzung
|
||||
derselben Location. Ihre Koordinaten prüft der Produktionsplaner nativ, sie sind
|
||||
nicht Teil der zusätzlichen Metadatenprüfung dieses SQL-Audits. Instanzeingänge
|
||||
können als Metadatum die Instanz-Area führen, obwohl ihr tatsächlicher Worldpoint
|
||||
außerhalb liegt; Kartentypen sind deshalb im Audit berücksichtigt.
|
||||
|
||||
## Grenzen und aufgetretene Probleme
|
||||
|
||||
Keine visuelle Gameplay-Abnahme. Wegpunkte werden mit höchstens40Yards Abstand
|
||||
geprüft, nicht jeder mathematische Punkt einer Gebietsgrenze. Bereits laufende
|
||||
native Flüge/Transporte werden bei Reload nicht gewaltsam abgebrochen. Bereits
|
||||
gestrandete Bots werden nicht teleportiert. Die früher beobachteten Taxi-Hänger
|
||||
und Todesschleifen sind damit nicht als generell behoben nachgewiesen.
|
||||
|
||||
141der455 aktiven Taxinodes konnten keinem benutzbaren statischen Flugmeister
|
||||
zugeordnet werden und bleiben zunächst geschlossen;314 wurden zugeordnet.
|
||||
Explizite NPC-Spawn-Bindungen sind über die Nodezugangstabelle möglich.
|
||||
|
||||
Ein anfänglicher SQL-Kollationskonflikt wurde durch die zur bestehenden
|
||||
Nodetabelle passende `utf8mb4_unicode_ci`-Kollation behoben. In einem frühen
|
||||
Testshutdown mit zuvor deaktivierten Botkatalogen erschien ein `GetMap`-Assert
|
||||
nach `Halting process`; bei den nachfolgenden Shutdowns nicht reproduziert.
|
||||
Rohlog dafür: `/tmp/vcore-area-start-20261029.log`. Kein solcher Assert während
|
||||
des anschließenden Laufs mit110Bots beobachtet.
|
||||
|
||||
Kalte und große Routenprüfungen verursachen im Debug-Build weiterhin einzelne
|
||||
mehrsekündige Pausen. Die Caches und Kostenuntergrenze begrenzen Zusatzarbeit,
|
||||
ersetzen aber keine gesonderte weitere Performancearbeit. Bekannte fehlende
|
||||
Mapdateien719/736 und Worlddatenfehler bleiben unabhängig davon vorhanden.
|
||||
|
||||
## Letzter installierter Stand
|
||||
|
||||
Nach dem abschließenden Gruppenportal-Guard und der nativen NPCflag-Override-
|
||||
Korrektur erneut gebaut und installiert. Frischer Start in
|
||||
`/tmp/vcore-area-start-verified-20261029.log`, PID247021. Ready-Meldung, Prozess,
|
||||
Port8085 und native Population110/0pending/errorleer geprüft. Alle vier Pools
|
||||
50/5/50/5 vollständig online. Erneuter Audit2640Slots ohne leere Ziele oder
|
||||
Metadatenverstöße. Frische Zugriffsproben siehe `final-server-smoke.log`.
|
||||
Keine ADVENTURE_DISABLED-, Assertion- oder SQL-Kollationsmeldung in diesem Start.
|
||||
@@ -0,0 +1,13 @@
|
||||
gameobject_spawn_id gameobject_entry spell_id id enabled from_node_key to_node_key allowed_factions
|
||||
200624 207692 94565 1798 1 portal_go_200624_source portal_go_200624_target 1
|
||||
200625 207693 84515 1799 1 portal_go_200625_source portal_go_200625_target 1
|
||||
200626 207695 94564 1800 1 portal_go_200626_source portal_go_200626_target 1
|
||||
200627 207694 85545 1801 1 portal_go_200627_source portal_go_200627_target 1
|
||||
211257 207690 90244 1808 1 portal_go_211257_source portal_go_211257_target 2
|
||||
211258 207689 84513 1803 1 portal_go_211258_source portal_go_211258_target 2
|
||||
211259 207687 94564 1804 1 portal_go_211259_source portal_go_211259_target 2
|
||||
211260 207686 82621 1805 1 portal_go_211260_source portal_go_211260_target 2
|
||||
211264 206595 88341 1806 1 portal_go_211264_source portal_go_211264_target 2
|
||||
219028 207688 94565 1807 1 portal_go_219028_source portal_go_219028_target 2
|
||||
220365 206594 88339 1802 1 portal_go_220365_source portal_go_220365_target 1
|
||||
220366 207691 90245 1809 1 portal_go_220366_source portal_go_220366_target 1
|
||||
|
+20
@@ -0,0 +1,20 @@
|
||||
Native portal click sent: bot=35 spawn=200624 entry=207692. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=35 spawn=200625 entry=207693. Check teleport completion and cast diagnostics.
|
||||
[?2004hTC>Native portal click sent: bot=35 spawn=200626 entry=207695. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=35 spawn=200627 entry=207694. Check teleport completion and cast diagnostics.
|
||||
[?2004hTC>Native portal click sent: bot=35 spawn=220365 entry=206594. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=35 spawn=220366 entry=207691. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=36 spawn=219028 entry=207688. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=36 spawn=211258 entry=207689. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=36 spawn=211259 entry=207687. Check teleport completion and cast diagnostics.
|
||||
[?2004hTC>Native portal click sent: bot=36 spawn=211260 entry=207686. Check teleport completion and cast diagnostics.
|
||||
TC> Area access GUID 35: revision=1 map=0 area=5057 factionMask=0 minLevel=80 maxLevel=82 gap=5 knownLevel=1 preferFlight=0 nodeMask=-1 allowed=0
|
||||
TC> Area access GUID 35: revision=1 map=0 area=5057 factionMask=0 minLevel=80 maxLevel=82 gap=5 knownLevel=1 preferFlight=0 nodeMask=-1 allowed=0
|
||||
Native portal click sent: bot=36 spawn=211264 entry=206595. Check teleport completion and cast diagnostics.
|
||||
Native portal click sent: bot=36 spawn=211257 entry=207690. Check teleport completion and cast diagnostics.
|
||||
TC> Action GUID 35: state=Failed action='travel_to_node' target='' targetGuid=0 entry=0 detail='destination node denied by area/node catalog'
|
||||
[?2004hTC>Native portal click sent: bot=36 spawn=211264 entry=206595. Check teleport completion and cast diagnostics.
|
||||
[?2004hTC>Native portal click sent: bot=36 spawn=211264 entry=206595. Check teleport completion and cast diagnostics.
|
||||
Area access GUID 36: revision=1 map=0 area=5057 factionMask=0 minLevel=80 maxLevel=82 gap=5 knownLevel=1 preferFlight=0 nodeMask=3 allowed=0
|
||||
TC> Area access GUID 36: revision=1 map=0 area=5057 factionMask=0 minLevel=80 maxLevel=82 gap=5 knownLevel=1 preferFlight=0 nodeMask=3 allowed=0
|
||||
Action GUID 36: state=Failed action='travel_to_node' target='' targetGuid=0 entry=0 detail='destination node denied by area/node catalog'
|
||||
+218
@@ -0,0 +1,218 @@
|
||||
[
|
||||
{
|
||||
"spawn": 200624,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 200625,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
646.0,
|
||||
974.921,
|
||||
566.768,
|
||||
-47.5163
|
||||
],
|
||||
"expected": [
|
||||
646.0,
|
||||
974.921,
|
||||
566.768,
|
||||
-47.5163
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 200626,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 200627,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4890.07,
|
||||
-6626.74,
|
||||
10.2846
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4890.07,
|
||||
-6626.74,
|
||||
10.2846
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 220365,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
732.0,
|
||||
-369.208,
|
||||
1058.73,
|
||||
21.7719
|
||||
],
|
||||
"expected": [
|
||||
732.0,
|
||||
-369.208,
|
||||
1058.73,
|
||||
21.7719
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 220366,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 219028,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211258,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
646.0,
|
||||
995.808,
|
||||
471.879,
|
||||
-48.1172
|
||||
],
|
||||
"expected": [
|
||||
646.0,
|
||||
995.808,
|
||||
471.879,
|
||||
-48.1172
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211259,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211260,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4032.79,
|
||||
-6318.53,
|
||||
38.6975
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4032.79,
|
||||
-6318.53,
|
||||
38.6975
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211264,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": false,
|
||||
"actual": [
|
||||
1.0,
|
||||
2031.22,
|
||||
-4330.87,
|
||||
95.771
|
||||
],
|
||||
"expected": [
|
||||
732.0,
|
||||
-603.724,
|
||||
1387.62,
|
||||
22.0498
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211257,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,219 @@
|
||||
[
|
||||
{
|
||||
"spawn": 200624,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 200625,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
646.0,
|
||||
974.921,
|
||||
566.768,
|
||||
-47.5163
|
||||
],
|
||||
"expected": [
|
||||
646.0,
|
||||
974.921,
|
||||
566.768,
|
||||
-47.5163
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 200626,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 200627,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4890.07,
|
||||
-6626.74,
|
||||
10.2846
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4890.07,
|
||||
-6626.74,
|
||||
10.2846
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 220365,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
732.0,
|
||||
-369.208,
|
||||
1058.73,
|
||||
21.7719
|
||||
],
|
||||
"expected": [
|
||||
732.0,
|
||||
-369.208,
|
||||
1058.73,
|
||||
21.7719
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 220366,
|
||||
"bot": 35,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 219028,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
5534.08,
|
||||
-3624.69,
|
||||
1567.04
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211258,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
646.0,
|
||||
995.808,
|
||||
471.879,
|
||||
-48.1172
|
||||
],
|
||||
"expected": [
|
||||
646.0,
|
||||
995.808,
|
||||
471.879,
|
||||
-48.1172
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211259,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
],
|
||||
"expected": [
|
||||
1.0,
|
||||
-9443.31,
|
||||
-958.365,
|
||||
111.012
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211260,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4032.79,
|
||||
-6318.53,
|
||||
38.6975
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4032.79,
|
||||
-6318.53,
|
||||
38.6975
|
||||
]
|
||||
},
|
||||
{
|
||||
"spawn": 211264,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
732.0,
|
||||
-603.724,
|
||||
1387.62,
|
||||
22.0498
|
||||
],
|
||||
"expected": [
|
||||
732.0,
|
||||
-603.724,
|
||||
1387.62,
|
||||
22.0498
|
||||
],
|
||||
"retest": "native click after confirmed online state; visitor cast=1"
|
||||
},
|
||||
{
|
||||
"spawn": 211257,
|
||||
"bot": 36,
|
||||
"at_source": true,
|
||||
"success": true,
|
||||
"actual": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
],
|
||||
"expected": [
|
||||
0.0,
|
||||
-4570.29,
|
||||
3478.06,
|
||||
-101.809
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,19 @@
|
||||
Id Effect EffectAmplitude EffectAura EffectAuraPeriod EffectBasePoints EffectBonusCoefficient EffectChainAmplitude EffectChainTargets EffectDieSides EffectItemType EffectMechanic EffectMiscValue EffectMiscValueB EffectPointsPerResource EffectRadiusIndex EffectRadiusMaxIndex EffectRealPointsPerLevel EffectSpellClassMaskA EffectSpellClassMaskB EffectSpellClassMaskC EffectTriggerSpell EffectImplicitTargetA EffectImplicitTargetB SpellID EffectIndex Comment
|
||||
160117 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 17 90244 0 Orgrimmar Vashjir portal: fixed SmugglersScar landing
|
||||
160118 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 17 90245 0 Stormwind Vashjir portal: fixed SmugglersScar landing
|
||||
ID EffectIndex MapID PositionX PositionY PositionZ Orientation VerifiedBuild
|
||||
90244 0 0 -4570.29 3478.06 -101.809 5.62628 0
|
||||
90245 0 0 -4570.29 3478.06 -101.809 5.62628 0
|
||||
entry data6
|
||||
206594 0
|
||||
206595 1
|
||||
207686 0
|
||||
207687 0
|
||||
207688 0
|
||||
207689 0
|
||||
207690 1
|
||||
207691 1
|
||||
207692 0
|
||||
207693 0
|
||||
207694 0
|
||||
207695 0
|
||||
|
Whitespace-only changes.
|
|
@@ -0,0 +1,13 @@
|
||||
entry type data0 data6
|
||||
206594 22 88339 0
|
||||
206595 22 88341 0
|
||||
207686 22 82621 0
|
||||
207687 22 94564 0
|
||||
207688 22 94565 0
|
||||
207689 22 84513 0
|
||||
207690 22 90244 0
|
||||
207691 22 90245 0
|
||||
207692 22 94565 0
|
||||
207693 22 84515 0
|
||||
207694 22 85545 0
|
||||
207695 22 94564 0
|
||||
|
@@ -0,0 +1 @@
|
||||
Production area destination excludes outside and unreachable graph nodes.
|
||||
@@ -0,0 +1 @@
|
||||
Portal near/far ACK and denied same-map transfer regressions passed.
|
||||
@@ -0,0 +1,3 @@
|
||||
Interactive portal native click, near/far/global ACK, denial, timeout and target checks passed.
|
||||
Native portal destination discovery and unsupported/ambiguous spell rejection passed.
|
||||
Production clientless ACK completion sequence increments only after completed near/far transfers.
|
||||
@@ -0,0 +1,5 @@
|
||||
area_id map_id parent_area_id display_name allowed_factions min_level max_level max_level_gap prefer_flight notes
|
||||
4815 0 5146 Tang'tharwald NULL 80 82 NULL NULL
|
||||
5144 0 5146 Schimmernde Weiten NULL 80 82 NULL NULL
|
||||
5145 0 5146 Abyssische Tiefen NULL 80 82 NULL NULL
|
||||
5146 0 0 Vashj'ir 0 NULL NULL NULL NULL Vashjir closed to all AdventureBots, including child areas
|
||||
|
@@ -0,0 +1,9 @@
|
||||
node_key enabled map position_x position_y position_z allowed_factions
|
||||
portal_at_4352_source 1 530 -247.677 895.675 84.38 NULL
|
||||
portal_at_4354_target 1 530 -248.113 922.9 84.3497 NULL
|
||||
portal_go_164_source 1 530 -161.318 965.41 54.2904 2
|
||||
portal_go_164_target 1 1 1776.5 -4338.8 -7.48 NULL
|
||||
id from_node_key to_node_key edge_type cost bidirectional enabled comment
|
||||
1776 portal_go_164_source portal_go_164_target portal_use 1 0 1 Native GameObject portal spawn 164
|
||||
edge_id gameobject_spawn_id gameobject_entry spell_id
|
||||
1776 164 195140 17609
|
||||
|
@@ -0,0 +1,4 @@
|
||||
id point_key category map position_x position_y position_z orientation enabled comment
|
||||
710 portal_at_4352_source travel_portal 530 -247.677 895.675 144.362 0 1 Auto-imported AreaTrigger 4352 source
|
||||
node_key allowed_factions flightmaster_spawn_id notes
|
||||
portal_go_170_source NULL NULL
|
||||
|
@@ -0,0 +1,4 @@
|
||||
Portal object import complete: spawn=164 entry=195140 spell=17609 portal_go_164_source -> portal_go_164_target (map 530 -> 1). One-way native click interaction. Existing coordinates and enabled flags preserved; inspect reload logs for rejected edges.
|
||||
[?2004hTC>Flight surface map=530 x=-247.677 y=895.675 valid=1 ground=290.508 ceiling=600.000
|
||||
Flight surface map=530 x=-247.677 y=895.675 valid=1 ground=290.508 ceiling=600.000
|
||||
Flight departure guid=49 position=(190.876 2610.930 87.284) nearFeet=84.380 rawWater=-100000.000 liquidStatus=0 liquidLevel=0.000 mounted=0 canFly=0 flying=0 falling=0
|
||||
@@ -0,0 +1,21 @@
|
||||
2026-10-29_11:36:29 INFO [server.adventurebot.navigation] DECK_MESH entry=176310 polygons=1678 error=''
|
||||
2026-10-29_11:36:29 INFO [server.adventurebot.navigation] DECK_MESH entry=176081 polygons=105 error=''
|
||||
2026-10-29_11:36:57 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=70 phase='Boarding' from='ship_sw_br' to='ship_ruttheran_br' passenger=0 detail='boarding recorded land-to-deck transition'
|
||||
2026-10-29_11:37:04 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=70 phase='Riding' from='ship_sw_br' to='ship_ruttheran_br' passenger=1 detail='aboard; waiting for destination dock'
|
||||
2026-10-29_11:37:04 INFO [server.adventurebot.navigation] DECK_WALK guid=70 points=3 length=2.00 target=(-1.750 7.039 6.144)
|
||||
2026-10-29_11:38:42 INFO [server.adventurebot.navigation] DECK_WALK guid=70 points=2 length=0.79 target=(-1.878 7.822 6.144)
|
||||
2026-10-29_11:38:42 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=70 phase='Leaving' from='ship_sw_br' to='ship_ruttheran_br' passenger=1 detail='leaving via reversed recorded transition'
|
||||
2026-10-29_11:38:44 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=70 phase='Arrived' from='ship_sw_br' to='ship_ruttheran_br' passenger=0 detail='arrived at shared destination node'
|
||||
2026-10-29_11:40:44 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Boarding' from='tram_if' to='tram_sw' passenger=0 detail='boarding recorded land-to-deck transition'
|
||||
2026-10-29_11:40:47 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Riding' from='tram_if' to='tram_sw' passenger=1 detail='aboard; waiting for destination dock'
|
||||
2026-10-29_11:41:55 INFO [server.adventurebot.navigation] DECK_WALK guid=80 points=2 length=1.07 target=(-0.265 -1.246 -10.363)
|
||||
2026-10-29_11:41:55 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Leaving' from='tram_if' to='tram_sw' passenger=1 detail='leaving via reversed recorded transition'
|
||||
2026-10-29_11:41:57 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Arrived' from='tram_if' to='tram_sw' passenger=0 detail='arrived at shared destination node'
|
||||
2026-10-29_11:48:00 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Boarding' from='tram_if' to='tram_sw' passenger=0 detail='boarding recorded land-to-deck transition'
|
||||
2026-10-29_11:48:02 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Riding' from='tram_if' to='tram_sw' passenger=1 detail='aboard; waiting for destination dock'
|
||||
2026-10-29_11:48:02 INFO [server.adventurebot.navigation] DECK_WALK guid=80 points=2 length=2.00 target=(-2.101 -0.396 -10.349)
|
||||
2026-10-29_11:49:13 INFO [server.adventurebot.navigation] DECK_WALK guid=80 points=2 length=2.02 target=(-0.265 -1.246 -10.363)
|
||||
2026-10-29_11:49:19 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Leaving' from='tram_if' to='tram_sw' passenger=1 detail='leaving via reversed recorded transition'
|
||||
2026-10-29_11:49:26 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Riding' from='tram_if' to='tram_sw' passenger=1 detail='departure during transition; retaining passenger until safe dock'
|
||||
2026-10-29_11:51:35 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Leaving' from='tram_if' to='tram_sw' passenger=1 detail='leaving via reversed recorded transition'
|
||||
2026-10-29_11:51:36 INFO [server.adventurebot.navigation] TRANSPORT_STATE guid=80 phase='Failed' from='tram_if' to='tram_sw' passenger=0 detail='cancelled at safe dock'
|
||||
@@ -0,0 +1 @@
|
||||
Production group travel: distinct slots, phase169 cliff safety, width, mounts, flight/kick landing, taxi grace, portal queue, bounded separation and recorded-road validation passed
|
||||
@@ -0,0 +1 @@
|
||||
Flight handoff before spline end, terminal landing, return corners, collision stop and actual distance passed.
|
||||
@@ -0,0 +1 @@
|
||||
Moving-target flight: bounded phased corridors, obstacle hold, ceiling rejection, aerial formation hold, safe landing and return fallback passed
|
||||
@@ -0,0 +1 @@
|
||||
Transport dock, frame, recorder, cross-map copy and ride regressions passed
|
||||
@@ -0,0 +1 @@
|
||||
Production deck controller: halt budgets, departure interruption, return-before-exit, blocked paths and reservations passed
|
||||
@@ -0,0 +1,3 @@
|
||||
/tmp/tmp2fpgi1re/Transportship.wmo.fixture polygons=1678 reachable=259 returns=259
|
||||
/tmp/tmp2fpgi1re/Subwaycar.m2.fixture polygons=105 reachable=59 returns=59
|
||||
Real deck meshes: connectivity, floor isolation, edge clearance and return paths passed
|
||||
@@ -0,0 +1,65 @@
|
||||
# Deck navigation validation
|
||||
|
||||
Build and installation succeeded with the existing Debug configuration. Added
|
||||
private Recast dependency; no external data extraction/reinstallation needed.
|
||||
Fresh worldserver PID270232 reached ready and listens on TCP8085. Console:
|
||||
/tmp/vcore-deck-start-20261029.log. Six targeted test programs passed.
|
||||
|
||||
Native diagnostics:
|
||||
|
||||
- Bravery176310:1678 polygons,259 reachable sample targets,259 return paths.
|
||||
- Subway176081:105 polygons,59 reachable sample targets,59 return paths.
|
||||
|
||||
Controlled live ship journey, Renaisia70:
|
||||
|
||||
- 11:36:57 Boarding at ship_sw_br.
|
||||
- 11:37:04 Riding/passenger1; DECK_WALK2m,3 points.
|
||||
- Native saveall during transit persisted local position
|
||||
(-1.74993,7.03908,6.14418), matching the mesh walk target.
|
||||
- Native inspect simultaneously reported stopped0 on The Bravery.
|
||||
- 11:38:42 DECK_WALK0.79m back to the recorded exit anchor.
|
||||
- 11:38:42 Leaving;11:38:44 Arrived/passenger0 at ship_ruttheran_br.
|
||||
- Temporary manual test schedule override restored to ON and acknowledged.
|
||||
|
||||
Noralin80 was positioned offline using native tele name at DeeprunTram and
|
||||
logged in for a second live check. Her normal schedule takes tram_if to tram_sw;
|
||||
no manual schedule override. Native journey completed:
|
||||
11:40:44 Boarding,11:40:47 Riding/passenger1;11:41:55 mesh return1.07m to
|
||||
Stormwind exit anchor, followed by11:41:57 Arrived/passenger0. Initial spreading
|
||||
was skipped because of an overly conservative departure budget; adjusted the
|
||||
budget to outward duration+2s, reserving return/exit time at the destination.
|
||||
The updated production scheduling regression passes.
|
||||
|
||||
No visual acceptance claimed; native geometry, controller tests and logs are
|
||||
separate evidence. Remaining user acceptance: multiple visible passengers,
|
||||
clothing/body sizes, interruption close to departure and crowded boarding.
|
||||
|
||||
Final build3 was installed after another verified clean shutdown. Fresh console
|
||||
/tmp/vcore-deck-final-20261029.log reached ready; PID270857, TCP8085 listening.
|
||||
The diagnostic for subway entry176080 also confirms105 polygons/59 return paths,
|
||||
sharing the same model cache as176081.
|
||||
|
||||
Final live subway check, Noralin80 (normal schedule, no manual override):
|
||||
|
||||
- Native offline tele name to DeeprunTram, followed by clientless login80.
|
||||
- 11:48:00 Boarding,11:48:02 Riding/passenger1 and outward DECK_WALK2.00m.
|
||||
- Native saveall persisted local(-2.1012,-0.396121,-10.3489), matching the target.
|
||||
Native inspect reported stopped0 and distance10.57 from the wagon origin,
|
||||
consistent with that local offset while the vehicle was travelling.
|
||||
- 11:49:13 return mesh walk2.02m;11:49:19 Leaving.
|
||||
- 11:49:26 vehicle departed during the recorded exit; existing safety retained
|
||||
the passenger and entered Riding/abort pending a safe recorded dock.
|
||||
- This final journey does NOT count as a successful full exit. Prior ship and
|
||||
subway journeys completed, but the final stress run exposed exit timing under
|
||||
heavy world-update stalls (CPC_PERF reported50830ms with8 ticks). Normal travel
|
||||
duration reserves cannot guarantee completing a multi-step exit across such
|
||||
stalls. No vehicle schedule was altered to hide this limitation.
|
||||
|
||||
Final source diff check passed. No schema/config changes, no commit/push.
|
||||
Ship70's manual schedule override is restored; Noralin80 remains under her normal
|
||||
schedule and the existing safe transport cancellation/recovery logic.
|
||||
|
||||
Recovery completed at11:51:36: native Leaving followed by Failed/passenger0
|
||||
with 'cancelled at safe dock'. The bot was safely detached on land and normal
|
||||
day-plan travel resumed. This is successful safety recovery, not an uninterrupted
|
||||
journey. No manual override remains.
|
||||
@@ -0,0 +1,4 @@
|
||||
Flight surface map=530 x=3358.734 y=1369.172 valid=1 ground=504.148 ceiling=916.971
|
||||
Flight departure guid=84 position=(3358.734 1369.172 514.129) nearFeet=-1087.028 rawWater=-100000.000 liquidStatus=0 liquidLevel=0.000 mounted=1 canFly=1 flying=0 falling=0
|
||||
TC> Flight surface map=530 x=-3650.900 y=316.897 valid=1 ground=48.203 ceiling=238.089
|
||||
Flight departure guid=92 position=(-3650.900 316.897 35.852) nearFeet=35.852 rawWater=-100000.000 liquidStatus=0 liquidLevel=0.000 mounted=0 canFly=0 flying=0 falling=0
|
||||
@@ -0,0 +1,80 @@
|
||||
2026-10-29_18:17:06 INFO [server.adventurebot.navigation] FLIGHT_RETURN_LANDING guid=84 target=(3353.078 1374.829 505.070)
|
||||
2026-10-29_18:17:06 INFO [server.adventurebot.navigation] FLIGHT_RESUME_AIRBORNE guid=84 ground=504.148 z=514.129
|
||||
2026-10-29_18:17:09 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=1 avoid=0 handoff=0 target=(3337.33 1356.26 514.13) detail='terrain-smoothed cruise'
|
||||
2026-10-29_18:17:09 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=2 avoid=0 handoff=0 target=(3315.92 1343.35 506.48) detail='diagonal descent'
|
||||
2026-10-29_18:17:09 INFO [server.adventurebot.navigation] FLIGHT_RETURN_LANDING guid=92 target=(-3337.327 1810.882 148.003)
|
||||
2026-10-29_18:17:09 INFO [server.adventurebot.navigation] FLIGHT_RESUME_AIRBORNE guid=92 ground=148.003 z=176.404
|
||||
2026-10-29_18:17:09 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=1 avoid=0 handoff=0 target=(-3355.93 1794.18 176.40) detail='terrain-smoothed cruise'
|
||||
2026-10-29_18:17:11 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=3 avoid=0 handoff=1 target=(3313.32 1341.79 505.55) detail='landing approach'
|
||||
2026-10-29_18:17:12 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=2 avoid=0 handoff=0 target=(-3374.52 1777.47 165.90) detail='diagonal descent'
|
||||
2026-10-29_18:17:12 INFO [server.adventurebot.navigation] FLIGHT_LANDED guid=84 segments=3 avoidances=0 travelled=54.32 error=0.00
|
||||
2026-10-29_18:17:13 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=3 avoid=0 handoff=1 target=(-3386.43 1766.78 159.18) detail='diagonal descent'
|
||||
2026-10-29_18:17:13 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=4 avoid=0 handoff=1 target=(-3397.90 1756.48 152.71) detail='diagonal descent'
|
||||
2026-10-29_18:17:13 INFO [server.adventurebot.navigation] EDGE_COMPLETE guid=84 name='Brynli' edgeType='free_flight' edgeDbId=0 node='portal_at_4455_target' recovery=0
|
||||
2026-10-29_18:17:13 INFO [server.adventurebot.navigation] FLIGHT_DEPARTURE_WALK guid=84 destination=(3305.935 1343.281 505.359) path=8.00
|
||||
2026-10-29_18:17:14 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=5 avoid=0 handoff=1 target=(-3410.40 1745.25 145.65) detail='diagonal descent'
|
||||
2026-10-29_18:17:15 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=6 avoid=0 handoff=1 target=(-3426.64 1730.66 136.48) detail='diagonal descent'
|
||||
2026-10-29_18:17:15 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=1 avoid=1 handoff=0 target=(3284.50 1356.15 520.37) detail='obstacle avoidance'
|
||||
2026-10-29_18:17:21 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=7 avoid=0 handoff=0 target=(-3445.24 1713.96 125.98) detail='diagonal descent'
|
||||
2026-10-29_18:17:21 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=2 avoid=1 handoff=0 target=(3259.65 1358.87 526.62) detail='obstacle avoidance'
|
||||
2026-10-29_18:17:22 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=8 avoid=0 handoff=1 target=(-3457.14 1703.27 119.26) detail='diagonal descent'
|
||||
2026-10-29_18:17:22 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=3 avoid=0 handoff=1 target=(3254.94 1379.45 514.08) detail='diagonal descent'
|
||||
2026-10-29_18:17:23 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=9 avoid=0 handoff=1 target=(-3470.06 1691.66 111.97) detail='diagonal descent'
|
||||
2026-10-29_18:17:23 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=4 avoid=0 handoff=1 target=(3246.04 1394.36 506.79) detail='diagonal descent'
|
||||
2026-10-29_18:17:26 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=10 avoid=0 handoff=0 target=(-3488.66 1674.95 101.47) detail='diagonal descent'
|
||||
2026-10-29_18:17:26 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=5 avoid=0 handoff=0 target=(3233.22 1415.82 496.29) detail='diagonal descent'
|
||||
2026-10-29_18:17:27 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=11 avoid=0 handoff=0 target=(-3507.26 1658.25 101.47) detail='terrain-smoothed cruise'
|
||||
2026-10-29_18:17:27 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=6 avoid=0 handoff=0 target=(3220.40 1437.29 485.79) detail='diagonal descent'
|
||||
2026-10-29_18:17:29 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=12 avoid=0 handoff=1 target=(-3518.95 1647.75 101.47) detail='terrain-smoothed cruise'
|
||||
2026-10-29_18:17:30 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=13 avoid=0 handoff=1 target=(-3497.67 1666.86 90.97) detail='diagonal descent'
|
||||
2026-10-29_18:17:30 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=7 avoid=0 handoff=0 target=(3207.58 1458.75 475.29) detail='diagonal descent'
|
||||
2026-10-29_18:17:37 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=14 avoid=0 handoff=0 target=(-3516.27 1650.16 90.97) detail='terrain-smoothed cruise'
|
||||
2026-10-29_18:17:37 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=8 avoid=0 handoff=0 target=(3194.76 1480.21 464.79) detail='diagonal descent'
|
||||
2026-10-29_18:17:37 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=15 avoid=0 handoff=1 target=(-3490.93 1672.92 80.47) detail='diagonal descent'
|
||||
2026-10-29_18:17:39 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=9 avoid=0 handoff=1 target=(3186.56 1493.95 458.07) detail='diagonal descent'
|
||||
2026-10-29_18:17:40 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=16 avoid=0 handoff=0 target=(-3509.53 1656.21 66.03) detail='diagonal descent'
|
||||
2026-10-29_18:17:40 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=10 avoid=0 handoff=0 target=(3173.74 1515.41 447.57) detail='diagonal descent'
|
||||
2026-10-29_18:17:41 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=17 avoid=0 handoff=1 target=(-3523.95 1643.25 54.82) detail='diagonal descent'
|
||||
2026-10-29_18:17:41 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=11 avoid=0 handoff=1 target=(3163.15 1533.14 438.89) detail='diagonal descent'
|
||||
2026-10-29_18:17:42 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=18 avoid=0 handoff=1 target=(-3535.84 1632.58 45.60) detail='diagonal descent'
|
||||
2026-10-29_18:17:42 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=12 avoid=0 handoff=1 target=(3154.43 1547.73 431.75) detail='diagonal descent'
|
||||
2026-10-29_18:17:43 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=13 avoid=0 handoff=1 target=(3146.10 1561.69 424.93) detail='diagonal descent'
|
||||
2026-10-29_18:17:43 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=92 n=19 avoid=0 handoff=1 target=(-3536.55 1631.94 45.04) detail='landing approach'
|
||||
2026-10-29_18:17:44 INFO [server.adventurebot.navigation] FLIGHT_LANDED guid=92 segments=19 avoidances=0 travelled=396.61 error=0.00
|
||||
2026-10-29_18:17:44 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=14 avoid=0 handoff=0 target=(3133.28 1583.15 414.43) detail='diagonal descent'
|
||||
2026-10-29_18:17:46 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=15 avoid=0 handoff=1 target=(3148.76 1557.23 406.11) detail='diagonal descent'
|
||||
2026-10-29_18:17:47 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=16 avoid=0 handoff=1 target=(3133.95 1582.03 397.24) detail='diagonal descent'
|
||||
2026-10-29_18:17:48 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=17 avoid=0 handoff=1 target=(3123.94 1598.79 389.04) detail='diagonal descent'
|
||||
2026-10-29_18:17:49 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=18 avoid=0 handoff=1 target=(3115.62 1612.72 382.23) detail='diagonal descent'
|
||||
2026-10-29_18:17:58 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=19 avoid=0 handoff=0 target=(3128.44 1591.25 371.73) detail='diagonal descent'
|
||||
2026-10-29_18:17:59 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=20 avoid=0 handoff=1 target=(3114.97 1613.80 361.76) detail='diagonal descent'
|
||||
2026-10-29_18:18:00 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=21 avoid=0 handoff=1 target=(3103.77 1632.56 352.58) detail='diagonal descent'
|
||||
2026-10-29_18:18:01 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=22 avoid=0 handoff=1 target=(3094.85 1647.49 345.28) detail='diagonal descent'
|
||||
2026-10-29_18:18:02 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=23 avoid=0 handoff=1 target=(3111.53 1619.57 337.93) detail='diagonal descent'
|
||||
2026-10-29_18:18:03 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=24 avoid=0 handoff=1 target=(3094.22 1648.54 331.10) detail='diagonal descent'
|
||||
2026-10-29_18:18:04 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=25 avoid=0 handoff=1 target=(3085.52 1663.11 323.98) detail='diagonal descent'
|
||||
2026-10-29_18:18:05 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=26 avoid=0 handoff=1 target=(3075.48 1679.92 315.75) detail='diagonal descent'
|
||||
2026-10-29_18:18:08 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=27 avoid=0 handoff=0 target=(3088.30 1658.45 305.25) detail='diagonal descent'
|
||||
2026-10-29_18:18:14 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=28 avoid=0 handoff=0 target=(3075.48 1679.92 294.75) detail='diagonal descent'
|
||||
2026-10-29_18:18:15 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=29 avoid=0 handoff=1 target=(3065.84 1696.06 286.85) detail='diagonal descent'
|
||||
2026-10-29_18:18:17 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=30 avoid=0 handoff=1 target=(3057.32 1710.33 279.88) detail='diagonal descent'
|
||||
2026-10-29_18:18:17 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=31 avoid=0 handoff=1 target=(3048.02 1725.90 272.26) detail='diagonal descent'
|
||||
2026-10-29_18:18:20 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=32 avoid=0 handoff=0 target=(3060.84 1704.44 261.76) detail='diagonal descent'
|
||||
2026-10-29_18:18:20 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=33 avoid=0 handoff=1 target=(3043.78 1732.99 254.72) detail='diagonal descent'
|
||||
2026-10-29_18:18:23 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=34 avoid=0 handoff=0 target=(3030.96 1754.46 244.22) detail='diagonal descent'
|
||||
2026-10-29_18:18:24 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=35 avoid=0 handoff=1 target=(3048.03 1725.89 237.20) detail='diagonal descent'
|
||||
2026-10-29_18:18:25 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=36 avoid=0 handoff=1 target=(3030.35 1755.48 230.68) detail='diagonal descent'
|
||||
2026-10-29_18:18:26 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=37 avoid=0 handoff=1 target=(3021.46 1770.37 223.39) detail='diagonal descent'
|
||||
2026-10-29_18:18:27 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=38 avoid=0 handoff=1 target=(3038.73 1741.45 216.54) detail='diagonal descent'
|
||||
2026-10-29_18:18:30 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=39 avoid=0 handoff=1 target=(3021.38 1770.51 209.75) detail='diagonal descent'
|
||||
2026-10-29_18:18:31 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=40 avoid=0 handoff=0 target=(3008.56 1791.97 199.25) detail='diagonal descent'
|
||||
2026-10-29_18:18:32 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=41 avoid=0 handoff=1 target=(2999.30 1807.46 191.67) detail='diagonal descent'
|
||||
2026-10-29_18:18:33 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=42 avoid=0 handoff=1 target=(3014.27 1782.40 182.93) detail='diagonal descent'
|
||||
2026-10-29_18:18:37 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=43 avoid=0 handoff=0 target=(3001.45 1803.86 169.35) detail='diagonal descent'
|
||||
2026-10-29_18:18:52 WARN [server.adventurebot.navigation] FLIGHT_RETURN guid=84 reason='flight segment made no confirmed progress'
|
||||
2026-10-29_18:18:53 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=44 avoid=1 handoff=0 target=(3014.27 1782.40 182.93) detail='obstacle avoidance'
|
||||
2026-10-29_18:18:54 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=45 avoid=1 handoff=0 target=(3001.45 1803.86 193.43) detail='obstacle avoidance'
|
||||
2026-10-29_18:18:55 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=46 avoid=1 handoff=0 target=(3012.12 1786.00 202.17) detail='obstacle avoidance'
|
||||
2026-10-29_18:18:56 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=47 avoid=1 handoff=0 target=(3021.38 1770.51 209.75) detail='obstacle avoidance'
|
||||
2026-10-29_18:18:57 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=48 avoid=1 handoff=0 target=(3034.20 1749.04 220.25) detail='obstacle avoidance'
|
||||
2026-10-29_18:18:59 INFO [server.adventurebot.navigation] FLIGHT_SEGMENT guid=84 n=49 avoid=1 handoff=0 target=(3025.91 1762.92 227.04) detail='obstacle avoidance'
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"test_flight_departure": 0,
|
||||
"test_flight_handoff": 0,
|
||||
"test_free_flight_planner": 0,
|
||||
"test_free_flight": 0,
|
||||
"test_flight_area_query": 0,
|
||||
"test_flight_terrain_fallback": 0,
|
||||
"test_flight_policy": 0,
|
||||
"test_group_flight_follow": 0
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Native terrain query map/phase, area/zone ordering and cache passed.
|
||||
@@ -0,0 +1 @@
|
||||
Production flight admission: airborne mount retained, lower-floor MMAP departure, blocked/cliff/missing support rejected.
|
||||
@@ -0,0 +1 @@
|
||||
Flight handoff before spline end, terminal landing, return corners, collision stop and actual distance passed.
|
||||
@@ -0,0 +1 @@
|
||||
Flight native eligibility, license/profile/zone policy, RP costs and fail-safe return decisions passed.
|
||||
+1
@@ -0,0 +1 @@
|
||||
Missing phase tile uses native base terrain; an existing phase tile with missing collision stays forbidden
|
||||
@@ -0,0 +1 @@
|
||||
Flight geometry passed: takeoff/landing, smoothed peak, ceiling, lateral/climbing avoidance, missing terrain and blocked corridors.
|
||||
@@ -0,0 +1 @@
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
@@ -0,0 +1 @@
|
||||
Moving-target flight: bounded phased corridors, obstacle hold, ceiling rejection, aerial formation hold, safe landing and return fallback passed
|
||||
@@ -0,0 +1,2 @@
|
||||
Oct 29 23:36:38 vcore-test kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/user@1000.service/tmux-spawn-c0aac031-fb9c-46cd-b1a7-eba85fc42191.scope,task=worldserver,pid=362937,uid=1000
|
||||
Oct 29 23:36:38 vcore-test kernel: Out of memory: Killed process 362937 (worldserver) total-vm:11848452kB, anon-rss:5819912kB, file-rss:3156kB, shmem-rss:0kB, UID:1000 pgtables:19928kB oom_score_adj:0
|
||||
@@ -0,0 +1,280 @@
|
||||
{
|
||||
"adventure_suite": [
|
||||
[
|
||||
"test_adventure_supply_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_encounter.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_economy.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_world_presence.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_supplies.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_equipment_maintenance.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_pvp.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_combat_reactions.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_rest_targets.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_recovery_policy.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_graph_handover.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_exploration.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_rotation.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_interactions.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_group_plan.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_micro_reset.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_rest_space.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_destination_level.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_combat_exercise.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_training_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_native_lfg.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_area_policy.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance_variants.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance_loader.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_ground_avoidance.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_repair_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_profession_profile.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_navigation_rescue.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_generator_ownership.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance_autoresume.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_economy_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_async_database.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_profession_targets.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_area_segment.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_intent_state.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_talent_templates.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_location_import.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_profession_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_walk.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_group_gather.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_profile_selection.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_social.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_rest.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_exploration_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_supply_items.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance_persistence.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_profession_sightline.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_population.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_rest_fire.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_retry_policy.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_manager_inventory.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_combat_preparation.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_social_fire.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_leisure.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_instance_begin.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_day_persistence.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_behavior_policy.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_groups.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_leisure_catalog.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_group_departure.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_generator_policy.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_group_travel.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_area_node.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_class_rotation.py",
|
||||
0
|
||||
],
|
||||
[
|
||||
"test_adventure_generator_equipment.py",
|
||||
0
|
||||
]
|
||||
],
|
||||
"latest_change_rechecked": [
|
||||
"test_adventure_intent_state.py",
|
||||
"test_adventure_group_departure.py",
|
||||
"test_adventure_instance_variants.py"
|
||||
],
|
||||
"deployed": false,
|
||||
"sql_applied": false,
|
||||
"gameplay_verified": false
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
Adventure GUID 26: enabled=1 schedule=1 phase=1 intent='groupformation' location='poi_guard_22' micro='' deadline=1793282400 detail='travelling to poi_guard_22'
|
||||
LEISURE_WALK_PLAN guid=26 kind='walk' span=110.05 outbound=7 origin=(-8867.00 673.63 97.90) goal=(-8826.98 571.17 94.50)
|
||||
GROUP_GATHER_START guid=58 deadline=1793282400
|
||||
GROUP_GATHER_START guid=29 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=29
|
||||
GROUP_GATHER_START guid=26 deadline=1793282400
|
||||
GROUP_GATHER_START guid=55 deadline=1793282400
|
||||
GROUP_GATHER_START guid=32 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=32
|
||||
GROUP_GATHER_START guid=59 deadline=1793282400
|
||||
GROUP_GATHER_START guid=31 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=31
|
||||
GROUP_GATHER_START guid=36 deadline=1793282400
|
||||
GROUP_GATHER_START guid=35 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=35
|
||||
GROUP_GATHER_START guid=38 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=38
|
||||
GROUP_GATHER_START guid=40 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=36
|
||||
GROUP_GATHER_READY guid=40
|
||||
GROUP_GATHER_START guid=42 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=42
|
||||
GROUP_GATHER_START guid=39 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=39
|
||||
GROUP_GATHER_READY guid=58
|
||||
LEISURE_COMPLETE guid=26 kind='walk' legs=4
|
||||
GROUP_GATHER_READY guid=26
|
||||
GROUP_GATHER_START guid=44 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=44
|
||||
GROUP_GATHER_READY guid=59
|
||||
GROUP_GATHER_START guid=43 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=43
|
||||
GROUP_GATHER_READY guid=55
|
||||
GROUP_GATHER_START guid=45 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=45
|
||||
GROUP_GATHER_START guid=41 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=41
|
||||
GROUP_GATHER_START guid=46 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=46
|
||||
GROUP_GATHER_START guid=63 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=63
|
||||
GROUP_GATHER_START guid=48 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=48
|
||||
GROUP_GATHER_START guid=47 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=47
|
||||
GROUP_GATHER_START guid=62 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=62
|
||||
GROUP_GATHER_START guid=52 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=52
|
||||
GROUP_GATHER_START guid=51 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=51
|
||||
GROUP_GATHER_START guid=139 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=139
|
||||
GROUP_GATHER_START guid=53 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=53
|
||||
GROUP_GATHER_START guid=54 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=54
|
||||
GROUP_GATHER_START guid=56 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=56
|
||||
GROUP_GATHER_START guid=61 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=61
|
||||
GROUP_GATHER_START guid=64 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=64
|
||||
GROUP_GATHER_READY guid=36
|
||||
GROUP_GATHER_START guid=60 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=60
|
||||
GROUP_GATHER_START guid=69 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=69
|
||||
GROUP_GATHER_START guid=68 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=68
|
||||
GROUP_GATHER_START guid=71 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=71
|
||||
GROUP_GATHER_START guid=70 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=70
|
||||
GROUP_GATHER_START guid=73 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=73
|
||||
GROUP_GATHER_START guid=72 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=72
|
||||
GROUP_GATHER_START guid=67 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=67
|
||||
GROUP_GATHER_START guid=74 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=74
|
||||
GROUP_GATHER_START guid=75 deadlinWARNING: Spell 84729 effect 0 has an unsupported misc value (9) for SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE
|
||||
GROUP_GATHER_READY guid=75
|
||||
GROUP_GATHER_READY guid=52
|
||||
GROUP_GATHER_START guid=77 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=77
|
||||
GROUP_GATHER_START guid=76 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=76
|
||||
GROUP_GATHER_READY guid=71
|
||||
GROUP_GATHER_READY guid=42
|
||||
[?2004hTC>Adventure GUID 26: enabled=1 schedule=1 phase=2 intent='groupformation' location='poi_guard_22' micro='' deadline=1793282400 detail='waiting at group meeting point before departure'
|
||||
TC> The bot is gathering for departure; no new micro actions during the final five minutes.
|
||||
GROUP_GATHER_READY guid=63
|
||||
GROUP_GATHER_READY guid=64
|
||||
GROUP_GATHER_START guid=82 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=82
|
||||
GROUP_GATHER_START guid=83 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=83
|
||||
GROUP_GATHER_READY guid=44
|
||||
GROUP_GATHER_START guid=84 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=84
|
||||
GROUP_GATHER_READY guid=38
|
||||
GROUP_GATHER_START guid=85 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=85
|
||||
GROUP_GATHER_START guid=80 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=80
|
||||
GROUP_GATHER_READY guid=58
|
||||
GROUP_GATHER_READY guid=40
|
||||
GROUP_GATHER_READY guid=70
|
||||
GROUP_GATHER_START guid=87 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=87
|
||||
GROUP_GATHER_START guid=86 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=86
|
||||
GROUP_GATHER_START guid=91 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=91
|
||||
GROUP_GATHER_START guid=93 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=93
|
||||
GROUP_GATHER_START guid=92 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=92
|
||||
GROUP_GATHER_START guid=94 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=94
|
||||
GROUP_GATHER_READY guid=77
|
||||
GROUP_GATHER_START guid=97 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=97
|
||||
GROUP_GATHER_START guid=99 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=99
|
||||
GROUP_GATHER_START guid=96 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=96
|
||||
GROUP_GATHER_READY guid=91
|
||||
GROUP_GATHER_START guid=88 deadline=1793282400
|
||||
GROUP_GATHER_READY guid=88
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"test_adventure_group_gather": 0,
|
||||
"test_adventure_leisure": 0,
|
||||
"test_adventure_social": 0,
|
||||
"test_adventure_groups": 0,
|
||||
"test_adventure_group_travel": 0,
|
||||
"test_adventure_intent_state": 0,
|
||||
"test_adventure_profession_sightline": 0
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Production five-minute gathering: exact cutoff, safe corridor return request, preparation cancellation, bounded retries, meeting hold and deadline release passed
|
||||
@@ -0,0 +1 @@
|
||||
Production group travel: distinct slots, phase169 cliff safety, width, mounts, flight/kick landing, taxi grace, portal queue, bounded separation and recorded-road validation passed
|
||||
@@ -0,0 +1 @@
|
||||
Production recruitment: capitals, different goals, native inviter leadership, joining existing groups, capacity/reservations, raid conversion, planned transition and local contact passed.
|
||||
@@ -0,0 +1 @@
|
||||
Production intent arrival, failed/partial travel, deadlines and safe schedule handover passed.
|
||||
@@ -0,0 +1 @@
|
||||
Leisure: substantial curved MMAP routes, mirrored return, interrupted return, rejected corridors, actual arrival, companion follow, riding, flight and fishing passed.
|
||||
+1
@@ -0,0 +1 @@
|
||||
Native workstation working-surface sightline and blocked geometry rejection passed.
|
||||
@@ -0,0 +1 @@
|
||||
Production social flow: approach before talk, coherent greeting/talk/listen/farewell, lost targets, native chair confirmation and real fire confirmation passed.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Gathering validation,2026-10-29
|
||||
|
||||
Build2 completed; installed after verified graceful shutdown. Fresh ready marker,
|
||||
worldserverPID290160 and listeners8085/8087 verified. Existing test plans and
|
||||
loader targets50/5 per faction retained. Seven targeted regression programs pass.
|
||||
|
||||
During the real14:55 cutoff for the15:00 test deadline, native logs show
|
||||
GROUP_GATHER_START/READY. At14:56,42 distinct bots had both events; remaining bots
|
||||
were still joining through the staggered loader. Arthoran26 had an explicit
|
||||
pre-cutoff search walk (no schedule override): safe return,4 completed legs,
|
||||
GROUP_GATHER_READY. His native status then reported empty micro and
|
||||
'waiting at group meeting point before departure'. A forced profession_tools
|
||||
micro command was rejected during the window. These are runtime/log checks,
|
||||
not visual acceptance of every bot. The subsequent15:00 departure has not yet
|
||||
occurred at the time of this checkpoint; exact deadline release is tested with
|
||||
the deterministic production handler and existing schedule handover tests.
|
||||
|
||||
No teleport or additional group-completeness wait added. No commit/push.
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"test_adventure_recovery_policy": 0,
|
||||
"test_adventure_destination_level": 0,
|
||||
"test_native_skill_slot": 0,
|
||||
"test_flight_terrain_fallback": 0,
|
||||
"test_free_flight_planner": 0,
|
||||
"test_graph_probe_cache": 0,
|
||||
"test_flight_policy": 0,
|
||||
"test_flight_handoff": 0,
|
||||
"test_group_flight_follow": 0,
|
||||
"test_flight_area_query": 0,
|
||||
"test_transport": 0,
|
||||
"test_adventure_groups": 0,
|
||||
"test_adventure_native_lfg": 0,
|
||||
"test_adventure_interactions": 0,
|
||||
"test_adventure_group_travel": 0,
|
||||
"test_adventure_combat_reactions": 0,
|
||||
"test_adventure_day_persistence": 0,
|
||||
"test_adventure_intent_state": 0,
|
||||
"test_adventure_social": 0,
|
||||
"test_adventure_economy": 0,
|
||||
"test_adventure_profession_sightline": 0,
|
||||
"test_adventure_exploration": 0,
|
||||
"test_adventure_navigation_rescue": 0
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
Production combat focus, damage ordering, risk filters, corpse radius/delay, flight/group override, blocked escape, danger avoidance and malus-free persisted fallback passed.
|
||||
+1
@@ -0,0 +1 @@
|
||||
Real hearth recovery: grace, animation, faction capitals, cancellation, activity gaps and long taxi grace passed
|
||||
@@ -0,0 +1 @@
|
||||
ground planner regressions and dynamic flight/node/location/virtual-exit integration passed
|
||||
@@ -0,0 +1,2 @@
|
||||
Native riding/profession allocation accepts slot zero and last slot, rejects a full skill array
|
||||
Native recursive skill activation preserves INSERT for new placeholders and UPDATE for saved skills
|
||||
@@ -0,0 +1 @@
|
||||
Transport dock, frame, recorder, cross-map copy and ride regressions passed
|
||||
@@ -0,0 +1,24 @@
|
||||
# Validation 2026-10-29
|
||||
|
||||
- Build8 completed; 23 targeted regression programs passed. Flight-root rejection
|
||||
and recursive skill activation regressions were added after the first full run
|
||||
and passed separately.
|
||||
- First/second startup attempts exposed an existing saved-instance ID allocation
|
||||
assertion; debugger traced RegisterInstanceId(2). Corrected aggregate type;
|
||||
third startup reached ready and listened on TCP8085.
|
||||
- Native flight status: Aldren32 and Talzul97 both enabled=1, riding=225,
|
||||
flightLicense=1.
|
||||
- Native terrain probe at 1751.49/-4389.67 on map1: valid=1, ground132.703,
|
||||
ceiling493.191 (previously missing child719 tile blocked it).
|
||||
- Native Naxxramas eligibility: Aldren60 and Tahuima78 content/own/invitation=0;
|
||||
Braneven85 content/own/invitation=1.
|
||||
- Saved plan audit: 2640 slots, no hour23 groupformation.
|
||||
- Final Build8 installed after a second clean shutdown. Fresh startup log
|
||||
/tmp/vcore-recovery-final-20261029.log reaches ready; PID264359 remains alive,
|
||||
TCP8085 listening. Native saveall followed by DB query confirms Aldren32 and
|
||||
Talzul97 riding225/max225 persisted. Loader continues normal50/5 per faction.
|
||||
- Collision/departure restrictions still reject unsafe/indoor flight origins;
|
||||
cold graph route evaluation can stall for multiple seconds. No claim of fully
|
||||
verified flight gameplay or elimination of existing navigation limitations.
|
||||
- No visual gameplay acceptance claimed. Lunna not reproduced, onboard offsets
|
||||
deferred for lack of validated vehicle navigation.
|
||||
@@ -0,0 +1,13 @@
|
||||
CPC_PERF windowMs=31708 ticks=879 players=7 travelMs=0.484 perceptionMs=4.428 transportMs=0.144 flightMs=2.252 actionsMs=16067.435 controllersMs=269.654 slowGuid=26 slowMs=121.738
|
||||
CPC_PERF windowMs=31923 ticks=313 players=16 travelMs=11.469 perceptionMs=27.059 transportMs=0.140 flightMs=0.126 actionsMs=24381.331 controllersMs=1032.270 slowGuid=42 slowMs=397.391
|
||||
CPC_PERF windowMs=31537 ticks=10 players=20 travelMs=17.874 perceptionMs=13.710 transportMs=0.028 flightMs=0.027 actionsMs=27872.181 controllersMs=294.503 slowGuid=44 slowMs=58.861
|
||||
CPC_PERF windowMs=30370 ticks=170 players=32 travelMs=29.956 perceptionMs=75.262 transportMs=0.130 flightMs=0.141 actionsMs=20011.291 controllersMs=1036.558 slowGuid=50 slowMs=75.739
|
||||
CPC_PERF windowMs=32064 ticks=207 players=43 travelMs=29.812 perceptionMs=120.900 transportMs=0.254 flightMs=0.286 actionsMs=21126.712 controllersMs=1134.949 slowGuid=70 slowMs=44.644
|
||||
CPC_PERF windowMs=32397 ticks=22 players=54 travelMs=35.146 perceptionMs=107.803 transportMs=0.055 flightMs=0.056 actionsMs=25415.937 controllersMs=1086.701 slowGuid=75 slowMs=150.957
|
||||
CPC_PERF windowMs=32301 ticks=12 players=59 travelMs=25.198 perceptionMs=76.121 transportMs=0.030 flightMs=0.040 actionsMs=26331.046 controllersMs=697.158 slowGuid=40 slowMs=62.984
|
||||
CPC_PERF windowMs=31515 ticks=8 players=66 travelMs=31.520 perceptionMs=702.414 transportMs=0.501 flightMs=0.235 actionsMs=17198.952 controllersMs=2651.010 slowGuid=43 slowMs=349.990
|
||||
CPC_PERF windowMs=31835 ticks=4 players=68 travelMs=89.253 perceptionMs=265.259 transportMs=0.011 flightMs=0.013 actionsMs=15172.937 controllersMs=1872.802 slowGuid=93 slowMs=267.053
|
||||
CPC_PERF windowMs=33394 ticks=7 players=72 travelMs=21.174 perceptionMs=203.776 transportMs=0.423 flightMs=0.019 actionsMs=24499.114 controllersMs=867.084 slowGuid=96 slowMs=73.350
|
||||
CPC_PERF windowMs=31643 ticks=9 players=80 travelMs=38.652 perceptionMs=120.948 transportMs=0.135 flightMs=0.383 actionsMs=20782.250 controllersMs=2069.232 slowGuid=100 slowMs=707.549
|
||||
CPC_PERF windowMs=34049 ticks=5 players=81 travelMs=24.132 perceptionMs=73.970 transportMs=0.129 flightMs=0.015 actionsMs=26621.404 controllersMs=894.816 slowGuid=106 slowMs=53.148
|
||||
CPC_PERF windowMs=34358 ticks=6 players=86 travelMs=24.375 perceptionMs=82.137 transportMs=0.501 flightMs=0.017 actionsMs=24773.949 controllersMs=2714.716 slowGuid=80 slowMs=595.751
|
||||
Loaded 100 of 586 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user