From 70a5d3240c7eae1901d5fbb366df5da4e14789ab Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sat, 21 Mar 2026 04:28:15 -0700 Subject: [PATCH] feat: add ACHIEVEMENT_EARNED event and 15 missing CHAT_MSG_* events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fire ACHIEVEMENT_EARNED event when a player earns an achievement, enabling achievement tracking addons. Add 15 previously unmapped chat type → addon event mappings: - CHAT_MSG_ACHIEVEMENT, CHAT_MSG_GUILD_ACHIEVEMENT - CHAT_MSG_WHISPER_INFORM (echo of sent whispers) - CHAT_MSG_RAID_LEADER, CHAT_MSG_BATTLEGROUND_LEADER - CHAT_MSG_MONSTER_SAY/YELL/EMOTE/WHISPER - CHAT_MSG_RAID_BOSS_EMOTE/WHISPER - CHAT_MSG_BG_SYSTEM_NEUTRAL/ALLIANCE/HORDE These events are needed by boss mod addons (DBM, BigWigs) to detect boss emotes, by achievement trackers, and by chat filter addons that process all message types. --- src/core/application.cpp | 14 ++++++++++++++ src/game/game_handler.cpp | 2 ++ 2 files changed, 16 insertions(+) diff --git a/src/core/application.cpp b/src/core/application.cpp index 2a8579ad..becb007c 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -354,6 +354,20 @@ bool Application::initialize() { case game::ChatType::CHANNEL: eventName = "CHAT_MSG_CHANNEL"; break; case game::ChatType::EMOTE: case game::ChatType::TEXT_EMOTE: eventName = "CHAT_MSG_EMOTE"; break; + case game::ChatType::ACHIEVEMENT: eventName = "CHAT_MSG_ACHIEVEMENT"; break; + case game::ChatType::GUILD_ACHIEVEMENT: eventName = "CHAT_MSG_GUILD_ACHIEVEMENT"; break; + case game::ChatType::WHISPER_INFORM: eventName = "CHAT_MSG_WHISPER_INFORM"; break; + case game::ChatType::RAID_LEADER: eventName = "CHAT_MSG_RAID_LEADER"; break; + case game::ChatType::BATTLEGROUND_LEADER: eventName = "CHAT_MSG_BATTLEGROUND_LEADER"; break; + case game::ChatType::MONSTER_SAY: eventName = "CHAT_MSG_MONSTER_SAY"; break; + case game::ChatType::MONSTER_YELL: eventName = "CHAT_MSG_MONSTER_YELL"; break; + case game::ChatType::MONSTER_EMOTE: eventName = "CHAT_MSG_MONSTER_EMOTE"; break; + case game::ChatType::MONSTER_WHISPER: eventName = "CHAT_MSG_MONSTER_WHISPER"; break; + case game::ChatType::RAID_BOSS_EMOTE: eventName = "CHAT_MSG_RAID_BOSS_EMOTE"; break; + case game::ChatType::RAID_BOSS_WHISPER: eventName = "CHAT_MSG_RAID_BOSS_WHISPER"; break; + case game::ChatType::BG_SYSTEM_NEUTRAL: eventName = "CHAT_MSG_BG_SYSTEM_NEUTRAL"; break; + case game::ChatType::BG_SYSTEM_ALLIANCE: eventName = "CHAT_MSG_BG_SYSTEM_ALLIANCE"; break; + case game::ChatType::BG_SYSTEM_HORDE: eventName = "CHAT_MSG_BG_SYSTEM_HORDE"; break; default: break; } if (eventName) { diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 03365c10..7359f330 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -26312,6 +26312,8 @@ void GameHandler::handleAchievementEarned(network::Packet& packet) { LOG_INFO("SMSG_ACHIEVEMENT_EARNED: guid=0x", std::hex, guid, std::dec, " achievementId=", achievementId, " self=", isSelf, achName.empty() ? "" : " name=", achName); + if (addonEventCallback_) + addonEventCallback_("ACHIEVEMENT_EARNED", {std::to_string(achievementId)}); } // ---------------------------------------------------------------------------