WIP: checkpoint AdventureBot intents and unfinished profession implementation

This commit is contained in:
Nico committed 2026-10-27 17:02:01 +01:00
1 parent 119d63ed1c
commit 722b513ee0
83 files changed
+11946 -199

No files matched your search

+283
View File
@@ -0,0 +1,283 @@
# Freizeit-Intent
Technischer Name: `leisure`. Freizeit ist ein Aufenthalt mit Spaziergängen,
Pausen und freiwilligen Ausflügen, keine Folge endloser Fernreiseaufträge.
Migration: `sql/custom/world/2026_10_27_02_adventure_leisure.sql` nach den
Geselligkeits- und Ruhe-Migrationen. Definitionen und bearbeitete Gewichte bleiben
erhalten. Neue Tagespläne können Freizeit anhand `activity_affinity.leisure`
auswählen (Standard 0,5); vorhandene gespeicherte Tagespläne bleiben bestehen.
## Mikroaktionen
| Schlüssel | Ablauf |
|---|---|
| `leisure_walk` | Zusammenhängender MMAP-Hinweg zu einem entfernten Außenpunkt, danach dieselben Wegpunkte zurück; Gehmodus und kurze Pause am Wendepunkt. |
| `leisure_roam` | Eine lokale Spazierstrecke auswählen, vollständig verfolgen und auf demselben Weg zurückkehren. |
| `leisure_pet_walk` | Eigenen Begleiter beschwören, gegebenenfalls anleinen, eine zusammenhängende Strecke entspannt hin und zurück gehen, zurückkehren und eigene Begleiterressourcen aufräumen. |
| `leisure_ride` | Kurzer Rundritt mit Profil-Bodenmount; nur Außenwege, danach zurückkehren und absteigen. |
| `leisure_flight` | Kurzer Rundflug mit nativen Start-, Kollisions- und Landeprüfungen; sichere Landung und Rückkehr vor Intentwechsel. |
| `leisure_fish` | An einem markierten `leisure_fishing`-Platz mit ausgerüsteter Angel und geprüftem Wasser native Angelhaltung darstellen. Kein Fischfang, Beuteobjekt oder Inventarzugang. |
| `leisure_view`, `leisure_linger` | Aussicht betrachten beziehungsweise ruhig verweilen. |
Gemeinsame Szenen ergänzen NPC-/Bot-Gespräche, Zuhören, native Sitzplätze,
Essen, Trinken und Feuerrast. Tanz wird bei Freizeit nur an einer als `festival`
klassifizierten Location angeboten. Neue Feuer bleiben in Gebäuden und Städten
verboten. Freizeit verwendet vorhandene Fähigkeiten statt eigener Sitz-,
Gesprächs- oder Feuerimplementierungen.
Geplante Fußspaziergänge bleiben höchstens 250 Yards vom Aufenthaltsanker entfernt; andere lokale Ausflüge höchstens 120 Yards.
Stadtlocations mit `zone_id` und Gebietsaufträge behalten ihre native Gebietsgrenze;
Bodenwege werden einschließlich Zwischenpunkten über MMAP geprüft. Reitwege
müssen entlang der gesamten berechneten Bodenroute im Außenbereich bleiben.
Bodenrunden wählen nahe Bodenhöhen mit höchstens drei Yards Abweichung zum
Ausgangspunkt; erhöhte Dachpunkte werden nicht als Spaziergangziele verwendet.
Nach einer Sitz-/Esspause im Gebäude bleiben Fußspaziergänge, Umherlaufen und
Haustierausführen wählbar: Die normalen lokalen Wege führen wieder zu den
geprüften Außenpunkten. Rückkehrort ist dann der äußere Freizeitanker statt
des Innenraum-Sitzplatzes. Ausritte und Rundflüge benötigen weiterhin einen
Außenstart; die Feuerverbote in Gebäuden und Städten bleiben bestehen.
Kein unerreichter Wegpunkt zählt als Ankunft. Normale Ausflüge kehren zum
Ausgangspunkt zurück; Zeitlimits, verlorene Begleiter oder Navigationsfehler
beenden einen nicht mehr sicher ausführbaren Ablauf, ohne eine Rückkehr vorzutäuschen.
Fußspaziergänge (`walk`, `roam`, `pet_walk`) wählen vor dem Losgehen genau
**eine** vollständige native Bodenroute mit mindestens 65 Yards Abstand zum
Ausgangspunkt. Das Hinweg-Budget beträgt abhängig von der Mikroaktionsdauer
100–220 Yards. Unvollständige Pfade, Shortcuts, übermäßige Umwege, fremde Gebiete
und Innenraumstrecken werden verworfen. Etwa alle 20 Yards werden echte
MMAP-Punkte als Kontrollpunkte gespeichert; lokale Navigation verbindet sie.
Der Wendepunkt kommt nur einmal vor, danach folgen die Kontrollpunkte rückwärts
bis zum Start. Es gibt keine regelmäßigen Pausen zwischen Kontrollpunkten;
am Wendepunkt sind vier Sekunden vorgesehen. Die Begleiter-Abstandsprüfung
bleibt unabhängig davon aktiv. Bei Zeitende oder einem gescheiterten Hinweg
wird entlang tatsächlich erreichter Kontrollpunkte zurückgegangen, statt einen
neuen geraden Rückweg oder weitere Zufallsziele zu wählen. Ein nicht möglicher
Rückweg wird als Fehler beendet und niemals als Rückkehr ausgegeben.
`stormwind_leisure_trade` verwendet die vorhandene Bodenposition von
`game_tele.TradeDistrict` als Freizeitanker. Dorthin wird regulär gereist, nicht
teleportiert. Weitere Orte beziehungsweise Angelplätze müssen passend markiert
und räumlich geprüft werden. Eine fehlende Angel oder ein fehlender geeigneter
Angelplatz verhindert ausschließlich die Angelaktion.
## Katze und Haustierleine
Arthoran verwendet im `movement`-Profil:
```lua
companion_spell = 10673, -- Bombay Cat, Kreatur 7385
companion_leash_item = 37460, -- Rope Pet Leash, Gegenstandszauber 48722
```
Diese IDs wurden in den geladenen nativen Spell-/SpellEffect-/Item-sparse-Daten
und der Test-Weltdatenbank bestätigt. Der Controller stellt die im Profil
gewählte nicht kämpfende Begleiterfähigkeit und die Leine einmalig als
Bot-Ausstattung bereit. Bestehende Ausstattung wird wiederverwendet; ein volles
Inventar verhindert keine unangeleinte Variante.
`ClientlessCompanionMgr` ist eine generische Clientless-Core-Fähigkeit ohne
Abhängigkeit vom AdventureBot-Manager. Die Beschwörung ist ein normaler,
nicht ausgelöster Spielerzauber. Erst ein tatsächlich vorhandener eigener
Begleiter mit passendem Beschwörungszauber bestätigt die Beschwörung. Die
Katze folgt mit dem nativen Folgegenerator. Für die eigens beschworene Katze
wird ein Abstand von 1,5 Yards mit nativem Aufholen gewählt; ein bereits vorhandener
Begleiter behält seine Bewegungskonfiguration. Es gibt keine Spielerteleports,
künstliche Katzen-Spawns oder eine ersetzt implementierte Tier-KI.
Die Leine wird über den normalen Gegenstandszauber-Auftrag des Besitzers
benutzt, mit tatsächlicher Gegenstands-GUID, Inventarposition und eigenem
Minipet als Ziel. Dadurch bleiben native Gegenstands-, Zauber-, Ziel-,
Abklingzeit- und Scriptprüfungen erhalten. Die Wirkung wird am tatsächlichen
Begleiter bestätigt. Die native Leine ist ein beweglicher Kanalzauber. Der Clientless-Reisemanager
erhält solche Kanäle beim Starten lokaler Bewegungen; nur bewegungsblockierende
Zauber werden abgebrochen. Unbewegliche Kanäle werden nicht als Gehleine verwendet; eine nicht anwendbare Leine blockiert den Spaziergang nicht.
Der Besitzer beginnt erst nach bestätigter Beschwörung und abgeschlossener
Leinenprüfung zu gehen. Bei aktiver Leine reagiert die Steuerung in jedem Weltupdate vor Erreichen der
nativen Fünf-Yards-Reichweite: Ab vier Yards wartet Arthoran, bis die Katze wieder
höchstens 3,25 Yards entfernt ist. Ohne Leine gilt eine Grenze von 15 Yards.
Eine Wartephase dauert höchstens 20 Sekunden. Eine verlorene eigene Leinenwirkung
kann höchstens zweimal über dieselbe normale Gegenstandsbenutzung neu angelegt werden. Beim Abschluss oder Abbruch werden nur die durch
diese Szene aufgebrachte Leinenwirkung und eine von ihr beschworene Katze
entfernt. Ein passender bereits vorhandener Begleiter kann benutzt werden und
bleibt danach bestehen. Fremde Begleiter und Kampf-Pets werden nicht ersetzt.
## Diagnose und Tests
```text
clientless adventure intent 26 leisure stormwind_leisure_trade 3600
clientless adventure status 26
clientless adventure micro 26 leisure_pet_walk
clientless adventure micro 26 leisure_walk
clientless adventure micro 26 leisure_ride
clientless adventure micro 26 leisure_flight
```
Gezielte Mikroaktionen benötigen den passenden laufenden Intent am Zielort und
durchlaufen dieselben Voraussetzungen wie die automatische Auswahl.
Logereignisse: `LEISURE_START`, `LEISURE_WAYPOINT`, `LEISURE_COMPLETE`,
`COMPANION_START`, `COMPANION_CONFIRMED`, `COMPANION_LEASH_REQUEST`,
`COMPANION_LEASH_CONFIRMED`, `COMPANION_LEASH_UNAVAILABLE`,
`COMPANION_WALK_SAMPLE` und `COMPANION_END`.
```bash
python3 tests/clientless/test_adventure_leisure.py
python3 tests/clientless/test_adventure_leisure_catalog.py
python3 tests/clientless/test_clientless_companion.py
```
Die Tests führen produktive Methoden mit kontrollierten Core-Adaptern aus:
Rundwege, tatsächliche Ankunft, Gebietsgrenzen, Begleiterbereitschaft,
Folgeabstand/Zeitlimit, Reitmodus, Fluglandung vor Intentwechsel, Angelvoraussetzungen,
Besitzprüfung, native Gegenstandsziele, Leinenbestätigung, Wiederverwendung und
Bereinigung. Die Migration wird auf wiederholbare Ergänzung, vorhandene gemeinsame
Aktionen und Erhalt manueller Gewichte geprüft. Sichtprüfung von Katze, Leine,
Spaziergängen, Ausritten, Flügen und Angelhaltung bleibt eine separate Ingame-Abnahme.
## Testserverstand am 27.10.2026
- Additive Freizeit-Migration angewendet: 2.644 aktive Adventure-Locations,
42 Aktionen und 56 Dialogzeilen. Vorhandene Definitionen wurden erhalten.
- Bestehende Debug-Konfiguration nur für die neue Quelldatei neu eingelesen,
mit `-j10` gebaut und in den gestoppten Testserver installiert. Alle
25 Clientless-Regressionsskripte bestanden am abschließenden Stand.
- Frischer Worldserver-Start mit `ready...`, fortlaufendem Prozess und
Listener auf Port 8085 bestätigt. Keine Produktion und kein Push.
- Arthoran reiste regulär von der Gilded Rose zum Freizeitanker im Handelsdistrikt.
`INTENT_ARRIVED` und automatische Spaziergang-/Umherlauf-/Sitzszenen wurden
beobachtet. Ein erster Ausritt erreichte einen Wegpunkt und wurde für den
Katzentest unterbrochen; ein vollständiger Live-Rundritt ist damit nicht belegt.
- Der erste Katzentest bestätigte die native Bombay-Katze und ihr Folgen.
Er zeigte außerdem, dass die Leine ein beweglicher Kanalzauber ist. Der
generische Reisemanager erhält diesen Kanal nun statt jeden Zauber pauschal
abzubrechen. Nicht passende optionale Wegpunkte werden übersprungen; die
tatsächliche Rückkehr bleibt verpflichtend. Hohe Dachpunkte sind für
Bodenrunden ausgeschlossen.
- Die native Leine hat fünf Yards Reichweite. Für die selbst beschworene Katze
wird deshalb derselbe native Folgegenerator mit engerem Abstand verwendet;
Abstandskontrolle läuft in jedem Weltupdate. Bestehende Begleiter behalten
ihre eigene Bewegungskonfiguration.
- Abschließender Live-Test: native Beschwörung von Kreatur 7385, normale
Gegenstandsbenutzung von 37460 mit Zauber 48722 und
`COMPANION_LEASH_CONFIRMED`. Zwei Bodenrunden mit 15 bestätigten Wegpunkten
einschließlich Rückkehr. Alle 15 `COMPANION_WALK_SAMPLE`-Proben zeigten
`leashed=1`, ohne `COMPANION_LEASH_LOST`; größte protokollierte Entfernung
3,27 Yards. Rückkehr am 27.10.2026 um 12:57:49 mit `NAV_COMPLETE`, danach
`LEISURE_COMPLETE ... legs=15` und `COMPANION_END`.
- Nach dem Rundgang blieb Arthoran im Freizeit-Intent und wechselte zum
ruhigen Verweilen. Sein Startprofil war nur für den Testlogin temporär auf
Freizeit/Sturmwind gesetzt und ist wieder auf den bisherigen Sozialstart
zurückgesetzt; Katze, Leine und Freizeit-Affinität bleiben im Profil konfiguriert.
Das ist eine serverseitige Bestätigung, keine visuelle Abnahme. Offen bleiben
insbesondere das Aussehen der Katze an der Leine, vollständige Ausritte und
Freizeit-Rundflüge sowie markierte Angelplätze und die Angelhaltung. Der zuvor
verschobene visuelle Schlaftest bleibt davon unabhängig offen.
### Allgemeine lokale Spline-Segmentierung
Beim anschließenden freien Umherlaufen trat der zuvor auch bei anderen Reisen
beobachtete Fehler `_checkPathLengths()` für Arthoran auf. Ursache: Der
Clientless-Reisemanager entfernte nur Abschnitte bis 0,05 Yards, während native
Splines mindestens 0,1 Yards zwischen internen Punkten verlangen. Zusätzlich
konnte das Kürzen bei 45 Yards einen zu kurzen letzten Rest erzeugen.
Die Segmentbildung verwendet jetzt 0,11 Yards Mindestlänge als Rundungsmarge
und endet bei zu kurzem Rest am letzten wirklichen Pfadpunkt. Danach folgt die
nächste reguläre lokale Teilstrecke. Die native Prüfung bleibt unverändert.
`test_local_spline_segments.py` führt die produktive Segmentbildung gegen die
produktive native Längenprüfung aus, einschließlich des gefundenen Restfalls
und 1.000 gesampelter Pfade. Der ergänzte Stand besteht alle 26 Clientless-Tests
und wurde mit `-j10` erfolgreich gebaut.
Nach Installation der Spline-Korrektur erreichte der Testserver erneut
`ready...`; Prozess und Port 8085 wurden bestätigt. Der längere Live-Test
`leisure_roam` durchlief acht bestätigte Wegpunkte einschließlich Rückkehr
und endete am 27.10.2026 um 13:08:02 mit `NAV_COMPLETE` und
`LEISURE_COMPLETE ... kind='roam' legs=8`. Dabei wurde auch eine native
45-Yards-Teilstrecke erfolgreich abgeschlossen und regulär fortgesetzt.
Im frischen Serverlog trat für GUID 26 kein `_checkPathLengths()` mehr auf.
Das temporär geänderte Test-Startziel ist zurückgesetzt. Der anschließende
Katzenspaziergang wird für die Sichtprüfung wieder über den normalen
Mikroaktionsbefehl gestartet.
## Korrektur: Freizeit nach einer Innenraumpause
Der Nutzer beobachtete Arthoran wiederholt beim Sitzen statt beim Spazieren.
Der laufende Auftrag war `leisure`, die letzten Szenen bestanden aber aus
Sitzen, Essen und Trinken auf Sitzplätzen bei `(-8827,648,98)` beziehungsweise
`(-8829,647,98)`. Die Auswahl sperrte bisher sämtliche Bewegungsaktionen im
Innenbereich. Damit konnten Fußausflüge nach einer Innenraumpause nicht mehr
angeboten werden.
Die Außenstart-Voraussetzung gilt jetzt nur noch für Ausritte und Rundflüge.
Spazieren, Umherlaufen und Haustierausführen dürfen im Innenbereich beginnen;
sie verwenden weiterhin geprüfte Außenwegpunkte und vollständige MMAP-Wege.
Ihr Rückkehrort ist in diesem Fall der Außenanker statt des Innenraum-Sitzplatzes.
Feuerverbote und übrige Umgebungsprüfungen bleiben bestehen.
Die Produktionsmethoden-Regression prüft ausdrücklich einen Innenraumstart,
freigegebene Fuß-/Haustierausflüge, weiterhin gesperrtes Reiten/Fliegen und die
Rückkehr zum Außenanker. Alle 26 Tests und der Build mit `-j10` bestanden.
Die Korrektur ist installiert; der frische Testserver-Start erreichte `ready...`,
Prozess und Port 8085 wurden bestätigt. Das nur für den Login geänderte
Startprofil wurde zurückgesetzt.
Im laufenden Server wurden danach ein automatisch ausgewählter Katzenspaziergang
mit 15 bestätigten Wegpunkten und durchgehend aktiver Leine sowie ein anschließend
automatisch ausgewählter Spaziergang beobachtet. Gezielte Sitzszenen waren an
den jeweiligen momentanen Rundwegpositionen nicht verfügbar; eine Live-Abnahme
des exakten Innenraum-Sitzplatz-zu-Außenweg-Übergangs ist damit noch nicht belegt.
Zur direkten Sichtprüfung wurde der Katzenspaziergang erneut gezielt gestartet.
## Zusammenhängende Fußrouten (27.10.2026)
Die oben dokumentierten früheren Live-Tests mit kleinen Kreisrouten sind
historische Ergebnisse. Die neue Hin-/Rückwegplanung ersetzt diese Fußrouten.
Der ausführbare C++-Regressionstest prüft Mindestreichweite, spiegelbildliche
Rückwegpunkte, tatsächliche Ankunft, Rückkehr nach Zeitende und verweigerte
MMAP-Verbindungen. Die sichtbare Natürlichkeit bleibt der Ingame-Abnahme
vorbehalten.
Live-Test des neuen Stands: Arthoran ging mit Katze und bestätigter Leine
von `(-8818.91, 614.20, 95.18)` zum 131,60 Yards entfernten Ziel
`(-8891.75, 504.59, 94.09)`. Alle neun Hinweg- und neun Rückwegankünfte
wurden bestätigt; die rückwärts besuchten Kontrollpunkte stimmten innerhalb
eines Yards mit dem Hinweg überein. Die tatsächliche Rückkehr lag unter
0,1 Yard vom Start entfernt. Alle 18 Begleiterproben bestätigten die aktive
Leine. Danach wurde automatisch ein weiterer normaler Spaziergang geplant.
Build mit `-j10`, Installation, Neustart, Ready-Meldung und Port 8085 waren
erfolgreich; alle 26 Clientless-Testskripte bestanden. Das ist eine technische
Live-Prüfung, keine abschließende visuelle Abnahme.
## Gleichmäßiges Tempo beim Haustierausführen
Die häufigen kurzen Stopps nach wenigen Yards wurden durch das native Folgen
ausgelöst: `MoveSplineInit::SetWalk` bestimmt das Splinetempo, setzt aber nicht
das Spielerflag `MOVEMENTFLAG_WALKING`. Der Folgegenerator las für Spieler
bisher nur dieses Flag und sagte deshalb Laufbewegung voraus, obwohl Arthoran
ging. Die Katze eilte voraus und die berechtigte Leinen-Abstandskontrolle
unterbrach daraufhin den Besitzer.
Der generische native Folgegenerator verwendet jetzt bei einer aktiven
Server-Spline deren tatsächliche Geschwindigkeit auch für Spieler. Ohne aktive
Spline bleibt die Auswahl anhand der normalen Spielerbewegungsflags erhalten.
Die Abstandsprüfung und der native Leinenzauber bleiben bestehen. Ein separater
ausführbarer Regressionstest deckt servergesteuertes Gehen, explizite Tempi,
Laufen, Kreaturen und normale Clientbewegung ab.
Live-Prüfung der Tempokorrektur: Die Katze begleitete Arthoran über acht
jeweils etwa 20 Yards lange Wegstücke (80 Yards hinaus und zurück). Für
alle acht gab es genau einen `NAV_START` und einen `NAV_COMPLETE`, keine
Unterbrechungen mit erneutem Start derselben Strecke. Alle acht
Begleiterproben bestätigten die aktive Leine; der Abstand lag bei etwa
2,3–2,5 Yards. Die Pause am Wendepunkt blieb erhalten. Build mit `-j10`,
Installation, Testserver-Neustart und alle 27 Clientless-Testskripte erfolgreich.
Die abschließende visuelle Beurteilung erfolgt im Spiel.
Der Nutzer hat anschließend sowohl die zusammenhängenden Fußspaziergänge als
auch das flüssige Haustierausführen nach der Tempokorrektur visuell bestätigt.
Schlafdarstellung, Ausritte, Freizeitflüge und Angeln sind dadurch nicht abgenommen.