Files
Viano-Core/doc/clientless/rest-intent.md
T
Nico e18a416bf4
clang PCH / build (push) Canceled after 0s
GCC PCH / build (push) Canceled after 0s
Add persistent instance visits and validate sleeping spaces
2026-10-27 20:10:13 +01:00

16 KiB
Raw Blame History

Ruhe-Intent

Stand: 27.10.2026. Technischer Intentname: rest.

Ruhe ist ein eigenes Vorhaben mit anschließender Auswahl passender Mikroaktionen. Tavernen werden bei der Ortswahl stärker gewichtet als Siedlungen. Native Stühle und Bänke dürfen auch außerhalb von Tavernen benutzt werden, beispielsweise in Sturmwind. Ein Ort ohne passende Ruhemöglichkeit löst die Suche nach einer Ersatzlocation aus.

Mikroaktionen

Schlüssel Ausführung
rest_seat Erreichbaren nativen Stuhl oder eine Bank aufsuchen, regulär benutzen und 60–100 Sekunden sitzen.
rest_sleep Einen geprüften Schlafplatz nahe dem Schlafanker oder im Gasthaus aufsuchen und 120–300 Sekunden mit nativer Schlafhaltung ruhen.
rest_ground Einen ausdrücklich markierten Bodenrastplatz aufsuchen und 60–120 Sekunden sitzen.
rest_drink Eine vorhandene native Sitzgelegenheit benutzen und Trinken darstellen.
rest_eat Eine vorhandene native Sitzgelegenheit benutzen und Essen darstellen.
rest_look Kurzes ruhiges Umsehen zwischen den Ruhephasen.
rest_fire Vorhandenes geeignetes Feuer nutzen oder an einem markierten Bodenrastplatz ein natives Kochfeuer entzünden, hingehen, sitzen, trinken und ruhen (45–75 Sekunden Szenenbasis).

Sitz-, Ess-, Trink- und Feuerabläufe verwenden dieselben Fähigkeiten wie Geselligkeit. 2026_10_27_01_adventure_rest_fire.sql ergänzt rest_fire mit Auswahlgewicht 3, ohne vorhandene Szenen oder manuell geänderte Gewichte zu überschreiben.

Für vorhandene Feuer gelten die bisherigen Ortsgrenzen, Phasen-, Sicht- und Navigationsprüfungen. Ein eigenes Feuer wird bei rest nur an einer Location mit Kategorie rest_ground erlaubt, zusätzlich zu den bestehenden Prüfungen auf Außenbereich, ebenen freien Boden, Wasser, Fallen und Zauberabklingzeit. Zusätzlich verbietet die gemeinsame Feuerfähigkeit das Entzünden innerhalb von Städten für sämtliche Intents. Dafür werden Stadt-/Handelskanal-Kennzeichen der nativen AreaTable am aktuellen Standort, in übergeordneten Gebieten und der Zone geprüft. Fehlende oder zyklische Gebietsdaten erlauben kein neues Feuer. Die Prüfung erfolgt auch unmittelbar vor dem Zaubern. Vorhandene geeignete Feuer bleiben in Städten und Gebäuden nutzbar. Ein fehlendes Feuer an einer Stadtbank oder in einer Taverne berechtigt nicht zum Entzünden. Der native Zauber 818 benötigt keine Kochkunst; erst das bestätigte Feuerobjekt erlaubt die anschließende Feuerrast. Verschwindet es, endet die Szene. Aufstehen und Aufräumen erfolgen über denselben Szenenabschluss wie bei den anderen Ruheaktionen. Gespräche, Bestellungen und Tanz gehören nicht zum anfänglichen Ruhe-Katalog. Die Zeit der Schlaf- und Bodenrastphase beginnt nach bestätigter Ankunft; die lokale Anreise verwendet den Gehmodus und kein Bodenmount.

Geeignete Orte

Die additive Migration ist sql/custom/world/2026_10_27_00_adventure_rest.sql (nach den bisherigen Verhaltens- und Geselligkeitsmigrationen anwenden).

Die vorhandene Weltpunkt-Tabelle bleibt der Ortskatalog. Zusätzliche Kategorien:

  • rest_seat: Anlaufpunkt bei einer geeigneten nativen Sitzgelegenheit.
  • rest_sleep: ausdrücklich festgelegter Schlafplatz mit Position und Ausrichtung.
  • rest_ground: ausdrücklich festgelegter Bodenrastplatz.

Ein Schlafanker ist keine automatische Bettinteraktion. Der Bot sucht heute eine freie Liegefläche in seiner Nähe, läuft regulär dorthin und nimmt die native Schlafhaltung ein (Details und Grenzen im Abschnitt zur Flächensuche unten). Dekorative Betten werden weder als benutzbar vorausgesetzt noch durch Teleports betreten. Neue Schlafplätze benötigen weiterhin eine visuelle Abnahme.

Die Migration ergänzt einen Ruheplatz im Obergeschoss der Goldhainer Taverne (goldshire_sleep_upstairs) und einen Anlaufpunkt bei einer vorhandenen Sturmwinder Steinbank (stormwind_rest_bench, Spawn 219847, Entry 203946). Die Bankdefinition wird nur angelegt, wenn der passende native Spawn vorhanden ist. Bestehende Definitionen und manuell bearbeitete Gewichte bleiben erhalten.

Beim Schlafen oder Bodenrasten muss der Punkt zur Fraktion und Karte passen und höchstens 30 Yards vom Aufenthaltsanker entfernt sein; maximal 12 Yards Höhenunterschied erlauben einen Schlafplatz im Obergeschoss. Der lokale Weg muss vollständig und unverdächtig sein und darf maximal 120 Yards lang sein. Anlauf und Ankunft prüfen auf andere Spieler am Platz. Die Ankunft muss innerhalb von 60 Sekunden und mit höchstens einem Yard Positionsabweichung bestätigt werden. Wasser, Fallen, Kartenwechsel, entfernte Ortsdefinitionen, veränderte Ruhehaltung und Kampf beenden beziehungsweise verhindern die Szene. Beim Abbruch oder Intentwechsel wird die Haltung zurückgesetzt. Fernreisen behalten die vorhandene sichere Übergabe an regulären Graphnodes.

Bedienung

Serverkonsole (im Spiel mit führendem Punkt):

clientless adventure intent 26 rest goldshire_tavern 3600
clientless adventure status 26
clientless adventure micro 26 rest_sleep
clientless adventure intent 26 rest stormwind_rest_bench 3600
clientless adventure micro 26 rest_seat
clientless adventure stop 26

micro ist ein gezielter Test während eines laufenden passenden Intents am Zielort. Es umgeht weder Ortsbedingungen noch Navigation oder native Sitzbestätigung. Der Tagesplaner kann rest anhand von activity_affinity.rest auswählen (Standardgewicht 0,5); vorhandene gespeicherte Tagespläne werden nicht nachträglich umgeschrieben. Arthorans Tagesplan bleibt für die gezielte Sichtprüfung ausgeschaltet.

Prüfungen

python3 tests/clientless/test_adventure_rest.py
python3 tests/clientless/test_adventure_rest_fire.py
python3 tests/clientless/test_adventure_social_fire.py
python3 tests/clientless/test_adventure_micro_reset.py
python3 tests/clientless/test_adventure_intent_state.py
python3 tests/clientless/test_adventure_social.py
python3 tests/clientless/test_adventure_walk.py

Die neue Regression führt die produktiven Auswahl- und Aktualisierungsfunktionen mit kontrollierten Navigationsadaptern aus: geeignete Kategorien, Karte, Fraktion, Abstand und Höhe, bestätigte Ankunft, belegte Plätze, vollständige Ruhedauer nach Anreise, Navigationsfehler, Zeitlimit, Katalogänderung und unterbrochene Haltung. Bestehende Prüfungen decken Sitzbestätigung, Gehmodus, Aufräumen und Intentübergabe ab. Build und technische Tests ersetzen die visuelle Abnahme der neuen Ruheabläufe nicht.

Testserverstand am 27.10.2026

  • Debug-Build mit -j10 erfolgreich, installiert. Alle neun ausgeführten Adventure-/Beobachter-Regressionsskripte erfolgreich.
  • Frische Worldserver-Sitzung mit (worldserver-daemon) ready..., fortlaufendem Prozess und geöffnetem Port 8085 bestätigt.
  • Goldhain: INTENT_ARRIVED, REST_APPROACH und REST_CONFIRMED für goldshire_sleep_upstairs bestätigt. Der lokale Weg führte über die Treppe und zwei Splineabschnitte mit walk=1; die tatsächliche Ankunft lag bei (-9457.200, 32.800, 63.820). Angeforderte Schlafdauer: 131 Sekunden. Der nachfolgende Intentwechsel beendete diese Schlafphase vorzeitig.
  • Sturmwind: INTENT_ARRIVED und rest_seat bestätigt. Native Steinbank Entry 203936, Slotposition (-8473.900, 847.299, 105.786), Slotfehler 0.000, Sitzhaltung 5, Bewegungs-GUID 26. Der lokale Anlauf lief mit walk=1. Die Auswahl darf andere passende Bänke in der Nähe des Anlaufpunkts verwenden.
  • Der Banktest begann nach administrativer Positionierung am Kathedralenplatz; die anschließende Navigation zum Ruheort und die Sitzplatzbenutzung waren regulär. Die Fernreise von Goldhain zu dieser Bank ist nicht als erfolgreich geprüft einzustufen: der bestehende Graph plante einen weiten Umweg über Eisenschmiede (16 Schritte zum Hafenanker); der Versuch wurde beendet. Bei einer zwischenzeitlichen Rückreise traten außerdem vorhandene Navigationsfehler mit _checkPathLengths() auf. Diese Reiseprobleme wurden im Rahmen der Ruhe-Erweiterung nicht verändert.
  • Für den isolierten Banktest wurde der Startauftrag im Profil kurzzeitig angepasst und nach bestätigtem Login wieder vollständig zurückgesetzt. Arthoran bleibt zur Sichtprüfung im laufenden Ruhe-Intent in Sturmwind; sein Tagesplan ist aus. Das unveränderte Profil startet nach erneutem Login weiterhin den bisherigen Sozialauftrag in Goldhain.

Offen bleiben die visuelle Abnahme der neuen Schlafdarstellung und des Ruheablaufs sowie eine reguläre Fernreise bis zum Stadtbank-Ruheort. Bodenrast ist automatisiert geprüft, hat aber noch keinen eigenen Live-Testpunkt. Weitere Ruheorte können über den bestehenden Ortskatalog ergänzt werden.

Fortschreibung: Der Nutzer hat den lokalen Anlauf zur Stadtbank, Absteigen und Hinsetzen visuell bestätigt. Für die anschließende Schlafvorführung in Sturmwind wurde gilded_rose_sleep_upstairs im Obergeschoss der Taverne the_gilded_rose ergänzt. Die markierte Bodenposition verwendet die native Schlafhaltung; automatische Bettbenutzung ist weiterhin nicht implementiert.

Feuerrast-Ergänzung am 27.10.2026

rest_fire ist im Testkatalog aktiv (34 Aktionen insgesamt). Die additive Migration wurde angewendet; vorhandene Feueraktionen für Geselligkeit und Abenteuer blieben unverändert. Alle 22 Clientless-Regressionsskripte und der Debug-Build mit -j10 bestanden. Die Binärdateien sind installiert; der frische Start erreichte ready..., Prozess und Port 8085 wurden bestätigt.

Arthoran wurde mit seinem Ruheauftrag in der Gilded Rose wieder eingeloggt. Sein Profil wurde nur für diesen Login temporär angepasst und anschließend bytegenau zurückgesetzt. INTENT_ARRIVED und natives Sitzen sind erneut bestätigt. Der gezielte Aufruf micro 26 rest_fire wurde dort mangels eines geeigneten erkannten Feuers abgelehnt; die laufende Sitzszene blieb erhalten. Damit ist die Laufzeitsperre an diesem Innenraum geprüft, nicht eine erfolgreiche Feuerrast. Feuererzeugung und vorhandene Feuer sind mit kontrollierten Adaptern getestet; eine positive Sichtprüfung der Feuerrast und der verschobene visuelle Schlaftest bleiben offen. Im aktuellen Testkatalog gibt es noch keine aktivierten rest_ground-Locations; neue Plätze müssen vor Freigabe räumlich geprüft werden.

Die ergänzte Gebäudesperre/Stadtsperre ist ebenfalls gebaut (-j10) und installiert. Die drei betroffenen Feuer-/Szenen-Regressionsskripte bestanden, einschließlich unmarkierter Stadtviertel mit Stadt-Parent, getrennter Zone, Handelskanal-Kennzeichen, fehlender Gebietsdaten und weiterhin nutzbarer vorhandener Feuer. Die geladenen enUS-AreaTable-Daten bestätigen die Stadtkennzeichen unter anderem für Sturmwind und deren Vererbung an das selbst unmarkierte Untergebiet 1617. Der Testserver erreichte erneut ready...; Prozess und Port 8085 wurden geprüft. Arthoran ist wieder im Ruhe-Intent in der Gilded Rose, sein temporär angepasstes Startprofil ist zurückgesetzt.

Schlafvorführung am 27.10.2026

Auf ausdrücklichen Nutzerwunsch wurde die Schlafprüfung wieder aufgenommen. Arthoran reiste regulär von Elwynn zur Gilded Rose. Der alte Schlafmarker lag 1,72 Yards vom nativen MMAP-Endpunkt entfernt und wurde deshalb von der strengen lokalen Ankunftsprüfung zurückgewiesen. Die native Navigation erreichte über die Treppe (-8865.066, 684.800, 105.517); der Marker wurde gezielt dorthin korrigiert (Migration _06, auf Test-DB bereits ausgeführt). Keine Lockerung der Ankunftsprüfung, kein Teleport. Der kurz verwendete Lua-Testoverride wurde bytegleich wiederhergestellt.

REST_CONFIRMED guid=26 point='gilded_rose_sleep_upstairs' posture='sleep' durationMs=168000 bestätigt die gestartete native Schlafhaltung. Die sichtbare Abnahme durch den Nutzer steht noch aus. Der Ruheauftrag gilt für diesen Testlauf; das normale Lua-Profil blieb unverändert.

Flächensuche statt ungeprüfter Schlafposition

Die Sichtprüfung vom 27.10.2026 zeigte Arthoran mitten im oberen Stuhl. REST_CONFIRMED belegte zuvor nur Navigation und Haltung, keine freie Liegefläche. Die Migration _06 wird deshalb nicht weiter als räumlich abgenommener Platz betrachtet. Ihr Punkt dient jetzt als Suchanker; vorhandene Koordinaten bleiben erhalten.

Schlaf sucht bis acht Yards um einen geeigneten rest_sleep-Anker; ohne nutzbaren Schlafanker dürfen freigegebene Tavernen als Suchanker dienen. Explizite Schlafanker haben Vorrang. Die Suche bleibt innerhalb von 1,5 Yards zur Ankerhöhe und im Innenraum. Sie ersetzt keine Anreise und teleportiert nicht.

Reihenfolge innerhalb der Suche:

  1. Phasenrichtige, gespawnte native Bettobjekte, deren Name ein vollständiges Bett-/Bedroll-/Bunk-/Cot-Wort enthält. Ein eigener nativer Betttyp existiert nicht; auch Betten vom Typ Chair werden nicht als Stuhl benutzt.
  2. Geometrisch mögliche erhöhte Liegeflächen mit abrupten Kanten auf beiden Seiten (mindestens 0,35 Yards Abfall auf 0,15 Yards Strecke, höchstens ein Yard Höhendifferenz). Das ist eine Heuristik, keine sichere Bettklassifikation; ein passender Tisch kann geometrisch gleich aussehen.
  3. Ein freier ebener Bodenplatz, auch in Gasthäusern ohne Bett.

Für jede Ausrichtung wird eine modellgrößenabhängige Körperfläche geprüft: mindestens 3,2 × 1,3 Yards, größere Charaktermodelle entsprechend größer. 45 Stützstellen müssen eine gemeinsame ebene, trockene Fläche ergeben (maximal 0,18 Yards Abweichung). Native VMAP-/dynamische Sichtlinien auf mehreren Körperhöhen und senkrechte Abfragen prüfen Möbel, Wände und niedrige Überbauten. Native Stühle werden zusätzlich mit Sicherheitsabstand ausgeschlossen, auch wenn ihr Modell keine nutzbare Kollision besitzt. Andere Spieler und Kreaturen dürfen die Körperfläche nicht belegen. Dekoration ohne Kollisionsdaten und ohne eigene erkennbare Objektkennung bleibt technisch nicht sicher erfassbar.

Der gewählte Platz und seine Ausrichtung werden getrennt vom Suchanker in der Szene gespeichert. MMAP muss ihn vollständig und unverdächtig erreichen; maximale Endpunktabweichung 0,3 Yards, tatsächliche Ankunft höchstens 0,35 Yards. Ein Pfad auf dem Boden unter einer Bettfläche gilt damit nicht als Bettankunft. Die Flächenprüfung wiederholt sich unmittelbar vor der Schlafhaltung und alle zwei Sekunden während des Schlafens. Änderungen beenden die Szene über das vorhandene Aufräumen. Bodenrast (rest_ground) behält ihr bisheriges Verhalten.

Neue Regressionen: test_adventure_rest_space.py (produktive Flächen-/Kantenregeln), test_adventure_rest_targets.py (produktive native Objektauswahl und Suchadapter). test_adventure_rest.py prüft zusätzlich den vom Anker abweichenden Zielpunkt, die erneute Flächenprüfung und den Abbruch bei nachträglicher Belegung.

Liveprüfung des Flächenausbaus am 27.10.2026:

  • Debug-Build (-j10) erfolgreich, sauber gestoppt, installiert und neu gestartet. Frische Ready-Meldung nach elf Sekunden, Prozess 31446 und Port 8085 bestätigt.
  • Alle 38 zunächst vorhandenen/ergänzten Testskripte bestanden; der danach ergänzte native Zieladaptertest ebenfalls, insgesamt 39. Die anschließend erweiterten Ruhe-, Flächen- und Zieladaptertests erneut erfolgreich.
  • Arthoran erreichte den oberen Suchanker regulär. Suche: beds=0 raised=0 floor=18. Gewählt wurde (-8868.534, 682.800, 104.949), Ausrichtung 3,740. Native Geh-Anreise über 4,03 Yards, Endpunktfehler 0,00, danach REST_CONFIRMED mit 243 Sekunden Schlafdauer. Kein Teleport/Objektbenutzen.
  • Source- und installierte Profilkopie entsprechen wieder dem unveränderten Normalprofil (SHA256 26b11c3108e6ecc5dbc59d1852b4103ca4e818148603a34c02a470c969dc659b).
  • Bett-/erhöhte-Flächen-Präferenz ist durch produktive Adapterfixtures geprüft, noch nicht positiv live an einem realen Bett. Sichtprüfung des neuen Bodenplatzes durch den Nutzer bleibt offen. Keine neue DB-Migration nötig.

Erneute Suche auf Nutzerwunsch bei Allitester: separater Testanker gilded_rose_sleep_room_test, (-8877.360, 673.489, 104.950), O=0,649831. Arthoran erreichte den Punkt nach frischem Laden des Reisepunkt-Caches regulär. Auch hier beds=0 raised=0, zuletzt floor=46; Schlafhaltung am Boden bestätigt (143 Sekunden). Die sichtbaren Zimmerbetten sind damit weiterhin nicht erkannt; der genaue geometrische Ablehnungsgrund wurde noch nicht instrumentiert. Der ältere Anker wurde für die gezielte Auswahl kurz ausgeblendet und danach vollständig wieder aktiviert. Normalprofil unverändert wiederhergestellt.