186 lines
5.7 KiB
Markdown
186 lines
5.7 KiB
Markdown
# 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):
|
|
```cpp
|
|
// 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:**
|
|
|
|
```cpp
|
|
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:
|
|
|
|
1. **RoleCoordinator Access**: How to access RoleCoordinator from GroupCoordinator?
|
|
```cpp
|
|
// Need to check if GroupCoordinator has:
|
|
RoleCoordinator* GetRoleCoordinator();
|
|
```
|
|
|
|
2. **RaidOrchestrator Access**: How to access for raid groups?
|
|
```cpp
|
|
// Check if GroupCoordinator has:
|
|
RaidOrchestrator* GetRaidOrchestrator(); // For raids
|
|
```
|
|
|
|
3. **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)
|
|
- [x] 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
|
|
|
|
1. **Do the existing coordinators already handle everything we need?**
|
|
- Interrupts ✅ (TacticalCoordinator)
|
|
- Tank swaps ✅ (RoleCoordinator)
|
|
- Raid mechanics ✅ (RaidOrchestrator)
|
|
|
|
2. **Are they automatically active when a group forms?**
|
|
- GroupCoordinator is created via GameSystemsManager ✅
|
|
- Does it activate for dungeon groups automatically?
|
|
|
|
3. **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!
|