Files
Viano-Core/doc/clientless/interactions.md
T

104 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AdventureBot interactions and player-led groups
Implemented 2026-10-28 on feature/clientless-player-core. No autonomous bot-to-bot
party formation, role assignment, healer/tank AI or proactive PvP aggression.
PlayerAI.cpp supplies spell/attack foundations and charmed-player follow logic;
it does not implement invitation decisions. AdventureBots keep independent
controllers and use the native party invitation response handler.
## Encounters
Directed native text emotes greet/hello/wave/bow/salute/smile/thank and
rude/threaten/roar generate GUID-only notices in ClientlessPlayerMgr. Map workers
never call AdventureBot policy directly. Queues are bounded and delivered on the
world thread. Participants must be alive, mutually visible, in the same map,
instance and phase, within 25 yards and in line of sight.
Replies wait 1–3 seconds, briefly interrupt the current activity, face the other
player and use native animation emotes. Friendly encounters wave/bow; hostility
or hostile emotes produce a negative gesture. There is no automatic attack just
because another player is hostile. Original intent deadlines are retained.
The global reply cooldown is 15 seconds, the same partner has 120 seconds.
Direct chat/free conversation parsing is not implemented.
Bots in social/leisure/rest can occasionally initiate a five-second encounter
with another available AdventureBot within 12 yards. The lower character GUID
initiates and reserves both participants. The peer must also have a compatible
intent. Sociability weights initiation. Pair cooldown is five minutes; native
animation replies never feed back into incoming text-emote events. Occasional
localized 'Safe travels' accompanies greetings. This is a short greeting, not a
multi-line conversation or synchronized shared activity.
Real positive damage by another player or their pet against the bot's active
combat target can queue a thank-you. Damage attribution is captured after damage
rejection/duel clamping and before lethal cleanup; no threat-only inference.
The thank-you is deferred until combat and the existing self-care finish, and
requires the helper still to be nearby and friendly. Dummy training is excluded.
## Invitations and group behavior
An actual native invitation is answered after 2–4 seconds in a safe state.
Acceptance probability clamps sociability plus an intent adjustment to [0,1]:
rest −0.50, profession/economy −0.25, adventure/instance +0.20, other +0.10.
Inviter must be alive and friendly. Bots do not accept invitations from other
clientless players yet; autonomous bot grouping is explicitly deferred.
Invitations are declined inside dungeons. Normal faction/group restrictions run
before the invitation reaches the bot; none are bypassed.
Membership suspends autonomous intent execution, clears its queued actions and
retains its deadline. Native membership survives server restart. Bots follow the
current leader with checked local MMAP paths, aiming about three yards behind
and stopping within five yards. Longer/cross-map routes use existing
travel_to_node actions toward a nearby TravelGraph node at the leader's location;
no new teleport shortcut is introduced. Coverage of the graph and native portal
rules determines whether these routes work. An active graph trip is allowed to
finish before local follow resumes. Transport/flight states are not interrupted.
Unreachable destinations are retried conservatively; an active leader does not
cause a timeout merely because the route is missing.
Nearby (40 yards) group members' actual combat targets or attackers can be
supported with the existing damage executor. Self-defense retains priority and
the first actual damager focus. Assist requires native attack permission, valid
visibility/phase, a verified path, at least 30% HP, and excludes world bosses and
creatures more than two levels above the bot. Other classes currently retain
basic autoattacks; class-specific support roles remain future work.
## Leaving
Never voluntarily leave while dead, fighting, in a dungeon/raid, on a transport,
or in flight. Pending conditions are reevaluated when safe:
- A changed scheduled intent/location permits leaving. Personality
`group_loyalty` is the chance of staying for that new block (default 0.25,
Arthoran 0.35). The choice is made once per observed change, not each tick.
A new date generates/loads the native daily plan even while grouped.
For manual intents, expiry of the original deadline also changes this token.
- The leader being explicitly AFK for ten minutes, or ten minutes of observed
inactivity, permits leaving. Position/orientation, selection, combat,
casting, native chat, text emotes, spell and item requests count as activity.
Sampling cannot detect every conceivable stationary action. Native AFK takes
precedence while set. A new leader starts a fresh observation window; returning
from AFK ends the explicit AFK window. Observation clocks restart after a
server restart, so a restart does not immediately evict a bot.
Before voluntarily leaving, a localized farewell is sent to the native party
chat. Native RemoveMember performs removal. Removal/disbanding by other players
also resumes autonomous scheduling at the current time, retaining deadlines.
## Diagnostics and verification
`clientless interaction 26` reports membership, leader, partner, intent,
schedule observation, idle/AFK seconds, sociability and loyalty. No state changes.
`tests/clientless/test_adventure_interactions.py` compiles and executes production
manager code with deterministic native-world adapters: invitation acceptance and
rejection, group following/path rejection, leader changes, 599/600-second
boundaries, activity, deferred exits, directed group emotes, hostile replies,
pair reservation, cooldowns, graph handoff and deferred thanks.
`test_adventure_combat_reactions.py` also covers player target permission and
player damage notices while preserving corpse recovery regression checks.
These tests do not replace live client acceptance. Multi-client player invites,
real PvP/pet defense, cross-map/instance group following, ten real minutes of AFK,
and two simultaneously online AdventureBots require separate gameplay checks.