144 lines
8.9 KiB
Markdown
144 lines
8.9 KiB
Markdown
# 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.
|