290 lines
18 KiB
Markdown
290 lines
18 KiB
Markdown
# 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_training` | Eine echte sichtbare und erreichbare Trainingspuppe im lokalen Umkreis aufsuchen und 60–180 Sekunden mit nativen Angriffen trainieren. |
|
||
| `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.
|
||
|
||
Training ergänzt Migration `2026_10_27_09_adventure_training.sql`. Es nutzt
|
||
die Kampfreaktion, sucht höchstens 60 Yards lokal und respektiert das Ende des
|
||
aktuellen Zeitblocks. Echte Angreifer unterbrechen das Training zugunsten der
|
||
Selbstverteidigung. Kein Dummy-Spawn, Phasenwechsel oder künstlicher Schaden.
|