5.7 KiB
5.7 KiB
UPDATED: Group-Level Operations - Connect Existing Coordinators
Status: REVISED - Use Existing Systems
✅ Discovery: Existing Coordination Infrastructure
The following systems are already fully implemented:
| System | Location | Capabilities |
|---|---|---|
| TacticalCoordinator | Advanced/TacticalCoordinator.h |
Interrupt rotation, focus targeting, CC assignment |
| RoleCoordinator | AI/Coordination/RoleCoordinator.h |
Tank swaps, taunt rotation, role assignments |
| RaidOrchestrator | AI/Coordination/RaidOrchestrator.h |
Raid formations, encounter phases, directives |
| GroupCoordinator | Advanced/GroupCoordinator.h |
Group-level coordination facade |
Access Pattern (already working):
// From any bot in the group:
if (BotAI* botAI = GetBotAI(anyGroupMember))
{
// Get group coordinator
Advanced::GroupCoordinator* groupCoord = botAI->GetGroupCoordinator();
// Get tactical coordinator (interrupts, focus)
TacticalCoordinator* tactical = botAI->GetTacticalCoordinator();
// Get role coordinator (tank swaps) via GroupCoordinator
// (need to verify accessor)
}
SIMPLIFIED Solution: Connect DungeonBehavior to Existing Systems
File: DungeonBehavior.cpp - Update TODO Methods
Replace 7 TODOs with simple coordinator access:
bool DungeonBehavior::EnterDungeon(Group* group, uint32 dungeonId)
{
// ... existing code ...
// Initialize instance coordination using EXISTING GroupCoordinator
if (group->GetInstanceScript())
{
// Get any bot from group to access coordinator
Player* anyBot = GetAnyBotFromGroup(group);
if (anyBot)
{
if (BotAI* botAI = GetBotAI(anyBot))
{
// GroupCoordinator already handles instance initialization
if (Advanced::GroupCoordinator* coord = botAI->GetGroupCoordinator())
{
// Coordinator is already active for the group
TC_LOG_INFO("playerbot.dungeon", "Group {} using existing GroupCoordinator for instance {}",
group->GetGUID().GetCounter(), dungeonId);
}
}
}
}
return true;
}
void DungeonBehavior::UpdateDungeonProgress(Group* group)
{
// Update via existing GroupCoordinator (it updates automatically via BotAI::UpdateAI)
// No explicit call needed - coordinators update themselves
}
void DungeonBehavior::PrepareForEncounter(Group* group, uint32 encounterId)
{
Player* anyBot = GetAnyBotFromGroup(group);
if (!anyBot)
return;
if (BotAI* botAI = GetBotAI(anyBot))
{
// Use TacticalCoordinator for combat preparation
if (TacticalCoordinator* tactical = botAI->GetTacticalCoordinator())
{
// Tactical coordinator handles encounter preparation
// Set focus targets, prepare interrupts, etc.
TC_LOG_INFO("playerbot.dungeon", "Preparing for encounter {} using TacticalCoordinator",
encounterId);
}
// For raids, use RaidOrchestrator
if (group->IsRaidGroup())
{
if (Advanced::GroupCoordinator* groupCoord = botAI->GetGroupCoordinator())
{
// Check if GroupCoordinator has RaidOrchestrator accessor
// Set encounter phase, formation, etc.
}
}
}
}
private:
// Helper to get any bot from group for coordinator access
Player* GetAnyBotFromGroup(Group* group)
{
if (!group)
return nullptr;
for (GroupReference* ref = group->GetFirstMember(); ref; ref = ref->next())
{
Player* member = ref->GetSource();
if (member && GetBotAI(member))
return member;
}
return nullptr;
}
Verification Needed
Before implementing, please verify:
-
RoleCoordinator Access: How to access RoleCoordinator from GroupCoordinator?
// Need to check if GroupCoordinator has: RoleCoordinator* GetRoleCoordinator(); -
RaidOrchestrator Access: How to access for raid groups?
// Check if GroupCoordinator has: RaidOrchestrator* GetRaidOrchestrator(); // For raids -
Automatic Updates: Confirm coordinators update automatically via BotAI::UpdateAI()
- If yes: No explicit Update() calls needed in DungeonBehavior
- If no: Need to call Update() methods
Implementation Plan - REVISED
Phase 1: Verify Coordinator Architecture ✅ (30 min)
- Found existing TacticalCoordinator, RoleCoordinator, RaidOrchestrator
- Verify accessor methods in GroupCoordinator
- Check automatic update mechanism
Phase 2: Connect DungeonBehavior (2 hours)
- Replace 7 TODO methods with coordinator access
- Add
GetAnyBotFromGroup()helper - Add proper logging
Phase 3: Loot Distribution (4 hours) - UNCHANGED
- Implement hybrid per-bot evaluation + aggregation
- Support all WoW loot methods
Phase 4: Testing (2 hours)
- Verify interrupt rotation works
- Verify tank swaps trigger correctly
- Verify loot distribution for all methods
- Test with human players
Total: ~8 hours (down from 18 hours!)
Questions for You
-
Do the existing coordinators already handle everything we need?
- Interrupts ✅ (TacticalCoordinator)
- Tank swaps ✅ (RoleCoordinator)
- Raid mechanics ✅ (RaidOrchestrator)
-
Are they automatically active when a group forms?
- GroupCoordinator is created via GameSystemsManager ✅
- Does it activate for dungeon groups automatically?
-
Should I just connect DungeonBehavior to these existing systems?
- Much simpler than creating new classes
- Reuses battle-tested code
Let me know and I'll implement the connections immediately!