Add Tier 6 commands: party/raid management

- Uninvite/kick: /uninvite, /kick <player name> to remove player from party/raid
- Leave party: /leave, /leaveparty to leave current group
- Main tank: /maintank, /mt to set target as main tank (uses raid marker index 0)
- Main assist: /mainassist, /ma to set target as main assist (uses raid marker index 1)
- Clear markers: /clearmaintank, /clearmainassist to remove designations
- Raid info: /raidinfo to display raid lockouts and saved instances

Added opcodes:
- CMSG_REQUEST_RAID_INFO (0x2CD) for requesting raid lockout info
- SMSG_RAID_INSTANCE_INFO (0x2CC) for receiving raid info response

New packet builders:
- GroupUninvitePacket for removing players from group
- GroupDisbandPacket for leaving party (with logging)
- RaidTargetUpdatePacket for setting raid markers (main tank/assist)
- RequestRaidInfoPacket for querying raid lockouts

All commands include proper validation and user feedback.
This commit is contained in:
kelsi davis 2026-02-07 13:28:46 -08:00
parent 9f3bead117
commit ce6f66fcfa
6 changed files with 246 additions and 11 deletions

View file

@ -261,6 +261,15 @@ public:
std::string getLastWhisperSender() const { return lastWhisperSender_; }
void setLastWhisperSender(const std::string& name) { lastWhisperSender_ = name; }
// Party/Raid management
void uninvitePlayer(const std::string& playerName);
void leaveParty();
void setMainTank(uint64_t targetGuid);
void setMainAssist(uint64_t targetGuid);
void clearMainTank();
void clearMainAssist();
void requestRaidInfo();
// ---- Phase 1: Name queries ----
void queryPlayerName(uint64_t guid);
void queryCreatureInfo(uint32_t entry, uint64_t guid);

View file

@ -175,6 +175,8 @@ enum class Opcode : uint16_t {
SMSG_GROUP_LIST = 0x07D,
SMSG_PARTY_COMMAND_RESULT = 0x07E,
MSG_RAID_TARGET_UPDATE = 0x321,
CMSG_REQUEST_RAID_INFO = 0x2CD,
SMSG_RAID_INSTANCE_INFO = 0x2CC,
// ---- Phase 5: Loot ----
CMSG_AUTOSTORE_LOOT_ITEM = 0x108,

View file

@ -884,6 +884,39 @@ public:
static network::Packet build();
};
// ============================================================
// Party/Raid Management
// ============================================================
/** CMSG_GROUP_UNINVITE_GUID packet builder */
class GroupUninvitePacket {
public:
static network::Packet build(const std::string& playerName);
};
/** CMSG_GROUP_DISBAND packet builder */
class GroupDisbandPacket {
public:
static network::Packet build();
};
/** MSG_RAID_TARGET_UPDATE packet builder */
class RaidTargetUpdatePacket {
public:
/**
* Build raid target marker update packet
* @param targetIndex 0-7 for raid icons, 0 = MainTank, 1 = MainAssist
* @param targetGuid GUID to mark, or 0 to clear
*/
static network::Packet build(uint8_t targetIndex, uint64_t targetGuid);
};
/** CMSG_REQUEST_RAID_INFO packet builder */
class RequestRaidInfoPacket {
public:
static network::Packet build();
};
// ============================================================
// Random Roll
// ============================================================
@ -1315,12 +1348,6 @@ public:
static network::Packet build();
};
/** CMSG_GROUP_DISBAND (leave party) packet builder */
class GroupDisbandPacket {
public:
static network::Packet build();
};
/** SMSG_GROUP_LIST parser */
class GroupListParser {
public: