Files
Viano-Core/doc/clientless/economy-intent.md
T
Nico c0c799c4b6
GCC PCH / build (push) Canceled after 0s
clang PCH / build (push) Canceled after 0s
Add AdventureBot combat reactions, training and corpse recovery
2026-10-27 23:17:05 +01:00

10 KiB

Wirtschaften-Intent

Technischer Name: economy. Diese Ausbaustufe stellt wirtschaftliche Besuche dar: regulär anreisen, einen passenden Dienstleister aufsuchen, ruhig schauen, reden oder warten, sich verabschieden und den Schalter wieder verlassen. Es gibt keine tatsächlichen Käufe, Verkäufe, Auktionen, Gebote, Banktransfers oder Geldbewegungen. Es werden keine entsprechenden Interaktions- oder Transaktionshandler aufgerufen und keine wirtschaftlichen Fenster simuliert.

Mikroaktionen

Aktion Ablauf
economy_repair Einen echten reparaturfähigen Händler aufsuchen; nach abgeschlossener Szene sämtliche Ausrüstung kostenlos nativ reparieren. Keine Händlerinteraktion.
economy_vendor_visit Einen freundlichen erreichbaren Händler aufsuchen, kurz umsehen, verabschieden und zurücktreten.
economy_goods Beim Händler länger Waren betrachten. Die Darstellung richtet sich zum tatsächlichen Händler; eine passende Auslage ist keine Voraussetzung.
economy_trade Begrüßen, Handelsgespräch darstellen, zuhören, nicken und verabschieden.
economy_compare Zwei verschiedene erreichbare Händler nacheinander besuchen und Angebote betrachten. Ein einzelner Händler genügt nicht.
economy_auction_visit Einen tatsächlichen Auktionator aufsuchen und das Auktionshaus kurz besuchen.
economy_auctions Beim Auktionator eine längere ruhige Prüfphase darstellen.
economy_bank_visit Einen tatsächlichen Bankier aufsuchen und die Bank kurz besuchen.
economy_banking Am Bankschalter Gespräch und Prüfung darstellen.
economy_supplies Ruhige Prüfung der Vorräte darstellen, ohne Inventarzugriff oder Änderungen.
economy_wait Bei einem passenden Dienstleister auf Bedienung warten. Kein Warteschlangensystem.
economy_finish Einen zuvor besuchten, noch anwesenden Dienstleister verabschieden und den Schalter verlassen.

Ziele und Ausführung

Migration: sql/custom/world/2026_10_27_03_adventure_economy.sql nach den bisherigen Intent-Migrationen. Sie ergänzt Katalogeinträge mit INSERT IGNORE; bearbeitete Definitionen, Gewichte und Positionen bleiben erhalten.

Der Tagesplan entscheidet zuerst anhand des Profils über das Vorhaben. Erst anschließend wählt der Ortsplaner ein passendes vorhandenes importiertes Ziel. Ein fehlender Händler-Eintrag darf den Intent im Tagesplan nicht ausschließen. Siedlungen, Gebiete und bekannte Serviceorte werden für Wirtschaften höher gewichtet; auch andere importierte Orte sind grundsätzlich verwendbar. Ausdrücklich eingestellte Ortsgewichte einschließlich Null behalten Vorrang. Fraktionszuordnung und normale Reiseprüfungen bleiben bestehen.

stormwind_economy_market, stormwind_economy_bank und stormwind_economy_auction sind zusätzliche gezielte Testpunkte. Sie begrenzen weder die Ortswahl noch die Verfügbarkeit des Intents für andere Fraktionen. An jedem anderen passenden Ort findet der Bot die wirklichen Dienstleister über ClientlessPerceptionMgr: Suchradius 100 Yards, native Fähigkeiten, Freundlichkeit, Phase und anschließende geprüfte lokale Annäherung. Dafür müssen keine einzelnen Händler oder deren Aufenthaltsorte vorgegeben werden. Es wird kein Handels-NPC aus einer Datenbankposition nachgespielt.

Die vorhandenen sozialen Fähigkeiten bleiben gemeinsam genutzt. Zielwahl prüft die nativen Rollen VENDOR, BANKER oder AUCTIONEER, Freundlichkeit, Lebendigkeit, Kampfzustand, Phase und den Aufenthaltsbereich. Vor der Annäherung muss der Dienstleister noch nicht vom Ankunftspunkt aus sichtbar sein. Der mögliche Gesprächsplatz und die tatsächliche Szene benötigen eine native Sichtlinie auf Augenhöhe über den Schalter hinweg. Wände bleiben blockierend. Nur ausdrücklich spezialisierte Testpunkte grenzen die Rollen zusätzlich ein: Händler im Marktbereich, Bankiers in der Bank, Auktionatoren im Auktionshaus. Das gilt auch für Warte- und Abschiedsszenen. Andere Bots sind keine Dienstleister. Nicht erreichbare Schalter werden nicht als Besuch gezählt. Die Prüfung bleibt während der Szene aktiv. Händlervergleiche wechseln ausdrücklich zu einer anderen GUID. Wiederholungsdämpfung berücksichtigt Aktionen, Ziele und Textvarianten.

Nach dem Abschied läuft der Bot über MMAP zum Ankunftspunkt zurück. Nur die bestätigte tatsächliche Ankunft erzeugt ECONOMY_VISIT_COMPLETE; ein gescheiterter Rückweg täuscht keinen Abschluss vor. Fehlende Dienstleister lösen eine reguläre Suche nach einem anderen Wirtschaftsziel aus. Das gilt auch, wenn keine der möglichen Serviceannäherungen einen erreichbaren Gesprächsplatz findet. Kampf, Intentwechsel und Offline beenden die Szene über das bestehende Reset-Verfahren.

Der technische Intentname ist auch für manuelle Aufträge und neue Tagespläne verfügbar. activity_affinity.economy steuert die Tagesplangewichtung (Standard 0,5; Arthoran 0,45). Bereits gespeicherte vollständige Tagespläne werden nicht verändert. Lokale Servicewege werden im Gehmodus und innerhalb der Location-Zone ausgeführt. Die Intentauswahl fragt den Ortskatalog nicht ab.

Beispiel für die Testserverkonsole:

clientless adventure intent 26 economy stormwind_economy_market 3600
clientless adventure micro 26 economy_compare
clientless adventure status 26

Die gezielte Mikroaktion setzt einen bereits angekommenen sicheren Bot voraus.

Prüfung

Automatisierte Prüfungen führen die produktive Rollen-/Umgebungswahl und Gestensequenzen aus, einschließlich Rollenverlust, zweitem Händler, verweigerter Navigation und bestätigter Abreise. Der Katalogtest führt die Migration aus und prüft Referenzen, Allianzgrenzen, native Servicevoraussetzungen und Idempotenz. Eine erfolgreiche Kompilierung allein ist keine Ingame-Abnahme.

Live-Prüfung am 27.10.2026

Der Testserver wurde mit -j10 gebaut, installiert und bis zur frischen Ready-Meldung mit lebendem Prozess und Port 8085 geprüft. Alle 29 Clientless-Testskripte bestanden.

  • Händlervergleich vollständig: Edna Mullby (1286) und Thurman Mullby (1285), unterschiedliche tatsächliche GUIDs, Gesprächspositionen und Gesten, ECONOMY_COMPARE_NEXT, Abreise und ECONOMY_VISIT_COMPLETE visits=2.
  • Auktionshaus vollständig: Auctioneer Chilton (8670), längere Prüfphase, Abschied, Abreise und bestätigter Abschluss.
  • Bank vollständig: Scott Westmill (43820) sowie ein automatisch ausgewählter weiterer Bankbesuch; tatsächliche Kundenseite, Abschied und bestätigter Rückweg. Die anfängliche Sichtprüfung auf den Körperpunkt hinter dem Schalter wurde durch geprüfte Annäherung und native Sicht auf Augenhöhe ersetzt. Dabei wird keine Kollisions- oder Sichtlinienprüfung umgangen.
  • Im finalen Stand wählte Arthoran nach dem Login selbstständig economy_banking bei Thomas Westmill (43822); lokale Wege liefen mit walk=1. Bank-, Händler- und Auktionshausrollen bleiben nach Location getrennt.
  • Gespeichertes Geld und vollständige Inventarzuordnung einschließlich Gegenstands-IDs und Stapelzahlen waren nach den drei Servicebereichen bytegleich zum Ausgangsstand. Temporäre Login-Profiländerungen wurden zurückgesetzt; der normale Initial-Intent bleibt unverändert.

Die technische Live-Prüfung ersetzt nicht die visuelle Ingame-Abnahme. Weitere Städte und eine Prüfung verschiedener gleichzeitig anwesender Bots sind noch nicht durchgeführt.

Auch der abschließende automatische Bankablauf im finalen Build endete mit ECONOMY_VISIT_COMPLETE action=economy_banking visits=1; anschließend begann selbstständig ein weiterer Besuch bei Newton Burnside (2456).

Korrektur der Planungshierarchie und des Imports

Die anfängliche Einschränkung auf drei Wirtschaftstestpunkte und die davon abhängige Tagesplanauswahl waren falsch. Sie wurden entfernt. Der Ortsimport hatte bereits stattgefunden; zum Diagnosezeitpunkt gab es 2.647 aktive Orte. Ein separater Fehler las SMALLINT-Karten-IDs mit GetUInt32, was im Debug-Core Null ergab. Dadurch wurden unter anderem Kalimdor- und Scherbenweltorte fälschlich Karte 0 zugeordnet. Import und Katalogladen verwenden nun GetUInt16. Die Weltdatenbank-Quelldaten selbst werden nicht geändert.

clientless adventure repairimport ergänzt den normalen Import um eine gezielte Reparatur: Nur Datensätze, deren Quelle, Koordinaten, Kategorie und Metadaten noch den alten automatisch erzeugten Werten entsprechen, werden berichtigt. Manuelle Orte und abweichende Bearbeitungen bleiben erhalten. Karten-, Gebiets-, Regions- und Fraktionsdaten werden neu abgeleitet; bei Wachen-POIs dient ein naher nativer Höhenanker statt der obersten Dachfläche als Bezug. Der normale Import bleibt additiv.

Die gezielte Reparatur wurde auf dem Testserver zweimal ausgeführt. Sie berichtigte 2.159 bestehende automatisch erzeugte Datensätze und ergänzte 217 nun verwertbare Quellorte (insgesamt 2.864 aktive Orte). Alle 16 manuellen Datensätze blieben vollständig unverändert. Der zweite Lauf war bytegleich zum ersten Ergebnis. Orgrimmar und Donnerfels liegen auf Karte 1, Unterstadt auf Karte 0, Silbermond auf Karte 530; alle vier sind als Horde-Orte zugeordnet.

Der abschließende Test nutzte ausschließlich den gewöhnlichen importierten Sturmwind-Ort poi_tele_954: Arthoran nahm über die generische Wahrnehmung einen etwa 68 Yards entfernten Bankier wahr, erreichte ihn über native Navigation im Gehmodus und begann selbstständig eine Bankgesprächsszene. Ein spezieller Bank-Testpunkt wurde für diesen Ablauf nicht verwendet. Build mit -j10, Installation und Neustart waren erfolgreich; alle 30 Clientless-Testskripte bestanden. Eine Reise mit einem Horde-Bot ist dadurch noch nicht ingame geprüft.

Die anschließende Abenteuer-Migration überführt die allgemeinen Wirtschafts- gewichte in ausdrückliche Location-/Intent-Katalogeinträge. Ein im Code versteckter Kategorie-Fallback entfällt damit; vorhandene angepasste Gewichte einschließlich Null behalten Vorrang.

Ergänzung: 2026_10_27_08_adventure_repair.sql ergänzt den Reparaturbesuch. Die vollständige Haltbarkeitswiederherstellung ist die ausdrücklich gewünschte Ausnahme von der rein performativen Wirtschaftsdarstellung.