mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-23 15:50:20 +00:00
feat: add loot method change notifications and CRITERIA_UPDATE event
Show "Loot method changed to Master Looter/Round Robin/etc." in chat when group loot method changes via SMSG_GROUP_LIST. Fire CRITERIA_UPDATE addon event with criteria ID and progress when achievement criteria progress changes, enabling achievement tracking addons.
This commit is contained in:
parent
c44e1bde0a
commit
ee59c37b83
1 changed files with 15 additions and 0 deletions
|
|
@ -4993,8 +4993,14 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
|||
uint64_t progress = packet.readUInt64();
|
||||
packet.readUInt32(); // elapsedTime
|
||||
packet.readUInt32(); // creationTime
|
||||
uint64_t oldProgress = 0;
|
||||
auto cpit = criteriaProgress_.find(criteriaId);
|
||||
if (cpit != criteriaProgress_.end()) oldProgress = cpit->second;
|
||||
criteriaProgress_[criteriaId] = progress;
|
||||
LOG_DEBUG("SMSG_CRITERIA_UPDATE: id=", criteriaId, " progress=", progress);
|
||||
// Fire addon event for achievement tracking addons
|
||||
if (addonEventCallback_ && progress != oldProgress)
|
||||
addonEventCallback_("CRITERIA_UPDATE", {std::to_string(criteriaId), std::to_string(progress)});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -19780,6 +19786,7 @@ void GameHandler::handleGroupList(network::Packet& packet) {
|
|||
const bool hasRoles = isActiveExpansion("wotlk");
|
||||
// Snapshot state before reset so we can detect transitions.
|
||||
const uint32_t prevCount = partyData.memberCount;
|
||||
const uint8_t prevLootMethod = partyData.lootMethod;
|
||||
const bool wasInGroup = !partyData.isEmpty();
|
||||
// Reset before parsing — SMSG_GROUP_LIST is a full replacement, not a delta.
|
||||
// Without this, repeated GROUP_LIST packets push duplicate members.
|
||||
|
|
@ -19796,6 +19803,14 @@ void GameHandler::handleGroupList(network::Packet& packet) {
|
|||
} else if (nowInGroup && partyData.memberCount != prevCount) {
|
||||
LOG_INFO("Group updated: ", partyData.memberCount, " members");
|
||||
}
|
||||
// Loot method change notification
|
||||
if (wasInGroup && nowInGroup && partyData.lootMethod != prevLootMethod) {
|
||||
static const char* kLootMethods[] = {
|
||||
"Free for All", "Round Robin", "Master Looter", "Group Loot", "Need Before Greed"
|
||||
};
|
||||
const char* methodName = (partyData.lootMethod < 5) ? kLootMethods[partyData.lootMethod] : "Unknown";
|
||||
addSystemChatMessage(std::string("Loot method changed to ") + methodName + ".");
|
||||
}
|
||||
// Fire GROUP_ROSTER_UPDATE / PARTY_MEMBERS_CHANGED for Lua addons
|
||||
if (addonEventCallback_) {
|
||||
addonEventCallback_("GROUP_ROSTER_UPDATE", {});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue