282 lines
16 KiB
Markdown
282 lines
16 KiB
Markdown
# 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):
|
||
|
||
```text
|
||
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
|
||
|
||
```bash
|
||
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.
|