fix: skip all-zero equipment emit, broaden BG announcer filter

Equipment: the first emitOtherPlayerEquipment call fired before any item
queries returned, sending all-zero displayIds that stripped players naked.
Now skips the callback when resolved=0 (waiting for queries). Equipment
only applies once at least one item resolves, preventing the naked flash.

BG announcer: broadened filter to match ALL chat types (not just SYSTEM),
and added more patterns: "BGAnnouncer", "[H: N, A: N]" with spaces.

Also added diagnostic logging in setOnlinePlayerEquipment to trace
displayId counts reaching the renderer.
This commit is contained in:
Kelsi 2026-03-28 15:09:52 -07:00
parent 12f5aaf286
commit 615db79819
3 changed files with 24 additions and 5 deletions

View file

@ -197,14 +197,15 @@ void ChatHandler::handleMessageChat(network::Packet& packet) {
}
// Filter BG queue announcer spam (server-side module on ChromieCraft/AzerothCore).
// These are SYSTEM messages with BG queue status that flood the chat.
if (data.type == ChatType::SYSTEM) {
// Can arrive as SYSTEM, CHANNEL, or even SAY/YELL from special NPCs.
{
const auto& msg = data.message;
// Common patterns: "[BG Queue Announcer]", "Queue status for", "[H: N/N, A: N/N]"
if (msg.find("Queue status") != std::string::npos ||
msg.find("BG Queue") != std::string::npos ||
msg.find("Announcer]") != std::string::npos ||
(msg.find("[H:") != std::string::npos && msg.find("A:") != std::string::npos)) {
msg.find("BGAnnouncer") != std::string::npos ||
(msg.find("[H:") != std::string::npos && msg.find("A:") != std::string::npos) ||
(msg.find("[H: ") != std::string::npos && msg.find(", A: ") != std::string::npos)) {
return; // Suppress BG queue announcer spam
}
}