mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-02 07:43:51 +00:00
fix: toLowerInPlace infinite recursion + remove redundant callback guards
Fix toLowerInPlace() which was accidentally self-recursive (would stack overflow on any Lua string lowering). Remove 30 redundant if(addonEventCallback_) wrappers around pure fireAddonEvent blocks. Extract color constants in performance_hud.cpp (24 inline literals).
This commit is contained in:
parent
b892dca0e5
commit
b66033c6d8
3 changed files with 32 additions and 86 deletions
|
|
@ -22,7 +22,7 @@ extern "C" {
|
||||||
namespace wowee::addons {
|
namespace wowee::addons {
|
||||||
|
|
||||||
static void toLowerInPlace(std::string& s) {
|
static void toLowerInPlace(std::string& s) {
|
||||||
toLowerInPlace(s);
|
for (char& c : s) c = static_cast<char>(std::tolower(static_cast<unsigned char>(c)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shared GetTime() epoch — all time-returning functions must use this same origin
|
// Shared GetTime() epoch — all time-returning functions must use this same origin
|
||||||
|
|
|
||||||
|
|
@ -942,11 +942,9 @@ void GameHandler::update(float deltaTime) {
|
||||||
bool combatNow = isInCombat();
|
bool combatNow = isInCombat();
|
||||||
if (combatNow != wasCombat_) {
|
if (combatNow != wasCombat_) {
|
||||||
wasCombat_ = combatNow;
|
wasCombat_ = combatNow;
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent(combatNow ? "PLAYER_REGEN_DISABLED" : "PLAYER_REGEN_ENABLED", {});
|
fireAddonEvent(combatNow ? "PLAYER_REGEN_DISABLED" : "PLAYER_REGEN_ENABLED", {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (auctionSearchDelayTimer_ > 0.0f) {
|
if (auctionSearchDelayTimer_ > 0.0f) {
|
||||||
auctionSearchDelayTimer_ -= deltaTime;
|
auctionSearchDelayTimer_ -= deltaTime;
|
||||||
|
|
@ -1720,10 +1718,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
pendingItemPushNotifs_.push_back({itemId, count});
|
pendingItemPushNotifs_.push_back({itemId, count});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("BAG_UPDATE", {});
|
fireAddonEvent("BAG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_INVENTORY_CHANGED", {"player"});
|
fireAddonEvent("UNIT_INVENTORY_CHANGED", {"player"});
|
||||||
}
|
|
||||||
LOG_INFO("Item push: itemId=", itemId, " count=", count, " showInChat=", static_cast<int>(showInChat));
|
LOG_INFO("Item push: itemId=", itemId, " count=", count, " showInChat=", static_cast<int>(showInChat));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -1949,10 +1945,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
: ("Spell cast failed (error " + std::to_string(castResult) + ")");
|
: ("Spell cast failed (error " + std::to_string(castResult) + ")");
|
||||||
addUIError(errMsg);
|
addUIError(errMsg);
|
||||||
if (spellCastFailedCallback_) spellCastFailedCallback_(castResultSpellId);
|
if (spellCastFailedCallback_) spellCastFailedCallback_(castResultSpellId);
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("UNIT_SPELLCAST_FAILED", {"player", std::to_string(castResultSpellId)});
|
fireAddonEvent("UNIT_SPELLCAST_FAILED", {"player", std::to_string(castResultSpellId)});
|
||||||
fireAddonEvent("UNIT_SPELLCAST_STOP", {"player", std::to_string(castResultSpellId)});
|
fireAddonEvent("UNIT_SPELLCAST_STOP", {"player", std::to_string(castResultSpellId)});
|
||||||
}
|
|
||||||
MessageChatData msg;
|
MessageChatData msg;
|
||||||
msg.type = ChatType::SYSTEM;
|
msg.type = ChatType::SYSTEM;
|
||||||
msg.language = ChatLanguage::UNIVERSAL;
|
msg.language = ChatLanguage::UNIVERSAL;
|
||||||
|
|
@ -2692,10 +2686,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
partyData.leaderGuid = 0;
|
partyData.leaderGuid = 0;
|
||||||
addUIError("Your party has been disbanded.");
|
addUIError("Your party has been disbanded.");
|
||||||
addSystemChatMessage("Your party has been disbanded.");
|
addSystemChatMessage("Your party has been disbanded.");
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
||||||
fireAddonEvent("PARTY_MEMBERS_CHANGED", {});
|
fireAddonEvent("PARTY_MEMBERS_CHANGED", {});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
dispatchTable_[Opcode::SMSG_GROUP_CANCEL] = [this](network::Packet& /*packet*/) {
|
dispatchTable_[Opcode::SMSG_GROUP_CANCEL] = [this](network::Packet& /*packet*/) {
|
||||||
addSystemChatMessage("Group invite cancelled.");
|
addSystemChatMessage("Group invite cancelled.");
|
||||||
|
|
@ -2932,10 +2924,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
if (auto* renderer = core::Application::getInstance().getRenderer()) {
|
||||||
if (auto* sfx = renderer->getUiSoundManager()) sfx->playQuestActivate();
|
if (auto* sfx = renderer->getUiSoundManager()) sfx->playQuestActivate();
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("TRAINER_UPDATE", {});
|
fireAddonEvent("TRAINER_UPDATE", {});
|
||||||
fireAddonEvent("SPELLS_CHANGED", {});
|
fireAddonEvent("SPELLS_CHANGED", {});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
dispatchTable_[Opcode::SMSG_TRAINER_BUY_FAILED] = [this](network::Packet& packet) {
|
dispatchTable_[Opcode::SMSG_TRAINER_BUY_FAILED] = [this](network::Packet& packet) {
|
||||||
/*uint64_t trainerGuid =*/ packet.readUInt64();
|
/*uint64_t trainerGuid =*/ packet.readUInt64();
|
||||||
|
|
@ -3050,12 +3040,10 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
addSystemChatMessage(buf);
|
addSystemChatMessage(buf);
|
||||||
watchedFactionId_ = factionId;
|
watchedFactionId_ = factionId;
|
||||||
if (repChangeCallback_) repChangeCallback_(name, delta, standing);
|
if (repChangeCallback_) repChangeCallback_(name, delta, standing);
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("UPDATE_FACTION", {});
|
fireAddonEvent("UPDATE_FACTION", {});
|
||||||
fireAddonEvent("CHAT_MSG_COMBAT_FACTION_CHANGE", {std::string(buf)});
|
fireAddonEvent("CHAT_MSG_COMBAT_FACTION_CHANGE", {std::string(buf)});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
dispatchTable_[Opcode::SMSG_SET_FACTION_ATWAR] = [this](network::Packet& packet) {
|
dispatchTable_[Opcode::SMSG_SET_FACTION_ATWAR] = [this](network::Packet& packet) {
|
||||||
if (packet.getSize() - packet.getReadPos() < 5) { packet.setReadPos(packet.getSize()); return; }
|
if (packet.getSize() - packet.getReadPos() < 5) { packet.setReadPos(packet.getSize()); return; }
|
||||||
|
|
@ -3566,10 +3554,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
}
|
}
|
||||||
if (!leaderName.empty())
|
if (!leaderName.empty())
|
||||||
addSystemChatMessage(leaderName + " is now the group leader.");
|
addSystemChatMessage(leaderName + " is now the group leader.");
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("PARTY_LEADER_CHANGED", {});
|
fireAddonEvent("PARTY_LEADER_CHANGED", {});
|
||||||
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Gameobject / page text
|
// Gameobject / page text
|
||||||
|
|
@ -4174,10 +4160,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
uint32_t newZoneId = packet.readUInt32();
|
uint32_t newZoneId = packet.readUInt32();
|
||||||
if (newZoneId != worldStateZoneId_ && newZoneId != 0) {
|
if (newZoneId != worldStateZoneId_ && newZoneId != 0) {
|
||||||
worldStateZoneId_ = newZoneId;
|
worldStateZoneId_ = newZoneId;
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("ZONE_CHANGED_NEW_AREA", {});
|
fireAddonEvent("ZONE_CHANGED_NEW_AREA", {});
|
||||||
fireAddonEvent("ZONE_CHANGED", {});
|
fireAddonEvent("ZONE_CHANGED", {});
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
worldStateZoneId_ = newZoneId;
|
worldStateZoneId_ = newZoneId;
|
||||||
}
|
}
|
||||||
|
|
@ -4362,10 +4346,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
if (auto* sfx = renderer->getUiSoundManager())
|
if (auto* sfx = renderer->getUiSoundManager())
|
||||||
sfx->playDropOnGround();
|
sfx->playDropOnGround();
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("BAG_UPDATE", {});
|
fireAddonEvent("BAG_UPDATE", {});
|
||||||
fireAddonEvent("PLAYER_MONEY", {});
|
fireAddonEvent("PLAYER_MONEY", {});
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
bool removedPending = false;
|
bool removedPending = false;
|
||||||
auto it = pendingSellToBuyback_.find(itemGuid);
|
auto it = pendingSellToBuyback_.find(itemGuid);
|
||||||
|
|
@ -4605,11 +4587,9 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
}
|
}
|
||||||
pendingBuyItemId_ = 0;
|
pendingBuyItemId_ = 0;
|
||||||
pendingBuyItemSlot_ = 0;
|
pendingBuyItemSlot_ = 0;
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("MERCHANT_UPDATE", {});
|
fireAddonEvent("MERCHANT_UPDATE", {});
|
||||||
fireAddonEvent("BAG_UPDATE", {});
|
fireAddonEvent("BAG_UPDATE", {});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---- MSG_RAID_TARGET_UPDATE ----
|
// ---- MSG_RAID_TARGET_UPDATE ----
|
||||||
|
|
@ -5068,10 +5048,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
||||||
}
|
|
||||||
// Re-query all nearby quest giver NPCs so markers refresh
|
// Re-query all nearby quest giver NPCs so markers refresh
|
||||||
if (socket) {
|
if (socket) {
|
||||||
for (const auto& [guid, entity] : entityManager.getEntities()) {
|
for (const auto& [guid, entity] : entityManager.getEntities()) {
|
||||||
|
|
@ -5140,11 +5118,9 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
if (questProgressCallback_) {
|
if (questProgressCallback_) {
|
||||||
questProgressCallback_(quest.title, creatureName, count, reqCount);
|
questProgressCallback_(quest.title, creatureName, count, reqCount);
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("QUEST_WATCH_UPDATE", {std::to_string(questId)});
|
fireAddonEvent("QUEST_WATCH_UPDATE", {std::to_string(questId)});
|
||||||
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
||||||
}
|
|
||||||
|
|
||||||
LOG_INFO("Updated kill count for quest ", questId, ": ",
|
LOG_INFO("Updated kill count for quest ", questId, ": ",
|
||||||
count, "/", reqCount);
|
count, "/", reqCount);
|
||||||
|
|
@ -5341,12 +5317,10 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
} else {
|
} else {
|
||||||
addSystemChatMessage("Quest removed (ID " + std::to_string(questId) + ").");
|
addSystemChatMessage("Quest removed (ID " + std::to_string(questId) + ").");
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
||||||
fireAddonEvent("QUEST_REMOVED", {std::to_string(questId)});
|
fireAddonEvent("QUEST_REMOVED", {std::to_string(questId)});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
dispatchTable_[Opcode::SMSG_QUEST_QUERY_RESPONSE] = [this](network::Packet& packet) {
|
dispatchTable_[Opcode::SMSG_QUEST_QUERY_RESPONSE] = [this](network::Packet& packet) {
|
||||||
if (packet.getSize() < 8) {
|
if (packet.getSize() < 8) {
|
||||||
|
|
@ -6817,10 +6791,8 @@ void GameHandler::registerOpcodeHandlers() {
|
||||||
LOG_DEBUG("SMSG_REAL_GROUP_UPDATE groupType=", static_cast<int>(newGroupType),
|
LOG_DEBUG("SMSG_REAL_GROUP_UPDATE groupType=", static_cast<int>(newGroupType),
|
||||||
" memberFlags=0x", std::hex, newMemberFlags, std::dec,
|
" memberFlags=0x", std::hex, newMemberFlags, std::dec,
|
||||||
" leaderGuid=", newLeaderGuid);
|
" leaderGuid=", newLeaderGuid);
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("PARTY_LEADER_CHANGED", {});
|
fireAddonEvent("PARTY_LEADER_CHANGED", {});
|
||||||
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
dispatchTable_[Opcode::SMSG_PLAY_MUSIC] = [this](network::Packet& packet) {
|
dispatchTable_[Opcode::SMSG_PLAY_MUSIC] = [this](network::Packet& packet) {
|
||||||
if (packet.getSize() - packet.getReadPos() >= 4) {
|
if (packet.getSize() - packet.getReadPos() >= 4) {
|
||||||
|
|
@ -11659,12 +11631,10 @@ void GameHandler::applyUpdateObjectBlock(const UpdateBlock& block, bool& newItem
|
||||||
if (newForm != shapeshiftFormId_) {
|
if (newForm != shapeshiftFormId_) {
|
||||||
shapeshiftFormId_ = newForm;
|
shapeshiftFormId_ = newForm;
|
||||||
LOG_INFO("Shapeshift form changed: ", static_cast<int>(newForm));
|
LOG_INFO("Shapeshift form changed: ", static_cast<int>(newForm));
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("UPDATE_SHAPESHIFT_FORM", {});
|
fireAddonEvent("UPDATE_SHAPESHIFT_FORM", {});
|
||||||
fireAddonEvent("UPDATE_SHAPESHIFT_FORMS", {});
|
fireAddonEvent("UPDATE_SHAPESHIFT_FORMS", {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (key == ufDynFlags) {
|
else if (key == ufDynFlags) {
|
||||||
uint32_t oldDyn = unit->getDynamicFlags();
|
uint32_t oldDyn = unit->getDynamicFlags();
|
||||||
unit->setDynamicFlags(val);
|
unit->setDynamicFlags(val);
|
||||||
|
|
@ -12191,12 +12161,10 @@ void GameHandler::applyUpdateObjectBlock(const UpdateBlock& block, bool& newItem
|
||||||
}
|
}
|
||||||
if (inventoryChanged) {
|
if (inventoryChanged) {
|
||||||
rebuildOnlineInventory();
|
rebuildOnlineInventory();
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("BAG_UPDATE", {});
|
fireAddonEvent("BAG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_INVENTORY_CHANGED", {"player"});
|
fireAddonEvent("UNIT_INVENTORY_CHANGED", {"player"});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (block.hasMovement && entity->getType() == ObjectType::GAMEOBJECT) {
|
if (block.hasMovement && entity->getType() == ObjectType::GAMEOBJECT) {
|
||||||
if (transportGuids_.count(block.guid) && transportMoveCallback_) {
|
if (transportGuids_.count(block.guid) && transportMoveCallback_) {
|
||||||
serverUpdatedTransportGuids_.insert(block.guid);
|
serverUpdatedTransportGuids_.insert(block.guid);
|
||||||
|
|
@ -18338,10 +18306,8 @@ done:
|
||||||
LOG_INFO("SMSG_PET_SPELLS: petGuid=0x", std::hex, petGuid_, std::dec,
|
LOG_INFO("SMSG_PET_SPELLS: petGuid=0x", std::hex, petGuid_, std::dec,
|
||||||
" react=", static_cast<int>(petReact_), " command=", static_cast<int>(petCommand_),
|
" react=", static_cast<int>(petReact_), " command=", static_cast<int>(petCommand_),
|
||||||
" spells=", petSpellList_.size());
|
" spells=", petSpellList_.size());
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("UNIT_PET", {"player"});
|
fireAddonEvent("UNIT_PET", {"player"});
|
||||||
fireAddonEvent("PET_BAR_UPDATE", {});
|
fireAddonEvent("PET_BAR_UPDATE", {});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameHandler::sendPetAction(uint32_t action, uint64_t targetGuid) {
|
void GameHandler::sendPetAction(uint32_t action, uint64_t targetGuid) {
|
||||||
|
|
@ -18466,10 +18432,8 @@ void GameHandler::setActionBarSlot(int slot, ActionBarSlot::Type type, uint32_t
|
||||||
}
|
}
|
||||||
saveCharacterConfig();
|
saveCharacterConfig();
|
||||||
// Notify Lua addons that the action bar changed
|
// Notify Lua addons that the action bar changed
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("ACTIONBAR_SLOT_CHANGED", {std::to_string(slot + 1)});
|
fireAddonEvent("ACTIONBAR_SLOT_CHANGED", {std::to_string(slot + 1)});
|
||||||
fireAddonEvent("ACTIONBAR_UPDATE_STATE", {});
|
fireAddonEvent("ACTIONBAR_UPDATE_STATE", {});
|
||||||
}
|
|
||||||
// Notify the server so the action bar persists across relogs.
|
// Notify the server so the action bar persists across relogs.
|
||||||
if (state == WorldState::IN_WORLD && socket) {
|
if (state == WorldState::IN_WORLD && socket) {
|
||||||
const bool classic = isClassicLikeExpansion();
|
const bool classic = isClassicLikeExpansion();
|
||||||
|
|
@ -18550,10 +18514,8 @@ void GameHandler::handleInitialSpells(network::Packet& packet) {
|
||||||
LOG_INFO("Learned ", knownSpells.size(), " spells");
|
LOG_INFO("Learned ", knownSpells.size(), " spells");
|
||||||
|
|
||||||
// Notify addons that the full spell list is now available
|
// Notify addons that the full spell list is now available
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("SPELLS_CHANGED", {});
|
fireAddonEvent("SPELLS_CHANGED", {});
|
||||||
fireAddonEvent("LEARNED_SPELL_IN_TAB", {});
|
fireAddonEvent("LEARNED_SPELL_IN_TAB", {});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameHandler::handleCastFailed(network::Packet& packet) {
|
void GameHandler::handleCastFailed(network::Packet& packet) {
|
||||||
|
|
@ -18602,10 +18564,8 @@ void GameHandler::handleCastFailed(network::Packet& packet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire UNIT_SPELLCAST_FAILED + UNIT_SPELLCAST_STOP so Lua addons can react
|
// Fire UNIT_SPELLCAST_FAILED + UNIT_SPELLCAST_STOP so Lua addons can react
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("UNIT_SPELLCAST_FAILED", {"player", std::to_string(data.spellId)});
|
fireAddonEvent("UNIT_SPELLCAST_FAILED", {"player", std::to_string(data.spellId)});
|
||||||
fireAddonEvent("UNIT_SPELLCAST_STOP", {"player", std::to_string(data.spellId)});
|
fireAddonEvent("UNIT_SPELLCAST_STOP", {"player", std::to_string(data.spellId)});
|
||||||
}
|
|
||||||
if (spellCastFailedCallback_) spellCastFailedCallback_(data.spellId);
|
if (spellCastFailedCallback_) spellCastFailedCallback_(data.spellId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -18902,10 +18862,8 @@ void GameHandler::handleSpellCooldown(network::Packet& packet) {
|
||||||
}
|
}
|
||||||
LOG_DEBUG("handleSpellCooldown: parsed for ",
|
LOG_DEBUG("handleSpellCooldown: parsed for ",
|
||||||
isClassicFormat ? "Classic" : "TBC/WotLK", " format");
|
isClassicFormat ? "Classic" : "TBC/WotLK", " format");
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("SPELL_UPDATE_COOLDOWN", {});
|
fireAddonEvent("SPELL_UPDATE_COOLDOWN", {});
|
||||||
fireAddonEvent("ACTIONBAR_UPDATE_COOLDOWN", {});
|
fireAddonEvent("ACTIONBAR_UPDATE_COOLDOWN", {});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameHandler::handleCooldownEvent(network::Packet& packet) {
|
void GameHandler::handleCooldownEvent(network::Packet& packet) {
|
||||||
|
|
@ -18921,10 +18879,8 @@ void GameHandler::handleCooldownEvent(network::Packet& packet) {
|
||||||
slot.cooldownRemaining = 0.0f;
|
slot.cooldownRemaining = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("SPELL_UPDATE_COOLDOWN", {});
|
fireAddonEvent("SPELL_UPDATE_COOLDOWN", {});
|
||||||
fireAddonEvent("ACTIONBAR_UPDATE_COOLDOWN", {});
|
fireAddonEvent("ACTIONBAR_UPDATE_COOLDOWN", {});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameHandler::handleAuraUpdate(network::Packet& packet, bool isAll) {
|
void GameHandler::handleAuraUpdate(network::Packet& packet, bool isAll) {
|
||||||
|
|
@ -19008,10 +18964,8 @@ void GameHandler::handleLearnedSpell(network::Packet& packet) {
|
||||||
LOG_INFO("Talent learned: id=", talentId, " rank=", static_cast<int>(newRank),
|
LOG_INFO("Talent learned: id=", talentId, " rank=", static_cast<int>(newRank),
|
||||||
" (spell ", spellId, ") in spec ", static_cast<int>(activeTalentSpec_));
|
" (spell ", spellId, ") in spec ", static_cast<int>(activeTalentSpec_));
|
||||||
isTalentSpell = true;
|
isTalentSpell = true;
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("CHARACTER_POINTS_CHANGED", {});
|
fireAddonEvent("CHARACTER_POINTS_CHANGED", {});
|
||||||
fireAddonEvent("PLAYER_TALENT_UPDATE", {});
|
fireAddonEvent("PLAYER_TALENT_UPDATE", {});
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -19204,11 +19158,9 @@ void GameHandler::handleTalentsInfo(network::Packet& packet) {
|
||||||
" learned=", learnedTalents_[activeTalentGroup].size());
|
" learned=", learnedTalents_[activeTalentGroup].size());
|
||||||
|
|
||||||
// Fire talent-related events for addons
|
// Fire talent-related events for addons
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("CHARACTER_POINTS_CHANGED", {});
|
fireAddonEvent("CHARACTER_POINTS_CHANGED", {});
|
||||||
fireAddonEvent("ACTIVE_TALENT_GROUP_CHANGED", {});
|
fireAddonEvent("ACTIVE_TALENT_GROUP_CHANGED", {});
|
||||||
fireAddonEvent("PLAYER_TALENT_UPDATE", {});
|
fireAddonEvent("PLAYER_TALENT_UPDATE", {});
|
||||||
}
|
|
||||||
|
|
||||||
if (!talentsInitialized_) {
|
if (!talentsInitialized_) {
|
||||||
talentsInitialized_ = true;
|
talentsInitialized_ = true;
|
||||||
|
|
@ -19339,10 +19291,8 @@ void GameHandler::leaveGroup() {
|
||||||
socket->send(packet);
|
socket->send(packet);
|
||||||
partyData = GroupListData{};
|
partyData = GroupListData{};
|
||||||
LOG_INFO("Left group");
|
LOG_INFO("Left group");
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
||||||
fireAddonEvent("PARTY_MEMBERS_CHANGED", {});
|
fireAddonEvent("PARTY_MEMBERS_CHANGED", {});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameHandler::handleGroupInvite(network::Packet& packet) {
|
void GameHandler::handleGroupInvite(network::Packet& packet) {
|
||||||
|
|
@ -19418,11 +19368,9 @@ void GameHandler::handleGroupUninvite(network::Packet& packet) {
|
||||||
partyData = GroupListData{};
|
partyData = GroupListData{};
|
||||||
LOG_INFO("Removed from group");
|
LOG_INFO("Removed from group");
|
||||||
|
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
fireAddonEvent("GROUP_ROSTER_UPDATE", {});
|
||||||
fireAddonEvent("PARTY_MEMBERS_CHANGED", {});
|
fireAddonEvent("PARTY_MEMBERS_CHANGED", {});
|
||||||
fireAddonEvent("RAID_ROSTER_UPDATE", {});
|
fireAddonEvent("RAID_ROSTER_UPDATE", {});
|
||||||
}
|
|
||||||
|
|
||||||
MessageChatData msg;
|
MessageChatData msg;
|
||||||
msg.type = ChatType::SYSTEM;
|
msg.type = ChatType::SYSTEM;
|
||||||
|
|
@ -20719,11 +20667,9 @@ void GameHandler::addQuestToLocalLogIfMissing(uint32_t questId, const std::strin
|
||||||
entry.title = title.empty() ? ("Quest #" + std::to_string(questId)) : title;
|
entry.title = title.empty() ? ("Quest #" + std::to_string(questId)) : title;
|
||||||
entry.objectives = objectives;
|
entry.objectives = objectives;
|
||||||
questLog_.push_back(std::move(entry));
|
questLog_.push_back(std::move(entry));
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("QUEST_ACCEPTED", {std::to_string(questId)});
|
fireAddonEvent("QUEST_ACCEPTED", {std::to_string(questId)});
|
||||||
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameHandler::resyncQuestLogFromServerSlots(bool forceQueryMetadata) {
|
bool GameHandler::resyncQuestLogFromServerSlots(bool forceQueryMetadata) {
|
||||||
|
|
@ -21021,12 +20967,10 @@ void GameHandler::abandonQuest(uint32_t questId) {
|
||||||
|
|
||||||
if (localIndex >= 0) {
|
if (localIndex >= 0) {
|
||||||
questLog_.erase(questLog_.begin() + static_cast<ptrdiff_t>(localIndex));
|
questLog_.erase(questLog_.begin() + static_cast<ptrdiff_t>(localIndex));
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
fireAddonEvent("QUEST_LOG_UPDATE", {});
|
||||||
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
fireAddonEvent("UNIT_QUEST_LOG_CHANGED", {"player"});
|
||||||
fireAddonEvent("QUEST_REMOVED", {std::to_string(questId)});
|
fireAddonEvent("QUEST_REMOVED", {std::to_string(questId)});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Remove any quest POI minimap markers for this quest.
|
// Remove any quest POI minimap markers for this quest.
|
||||||
gossipPois_.erase(
|
gossipPois_.erase(
|
||||||
|
|
@ -21704,10 +21648,8 @@ void GameHandler::handleLootResponse(network::Packet& packet) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lootWindowOpen = true;
|
lootWindowOpen = true;
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("LOOT_OPENED", {});
|
fireAddonEvent("LOOT_OPENED", {});
|
||||||
fireAddonEvent("LOOT_READY", {});
|
fireAddonEvent("LOOT_READY", {});
|
||||||
}
|
|
||||||
lastInteractedGoGuid_ = 0; // loot opened — no need to re-send in handleSpellGo
|
lastInteractedGoGuid_ = 0; // loot opened — no need to re-send in handleSpellGo
|
||||||
pendingGameObjectLootOpens_.erase(
|
pendingGameObjectLootOpens_.erase(
|
||||||
std::remove_if(pendingGameObjectLootOpens_.begin(), pendingGameObjectLootOpens_.end(),
|
std::remove_if(pendingGameObjectLootOpens_.begin(), pendingGameObjectLootOpens_.end(),
|
||||||
|
|
@ -22913,10 +22855,8 @@ void GameHandler::handleNewWorld(network::Packet& packet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire PLAYER_ENTERING_WORLD for teleports / zone transitions
|
// Fire PLAYER_ENTERING_WORLD for teleports / zone transitions
|
||||||
if (addonEventCallback_) {
|
|
||||||
fireAddonEvent("PLAYER_ENTERING_WORLD", {"0"});
|
fireAddonEvent("PLAYER_ENTERING_WORLD", {"0"});
|
||||||
fireAddonEvent("ZONE_CHANGED_NEW_AREA", {});
|
fireAddonEvent("ZONE_CHANGED_NEW_AREA", {});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,12 @@
|
||||||
namespace wowee {
|
namespace wowee {
|
||||||
namespace rendering {
|
namespace rendering {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
constexpr ImVec4 kHelpText = {0.6f, 0.6f, 0.6f, 1.0f};
|
||||||
|
constexpr ImVec4 kSectionHeader = {0.8f, 0.8f, 0.5f, 1.0f};
|
||||||
|
constexpr ImVec4 kTitle = {0.7f, 0.7f, 0.7f, 1.0f};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
PerformanceHUD::PerformanceHUD() {
|
PerformanceHUD::PerformanceHUD() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -456,39 +462,39 @@ void PerformanceHUD::render(const Renderer* renderer, const Camera* camera) {
|
||||||
|
|
||||||
// Controls help
|
// Controls help
|
||||||
if (showControls) {
|
if (showControls) {
|
||||||
ImGui::TextColored(ImVec4(0.7f, 0.7f, 0.7f, 1.0f), "CONTROLS");
|
ImGui::TextColored(kTitle, "CONTROLS");
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.5f, 1.0f), "Movement");
|
ImGui::TextColored(kSectionHeader, "Movement");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "WASD: Move/Strafe");
|
ImGui::TextColored(kHelpText, "WASD: Move/Strafe");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Q/E: Strafe left/right");
|
ImGui::TextColored(kHelpText, "Q/E: Strafe left/right");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Space: Jump");
|
ImGui::TextColored(kHelpText, "Space: Jump");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "X: Sit/Stand");
|
ImGui::TextColored(kHelpText, "X: Sit/Stand");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "~: Auto-run");
|
ImGui::TextColored(kHelpText, "~: Auto-run");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Z: Sheathe weapons");
|
ImGui::TextColored(kHelpText, "Z: Sheathe weapons");
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.5f, 1.0f), "UI Panels");
|
ImGui::TextColored(kSectionHeader, "UI Panels");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "B: Bags/Inventory");
|
ImGui::TextColored(kHelpText, "B: Bags/Inventory");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "C: Character sheet");
|
ImGui::TextColored(kHelpText, "C: Character sheet");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "L: Quest log");
|
ImGui::TextColored(kHelpText, "L: Quest log");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "N: Talents");
|
ImGui::TextColored(kHelpText, "N: Talents");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "P: Spellbook");
|
ImGui::TextColored(kHelpText, "P: Spellbook");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "M: World map");
|
ImGui::TextColored(kHelpText, "M: World map");
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.5f, 1.0f), "Combat & Chat");
|
ImGui::TextColored(kSectionHeader, "Combat & Chat");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "1-0,-,=: Action bar");
|
ImGui::TextColored(kHelpText, "1-0,-,=: Action bar");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Tab: Target cycle");
|
ImGui::TextColored(kHelpText, "Tab: Target cycle");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Enter: Chat");
|
ImGui::TextColored(kHelpText, "Enter: Chat");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "/: Chat command");
|
ImGui::TextColored(kHelpText, "/: Chat command");
|
||||||
|
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.5f, 1.0f), "Debug");
|
ImGui::TextColored(kSectionHeader, "Debug");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "F1: Toggle this HUD");
|
ImGui::TextColored(kHelpText, "F1: Toggle this HUD");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "F4: Toggle shadows");
|
ImGui::TextColored(kHelpText, "F4: Toggle shadows");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "F7: Level-up FX");
|
ImGui::TextColored(kHelpText, "F7: Level-up FX");
|
||||||
ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Esc: Settings/Close");
|
ImGui::TextColored(kHelpText, "Esc: Settings/Close");
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue