feat: add item quality link colours to loot roll, loot notify, and loot all-passed messages

This commit is contained in:
Kelsi 2026-03-17 13:33:07 -07:00
parent 6260ac281e
commit 217edc81d9

View file

@ -2842,10 +2842,9 @@ void GameHandler::handlePacket(network::Packet& packet) {
/*uint32_t randProp =*/ packet.readUInt32(); /*uint32_t randProp =*/ packet.readUInt32();
} }
auto* info = getItemInfo(itemId); auto* info = getItemInfo(itemId);
char buf[256]; std::string allPassName = info && !info->name.empty() ? info->name : std::to_string(itemId);
std::snprintf(buf, sizeof(buf), "Everyone passed on [%s].", uint32_t allPassQuality = info ? info->quality : 1u;
info ? info->name.c_str() : std::to_string(itemId).c_str()); addSystemChatMessage("Everyone passed on " + buildItemLink(itemId, allPassQuality, allPassName) + ".");
addSystemChatMessage(buf);
pendingLootRollActive_ = false; pendingLootRollActive_ = false;
break; break;
} }
@ -2865,15 +2864,16 @@ void GameHandler::handlePacket(network::Packet& packet) {
if (!looterName.empty()) { if (!looterName.empty()) {
queryItemInfo(itemId, 0); queryItemInfo(itemId, 0);
std::string itemName = "item #" + std::to_string(itemId); std::string itemName = "item #" + std::to_string(itemId);
uint32_t notifyQuality = 1;
if (const ItemQueryResponseData* info = getItemInfo(itemId)) { if (const ItemQueryResponseData* info = getItemInfo(itemId)) {
if (!info->name.empty()) itemName = info->name; if (!info->name.empty()) itemName = info->name;
notifyQuality = info->quality;
} }
char buf[256]; std::string itemLink2 = buildItemLink(itemId, notifyQuality, itemName);
if (count > 1) std::string lootMsg = looterName + " loots " + itemLink2;
std::snprintf(buf, sizeof(buf), "%s loots %s x%u.", looterName.c_str(), itemName.c_str(), count); if (count > 1) lootMsg += " x" + std::to_string(count);
else lootMsg += ".";
std::snprintf(buf, sizeof(buf), "%s loots %s.", looterName.c_str(), itemName.c_str()); addSystemChatMessage(lootMsg);
addSystemChatMessage(buf);
} }
} }
break; break;
@ -24338,12 +24338,11 @@ void GameHandler::handleLootRoll(network::Packet& packet) {
} }
auto* info = getItemInfo(itemId); auto* info = getItemInfo(itemId);
std::string iName = info ? info->name : std::to_string(itemId); std::string iName = info && !info->name.empty() ? info->name : std::to_string(itemId);
uint32_t rollItemQuality = info ? info->quality : 1u;
std::string rollItemLink = buildItemLink(itemId, rollItemQuality, iName);
char buf[256]; addSystemChatMessage(rollerName + " rolls " + rollName + " (" + std::to_string(rollNum) + ") on " + rollItemLink);
std::snprintf(buf, sizeof(buf), "%s rolls %s (%d) on [%s]",
rollerName.c_str(), rollName, static_cast<int>(rollNum), iName.c_str());
addSystemChatMessage(buf);
LOG_DEBUG("SMSG_LOOT_ROLL: ", rollerName, " rolled ", rollName, LOG_DEBUG("SMSG_LOOT_ROLL: ", rollerName, " rolled ", rollName,
" (", rollNum, ") on item ", itemId); " (", rollNum, ") on item ", itemId);
@ -24384,12 +24383,11 @@ void GameHandler::handleLootRollWon(network::Packet& packet) {
} }
auto* info = getItemInfo(itemId); auto* info = getItemInfo(itemId);
std::string iName = info ? info->name : std::to_string(itemId); std::string iName = info && !info->name.empty() ? info->name : std::to_string(itemId);
uint32_t wonItemQuality = info ? info->quality : 1u;
std::string wonItemLink = buildItemLink(itemId, wonItemQuality, iName);
char buf[256]; addSystemChatMessage(winnerName + " wins " + wonItemLink + " (" + rollName + " " + std::to_string(rollNum) + ")!");
std::snprintf(buf, sizeof(buf), "%s wins [%s] (%s %d)!",
winnerName.c_str(), iName.c_str(), rollName, static_cast<int>(rollNum));
addSystemChatMessage(buf);
// Dismiss roll popup — roll contest is over regardless of who won // Dismiss roll popup — roll contest is over regardless of who won
pendingLootRollActive_ = false; pendingLootRollActive_ = false;