feat: fire CHAT_MSG_* events to Lua addons for all chat types

Wire chat messages to the addon event system via AddonChatCallback.
Every chat message now fires the corresponding WoW event:

- CHAT_MSG_SAY, CHAT_MSG_YELL, CHAT_MSG_WHISPER
- CHAT_MSG_PARTY, CHAT_MSG_GUILD, CHAT_MSG_OFFICER
- CHAT_MSG_RAID, CHAT_MSG_RAID_WARNING, CHAT_MSG_BATTLEGROUND
- CHAT_MSG_SYSTEM, CHAT_MSG_CHANNEL, CHAT_MSG_EMOTE

Event handlers receive (eventName, message, senderName) arguments.
Addons can now filter, react to, or log chat messages in real-time.
This commit is contained in:
Kelsi 2026-03-20 11:29:53 -07:00
parent 510f03fa32
commit 0a0ddbfd9f
3 changed files with 31 additions and 0 deletions

View file

@ -335,6 +335,31 @@ bool Application::initialize() {
if (addonManager_->initialize(gameHandler.get())) {
std::string addonsDir = assetPath + "/interface/AddOns";
addonManager_->scanAddons(addonsDir);
// Wire chat messages to addon event dispatch
gameHandler->setAddonChatCallback([this](const game::MessageChatData& msg) {
if (!addonManager_ || !addonsLoaded_) return;
// Map ChatType to WoW event name
const char* eventName = nullptr;
switch (msg.type) {
case game::ChatType::SAY: eventName = "CHAT_MSG_SAY"; break;
case game::ChatType::YELL: eventName = "CHAT_MSG_YELL"; break;
case game::ChatType::WHISPER: eventName = "CHAT_MSG_WHISPER"; break;
case game::ChatType::PARTY: eventName = "CHAT_MSG_PARTY"; break;
case game::ChatType::GUILD: eventName = "CHAT_MSG_GUILD"; break;
case game::ChatType::OFFICER: eventName = "CHAT_MSG_OFFICER"; break;
case game::ChatType::RAID: eventName = "CHAT_MSG_RAID"; break;
case game::ChatType::RAID_WARNING: eventName = "CHAT_MSG_RAID_WARNING"; break;
case game::ChatType::BATTLEGROUND: eventName = "CHAT_MSG_BATTLEGROUND"; break;
case game::ChatType::SYSTEM: eventName = "CHAT_MSG_SYSTEM"; break;
case game::ChatType::CHANNEL: eventName = "CHAT_MSG_CHANNEL"; break;
case game::ChatType::EMOTE:
case game::ChatType::TEXT_EMOTE: eventName = "CHAT_MSG_EMOTE"; break;
default: break;
}
if (eventName) {
addonManager_->fireEvent(eventName, {msg.message, msg.senderName});
}
});
LOG_INFO("Addon system initialized, found ", addonManager_->getAddons().size(), " addon(s)");
} else {
LOG_WARNING("Failed to initialize addon system");