Files
ThordekkCore/GROUP_OPERATIONS_REVISED.md
T

186 lines
5.7 KiB
Markdown
Raw Normal View History

2026-01-20 21:33:16 -03:00
# 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!