Files
Viano-Core/doc/clientless/combat-reactions.md
T
Nico d6fea6ee68
clang PCH / build (push) Canceled after 0s
GCC PCH / build (push) Canceled after 0s
Add AdventureBot groups, raid preparation and shared travel
Implement native bot recruitment and player admission, leader-owned destinations, intent-specific capacities, preparation scheduling and shared graph and flight travel. Support native group instance visits and separate raid entrances.

Include pending personality-driven faction PvP and solo fleeing, preserving the absolute group fleeing exclusion. Add regression fixtures, migration, documentation and test-server evidence.
2026-10-28 15:00:41 +01:00

15 KiB
Raw Blame History

Kampf, Reaktionen und Interaktionen – vereinbarte Grundlage

Stand 27.10.2026. Neue Nutzervorgaben nach Abschluss der sieben Grundintents. Historische Vereinbarungen und aktueller Umsetzungsstand; siehe Nachtrag unten. Kampf, reaktives Verhalten, Bot-Spieler- und Bot-Bot-Interaktion gehören für den Nutzer zusammen. Bestehende Intent-, Reise- und Szeneninfrastruktur erhalten; DungeonBots bleiben unabhängig. Allgemeine Hinderniserkennung bleibt vertagt.

Verbindliche Zielregeln

  • Selbstverteidigung: die Kreatur, die zuerst tatsächlich Schaden am Bot verursacht, wird Fokusziel. Weitere Angreifer verdrängen sie nicht. Fokus bis zum Tod dieser Kreatur beibehalten. Ein zufälliger Zielwechsel ist unerwünscht.
  • Proaktiver Angriff: nächstgelegenes gültiges und zum aktuellen Intent passendes Ziel wählen. Die Intentregeln bestimmen zuerst die zulässige Zielmenge.
  • Abenteuer: nahe feindliche Kreaturen auf dem aktuellen Weg berücksichtigen; keine wahllose Jagd auf alles im allgemeinen Umkreis.
  • Beruf/Lederjagd: ein nahes geeignetes Tier wählen. Die bestehende Freigabe des betreffenden Hauptberufs im Lua-Profil gilt weiter. Arthoran hat derzeit nur mining und blacksmithing; diese Absprache erteilt ihm nicht automatisch skinning. Das tatsächliche Sammeln/Kürschnern bleibt gemäß bisheriger Regel performativ; der neu beauftragte Kampf selbst ist real.
  • Vor einem eigenständigen Angriff Eignung/Stärke prüfen, insbesondere deutlich überlegene Gegner ausschließen. Exakte Level-, Distanz-, Gesundheits- und Ressourcen-Grenzen sind noch nicht vom Nutzer festgelegt.

Noch auszugestalten: Verhalten, wenn ein Fokusziel despawnt, phasen-/kartenfremd oder dauerhaft unerreichbar wird; Selbstverteidigung gegen überlegene Gegner; weitere verbleibende Angreifer nach Tod des Erstangreifers. Nicht als bereits vereinbarte Zielwechsel-/Fluchtregeln ausgeben.

Vom Nutzer bestätigte Ergänzungen

  • Bei Berufsarbeit einen nahen feindlichen Gegner berücksichtigen, der den unmittelbaren Zugang zur konkret gewählten Ressource/Arbeitsstelle blockiert.
  • Konservativer Erstangriffsfilter: native Angriffserlaubnis, lebendig, richtige Phase, lokaler erreichbarer Kampfplatz, kein Weltboss; Elites zunächst meiden. Zusätzlich Leveldifferenz, aktuelle HP/Ressourcen und nahe weitere Gegner berücksichtigen. Grenzwerte als anpassbare Regeln führen.
  • Geselligkeit, Ruhe, Freizeit, Wirtschaften und der abstrahierte Instanzaufenthalt begründen von sich aus keine Jagd. Selbstverteidigung ist eine überlagernde Reaktion und benötigt keinen Wechsel zum Abenteuerintent.

Verbindlicher Todesablauf

Seele freigeben, als Geist vom Friedhof zurück zur eigenen Leiche laufen und sich wiederbeleben, sobald native Reichweite und übrige native Bedingungen vorliegen. Ist kein Pfad verfügbar, ist nach fünf Minuten die Wiederbelebung am Friedhof erlaubt. Ein langsamer, aber funktionierender Leichenrücklauf ist nicht allein wegen Überschreitens von fünf Minuten ein fehlender Pfad.

Technische Ableitung: nach erreichbaren Punkten innerhalb des erlaubten Leichenradius suchen, nicht nur nach einem Pfad zur exakten Leichenposition. Die fünf Minuten als absolute Frist ab Freigabe/Ankunft am Friedhof behandeln, nicht bei Pfadversuchen oder Neustart neu beginnen. Die genaue Timerauslegung ist eine Umsetzungsauslegung des Friedhof-Fallbacks, keine zusätzliche explizite Antwort des Nutzers. Nach Wiederbelebung ausstehendes Verhalten sicher fortsetzen; keinen Endzeitblock durch die Todesphase künstlich verlängern.

Bestätigte Quellgrundlagen

  • AI/PlayerAI/PlayerAI.cpp und .h: gemeinsame PlayerAI-Helfer für Rollen, bekannte Zauberränge, native Wirkprüfung, Autoangriffe und Formen. Die große Klassen-/Spezialisierungsauswahl liegt derzeit privat in SimpleCharmedPlayerAI. Sie enthält situative Unterbrechungen, DoTs, Kombopunkte und Schutzfähigkeiten.
  • SimpleCharmedPlayerAI ist technisch eine Charm-KI mit Charmer-Zielwahl und Unterstützung dieses Charmers. Der Core installiert sie in Unit::UpdateCharmAI; mehrere Bossskripte leiten davon ab. Also nicht als völlig ungenutzt behandeln. Wiederverwendung erfordert Entkopplung dieser konkreten Charm-Steuerung; keine Unterstellung, der Nutzer wolle sie unverändert übernehmen.
  • Unit::DealDamage ruft DamageTaken/DamageDealt bei vorhandener UnitAI sowie den UnitScript-OnDamage-Hook auf. Diese Aufrufe liegen VOR dem abschließenden HP-Abzug, und nachfolgende Bedingungen können Schaden verhindern. Für die Regel 'zuerst tatsächlich Schaden verursacht' genügt ein ungeprüftes Vorab-Ereignis daher nicht. Nullschaden/Godmode/abgebrochene Treffer dürfen keinen falschen Erstangreifer festschreiben.
  • WorldSession::HandleRepopRequestOpcode führt BuildPlayerRepop und RepopAtGraveyard aus. HandleReclaimCorpseOpcode prüft Geiststatus, GetCorpseReclaimDelay, gleiche Karte und CORPSE_RECLAIM_RADIUS (aktuell 39 Yards), dann native Wiederbelebung und Corpse-Bones. Keine eigene großzügigere Distanz.
  • Der Nutzer lehnt den normalen Geistheiler ausdrücklich ab: beim Fallback nach fünf Minuten keine Wiederbelebungskrankheit und kein zusätzlicher Haltbarkeitsverlust. Nicht HandleSpiritHealerActivateOpcode/SendSpiritResurrect verwenden. Die native ResurrectPlayer-Funktion ohne Sickness und die saubere Corpse-Bones-/Geistzustandsbereinigung können dafür wiederverwendet werden. Der normale Leichenrücklauf bleibt zuerst vorgesehen.
  • PlayerScript bietet Chat- und gerichtete Textemote-Ereignisse. Vorhandene AdventureSocialActions stellen bereits Begrüßung, Gespräch und Reaktionen dar. Konkrete Regeln für Spieler-/Bot-Interaktionen sind noch weiter auszugestalten.

In dieser Vorprüfung wurden keine Kampf-/Todesabläufe implementiert oder live getestet und keine Server-/DB-Zustände verändert.

Nachtrag: Reparaturbesuch und Kampfausstattung

Nutzerauftrag: zusätzliche Wirtschafts-Mikroaktion bei einem echten Händler mit Reparaturfähigkeit. Sichtbare Szene rein performativ, keine Händler-/Kauf-/ Reparaturpakete, kein Geldabzug. Nach erfolgreich abgeschlossenem Besuch repariert Hintergrundlogik alle Ausrüstungsgegenstände auf volle Haltbarkeit. Dies ist die explizit gewünschte Ausnahme von der bisherigen reinen Darstellung wirtschaftlicher Besuche; keine Reparaturkosten-/Zustandsplanung nötig.

Arthoran soll Kopien von Allitesters angelegter Rüstung und Waffen erhalten, alle stufengerechten Klassenfähigkeiten lernen, Talentpunkte sinnvoll innerhalb der Stufe-60-Grenze verteilen und passende Angriffe vorführen. Allitesters Originale bleiben unverändert. Beide sind Krieger; Vorprüfung ergab Zorn-Set und Ashkandi, passend zu einem Waffen-Build. Quelle ist Stufe70, Arthoran bleibt60. Die native Level-60-Talenttabelle erlaubt 26 Punkte, keine überhöhte Freischaltung aller Talentbäume. Kampfübung an einer tatsächlich vorhandenen Stufe-60-Puppe; damit wird noch keine vollständige autonome Kampf-/Reaktions-KI behauptet.

Technischer Umsetzungsstand nach Kampfausstattung

Reparaturaktion implementiert; native IsArmorer-Prüfung, erreichbare freundliche NPCs und bestehende Ankunfts-/Szenenprüfung. Einmal nach erfolgreichem Besuch DurabilityRepairAll(false, 1.0f, false), ohne Kosten oder Interaktionspakete.

Arthoran erhielt neun neue Iteminstanzen aus Allitesters angelegtem Zorn-Set und Ashkandi. Frühere Gegenstände bleiben im Inventar; Allitesters vollständiger Inventar-/Item-/Zauber-/Talentsnapshot blieb unverändert. Native Klassen- und Stufenprüfung, Plattenkompetenz und Haltungen sowie 26 Waffen-Talentpunkte über LearnTalent, Baum 746. Keine fremden Spezialisierungsfähigkeiten freischalten.

Begrenzte Trainingsübung über PlayerAI-Helfer; nur tatsächliche passende Trainingspuppen, native Sicht-/Phasen-/Angriffserlaubnis. Keine Phasenänderung. Phase169 ist DEFAULT_PHASE; die erste Fehlposition hatte fehlende Sichtlinie. Nach administrativer Offline-Positionierung vor der echten Puppe314147 waren Phase, Sichtbarkeit und Sichtlinie gültig. Live wurden unter anderem Heroischer Stoß78, Verwunden772, Tödlicher Stoß12294 und Überwältigen7384 von Spell::prepare mit SPELL_CAST_OK(255) angenommen. Das belegt die begrenzte Übung, keine fertige autonome Selbstverteidigungs-, Todes- oder Interaktionssteuerung.

Debug-Build erfolgreich installiert; 48 Testskripte erfolgreich.

Live-Reparatur erfolgreich: reguläre lokale MMAP-Anreise zu Marda Weller1287, vollständige Szene und ECONOMY_REPAIR_COMPLETE. Nach saveall alle neun zuvor halbierten Kopien wieder voll, Geld0 und Allitesters Snapshot unverändert.

Ausbau: Training, Erstangriffe und Todesreaktion

AdventureCombatMgr überlagert den Lua-Adventure-Controller während Kampf/Tod. Generischer ClientlessPlayerMgr übergibt ausschließlich tatsächlich nach HP-Abzug entstandene Schäden als GUID-Ereignisse. Mutex-Queue trennt Map-Worker und World-Thread; andere Controller bleiben bei ihrer bisherigen Standardfunktion. Der erste tatsächliche Kreaturenangreifer wird festgehalten. Weitere Angreifer warten in Schadensreihenfolge, bis der Fokus tot ist. Phasenverlust/Despawn bzw. 20 Sekunden unerreichbarer Fokus beenden eine nicht mehr ausführbare Verfolgung. Spieler und von Spielern kontrollierte Kreaturen sind nicht Gegenstand dieses Ausbaus.

Automatischer Erstangriff im Abenteuer nur auf nächstgelegenen passenden Gegner im lokalen20Yards-Umkreis und8Yards-Korridor des tatsächlichen aktiven MMAP-Wegs. Für Kürschnerei nur bei Profilrecht und lebendem BEAST mit nativer SkinLootId; Arthoran erhält dieses Recht weiterhin nicht. Andere Intents lösen keine Jagd aus. Vorläufiger konservativer Filter: höchstens+2Level, mindestens60%HP und bei Manaklassen30%Mana, keine Elites/Weltbosse, höchstens ein Gegner im12Yards-Umfeld, kein bereits fremd bekämpfter Gegner. Native Phase/Sicht/Angriffserlaubnis und vollständiger unverdächtiger MMAP-Anschluss bleiben Voraussetzung.

Kampf nutzt native Autoangriffe und für Krieger die stufengelernten Fähigkeiten, Ressourcen und Abklingzeiten. Keine künstlichen Ressourcen-/Schadenswerte. Andere Klassen erhalten hier zunächst Autoangriffe; eigene Rotationen folgen. Training ist Freizeit-Aktion leisure_training60–180Sekunden an echter erreichbarer Puppe im60Yards-Umkreis, begrenzt zusätzlich durch aktuelle Intentfrist. Echte Selbstverteidigung kann Training unterbrechen. Keine Dummy-Spawns/Phasenänderungen.

Tod über native Freigabe- und Leichenaufnahmehandler. Persistierter GhostTime bestimmt sowohl native Aufnahmefrist als auch Fünf-Minuten-Fallback; Charakter und Leichenzeitpunkt werden nach Freigabe gespeichert. Mehrere mögliche Ziele innerhalb39Yards werden geprüft. Gescheiterte Bewegungspunkte werden für diesen Leichenlauf gemieden. Bei funktionierendem Pfad keine pauschale Zeitbegrenzung. Fallback: erst nach300Sekunden ohne passenden Pfad native Friedhofsrückkehr, danach ResurrectPlayer(.5,false) und SpawnCorpseBones, keine Geistheiler-Interaktion, keine Wiederbelebungskrankheit oder zusätzliche Haltbarkeitsänderung. Normale Kampfschäden bleiben erhalten. Intent-Endzeiten werden durch Reaktionen nicht verlängert.

Diagnose: clientless combat train [seconds], attack , testdeath , stop . Testdeath nutzt ausdrücklich einen nativen Testtod für einen verwalteten Bot, ohne zusätzlichen Haltbarkeitsverlust. 51 Testskripte bestanden; Live-Ergebnisse separat ergänzen.

Live-Abschluss: Trainingsszene regulär nach60Sekunden beendet; Stufe58-Bär42336 (spawn300425) nativ besiegt und Respawn registriert. Erster Testtod: mangels akzeptiertem MMAP-Rückweg volle300Sekunden gewartet, malusfreie Friedhofs- wiederbelebung bestätigt. Zweiter Testtod naheFriedhof: tatsächlicher37.40Yards- Geisterlauf und nativeLeichenaufnahme. NachLogout lebendHP4340 ohneLeiche oder Aura15007 gespeichert. KeineUhrabkürzung, keinNormalreisebeleg durchTestpositionierung. Belege: checkpoints/2026-10-27-combat/. Mehrfachangreifer undNeustart während Leichenlauf produktiv mitAdaptern geprüft, nochkeine entsprechendeLiveabnahme.

Offensive faction encounters

Autonomous solo bots and bot group leaders with an active intent can seek opposing players (including clientless bots) and Horde/Alliance NPCs within 50 yards. Levels must be within five levels inclusive in either direction. Native attack permission, hostility, visibility/phase, LOS and a complete MMAP approach remain required; this does not enable PvP flags or bypass sanctuary rules. Player-controlled pets are not independent offensive targets. Elite/world-boss NPCs remain excluded. Health must be at least 60%, mana users at least 30% mana.

Every 30 seconds the nearest reachable eligible opponent receives one decision: probability = adventurousness * danger_tolerance * intent weight. Weights: adventure 1, leisure .35, social .2, profession .15, economy .1; rest, instance, unknown or disabled intents 0. Missing traits default to 0. Group members retain leader-directed support; only the bot leader may initiate a PvP encounter. Player-led bots never initiate independently. The PvE path/quarry selector excludes faction NPCs so it cannot bypass these personality/level gates. Actual damage still takes precedence via the existing ordered self-defence path, regardless of offensive level boundaries.

COMBAT_PVP_INITIATE records the initiating bot and target; ordinary combat start/end logs continue. Solo tactical flight is described below. Automated fixtures verify the production selector, not live PvP gameplay or class rotations beyond the existing warrior executor.

Solo flight

Grouped bots never flee, including at critical health or against bosses. Joining a group cancels flight on the next combat update and restores ordinary combat support. Ungrouped bots flee from actual attackers at least six levels higher, equal/higher-level elites/bosses, or below 20% health during combat. A nearby strong creature alone does not trigger flight. Training alone does not trigger flight; real damage still interrupts training through self-defence.

The combat manager owns flight, interrupts the current activity and retains the original intent deadline. Every two seconds it tests 24 terrain-adjusted local escape candidates, increasing minimum distance to current/last-known attackers. Complete, non-suspicious MMAP paths up to60 yards are required. Known visible hostiles within12 yards of the proposed corridor are avoided. This is a local heuristic, not a guarantee against unseen enemies or the previously deferred MMAP obstacle limitations. Existing native combat potions remain available. If no suitable path starts, the bot stays and defends itself in melee, retrying other directions on the next evaluation. No teleports, forced combat reset, invulnerability or synthetic movement are used.

Flight persists until native combat ends AND at least50 yards separate the bot from the last known threat positions. Normal self-care then runs before the current intent resumes, with30 seconds of offensive cooldown. Death clears the flight state and uses the existing corpse recovery. Logs: COMBAT_FLEE_START/PATH/BLOCKED/END/CANCEL. Production state-machine fixtures cover level/health thresholds, group override and joining mid-flight, a blocked path, nearby hostile avoidance and safe completion. Live gameplay remains unverified.