Files
Viano-Core/doc/clientless/bot-groups.md
T
Nico be049baacc
clang PCH / build (push) Waiting to run
GCC PCH / build (push) Canceled after 0s
Add deterministic AdventureBot group formation manager
2026-11-01 01:20:37 +01:00

144 lines
8.9 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.
# Autonomous AdventureBot groups
Bot groups use native invitations, party membership, leadership, raid conversion,
instance bindings and persistence. The first inviter becomes leader. Human-led
groups retain the existing interaction/follow behavior. A human invitation to an
already grouped bot acts as a join request: a bounded GUID-only CPC notification
lets the bot leader offer a reverse native invitation, subject to personality,
faction and capacity. Once the player joins, native leadership is transferred to
the human and bots switch to the existing player-led behavior. This does not
parse player chat or forcibly remove any member. Role assignment, healer
or tank AI, and replacement of absent players remain separate work.
## Recruitment and preparation
Adventure, compatible professions, social, instance and raid intents recruit.
Local encounters require phase, visibility, LOS and25-yard proximity. A lone bot
may request admission to an existing matching group; its leader sends the native
invitation. A leader may recruit individual bots. Recruitment and acceptance are
personality dependent, with20–40 seconds between searches,2–4 seconds for native
invite responses (provisional native leaders never answer their own invite) and a10-minute pair cooldown. Dead/combat/fleeing/transit bots do
not recruit. Same faction and an inclusive five-level spread are required.
Profession groups need a common primary profession.
`groupformation` prepares the next hour's intent in a capital. During this phase,
matching NEXT intents are required, not matching original destinations. The
leader's existing formation location becomes the meeting point; members inherit
it and subsequently inherit the leader's activity target and deadline. Their own
stored day plans remain intact and are restored on departure. Departure decisions
track the personal plan, so inheriting a different group destination is not
misinterpreted as an intent change. Unexpired manual
activities are restored too; expired manual activities end. New day generation inserts
preparation before instance/raid blocks, and probabilistically before other
eligible blocks; backwards processing prevents preparations preparing another
preparation. Existing stored days are preserved.
The faction-separated native custom channel `sucheNachGruppe` carries bounded
recruitment and response messages across capitals. The manager pairs structured
bot plans; it never interprets player chat. Opposite-faction channel traffic is
not used. Capital zones include racial capitals, Shattrath and Dalaran.
Announcements currently use German RP text.
Recruitment capacity includes the leader and pending invitations: instance5,
raid20, social10, adventure/profession3. Groups larger than five use native raid
membership. Full groups stop searching. These are intent-specific recruitment
limits; when the leader chooses a smaller activity, excess bot members depart
at a safe point before recruitment continues. Native map admission limits and existing/permanent lockouts remain
in force. Raid preparation requests the native25-player normal difficulty; the catalog
uses native downscaling and requires capacity for at least20 members, excluding
ten-player-only raid maps. Legacy20/40-player raids remain possible.
No role guarantees are implied.
Preparation never waits for a full group or for members to arrive. The leader's
next intent starts on its ordinary deadline. Late members catch up. Formation
suppresses the AFK/inactivity departure timer and refreshes its baseline; the
planned formation-to-activity transition is exempt from intent-change departure.
Later changes retain the existing loyalty-based departure behavior, deferred in
combat/instances/transit. Native removal handles leadership and party dissolution.
### Final formation manager
During the final ten minutes of `groupformation`, a deterministic fallback runs
every 30 seconds. It prefers the largest compatible bot-led group, fills only its
currently missing roles, and may move a bot out of a smaller incomplete bot-led
group. Human-led and browser/LFG groups are never reorganized. Every transfer is
revalidated against faction, the inclusive five-level range, profession rules,
the leader's chosen destination, that destination's level/access restrictions,
area policy and native capacity. Level 85 is an isolated matching category: a
level-85 bot is only consolidated with other level-85 bots. This is a greedy
fallback intended to maximize complete groups without replacing normal social
formation; it does not claim a globally optimal partition.
The ordinary five-minute gathering/departure rule remains authoritative. A
complete group can therefore finish consolidation by minute 50 and gather from
minute 55. At the block boundary, groups still incomplete use the configured
browser behavior and do not begin an overland dungeon or raid journey. The
manager never changes stored day-plan slots or a group's leader target.
GM diagnostics and explicit test fallback are available as
`clientless groupmanager preview`, `clientless groupmanager run`, and
`clientless groupmanager status`. `run` uses the same access, role, faction and
transfer checks but deliberately ignores the ten-minute time gate; it does not
override human leadership or native admission rules.
## Shared travel and instances
Followers run their AdventureBehavior controller with the leader's effective
intent/location/deadline, keeping their personal daily schedule. After arrival,
non-instance followers use native checked local following instead of independently
performing unrelated micro-actions. Leaders continue their own activities.
Generic CPC travel actions accept `route_source=<native-group-leader-guid>`.
The executor copies the leader's route edges and final local destination, keeping
execution/transport state separate. Late arrivals plan a native approach to the
shared route's previous reached node and replay the remaining edges. A bounded
15-second wait handles follower actions processed before the leader plans. If no
matching macro snapshot exists (including a local-only leader leg), the ordinary
native catch-up planner runs; this is not a synthetic transfer or an absolute
formation guarantee. Individual permissions/path failures still use native
travel recovery. `TRAVEL_SHARED_ROUTE` provides evidence of actual copying.
Free-flight members with the same target consume the leader's published flight
segments. Each member mounts normally and rechecks its own collision corridor.
A shared trail survives leader arrival/new planning through shared ownership.
Waiting for additional published points holds flight position; an aborted or
blocked trail uses existing checked breadcrumb return. No position, speed or
flight-license cheat is introduced. `FLIGHT_SHARED_TRAIL` marks attachment.
`raid` selects only native raid-map entrances; `instance` excludes them. These
are verified from native map data through the existing entrance catalog rather
than name matching. Both use the existing remainder-of-block visit and final
five-minute outside rest, individual0–50% maximum-health loss, save/restart and
native portal return. Native group binding supplies the shared instance copy;
unrelated shared solo bindings remain rejected. Members do not use separate
synthetic private copies.
Only the group leader initiates personality/intent-driven PvP. Other bots assist
through the existing damage executor. All group members retain the absolute rule against tactical fleeing,
regardless of health or level.
## Operations and verification
Apply `sql/custom/world/2026_10_28_01_adventure_groups.sql`; it is idempotent and
preserves edited weights/current day plans. No character migration is needed.
`clientless adventure reload` reloads catalog data.
Diagnostics: `clientless interaction <guid> leave` performs a safe native
departure/cancels a pending invite for test cleanup. `clientless interaction <guid>` includes next intent, formation,
capacity, bot leadership and own plan location. `clientless adventure plan <guid>`
shows stored day slots. `clientless adventure prepare <guid> <next-intent>
<capital-location> [seconds]` stages a manual preparation, with a chosen normal
next destination, lasting30–3600 seconds and followed by a one-hour activity.
It uses normal navigation, invitations and execution, and can start incomplete.
Manual preparations are runtime test state, not restart-persisted day plans.
Automated fixtures execute production recruitment, provisional-leader invite
handling, full world-tick behavior clocks in bot groups, player admission and
leadership, inheritance, instance
lifecycle, map-type filtering, route adoption and flight-trail geometry. They
cover different original destinations, singleton admission, native inviter
leadership, caps/pending reservations, raid conversion, protected transition,
unchanged personal plans, preparation deadlines, shared edges/free flight,
collision and abort behavior. Full native live group trips,20-member raids,
real AFK duration and visual gameplay remain acceptance tests for the user.