mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-04 16:23:52 +00:00
feat: track and display elemental resistances in character stats panel
This commit is contained in:
parent
0a2cd213dc
commit
60794c6e0f
4 changed files with 43 additions and 3 deletions
|
|
@ -6703,6 +6703,7 @@ void GameHandler::selectCharacter(uint64_t characterGuid) {
|
|||
onlineEquipDirty_ = false;
|
||||
playerMoneyCopper_ = 0;
|
||||
playerArmorRating_ = 0;
|
||||
std::fill(std::begin(playerResistances_), std::end(playerResistances_), 0);
|
||||
std::fill(std::begin(playerStats_), std::end(playerStats_), -1);
|
||||
knownSpells.clear();
|
||||
spellCooldowns.clear();
|
||||
|
|
@ -8807,6 +8808,9 @@ void GameHandler::handleUpdateObject(network::Packet& packet) {
|
|||
playerArmorRating_ = static_cast<int32_t>(val);
|
||||
LOG_DEBUG("Armor rating from update fields: ", playerArmorRating_);
|
||||
}
|
||||
else if (ufArmor != 0xFFFF && key > ufArmor && key <= ufArmor + 6) {
|
||||
playerResistances_[key - ufArmor - 1] = static_cast<int32_t>(val);
|
||||
}
|
||||
else if (ufPBytes2 != 0xFFFF && key == ufPBytes2) {
|
||||
uint8_t bankBagSlots = static_cast<uint8_t>((val >> 16) & 0xFF);
|
||||
LOG_WARNING("PLAYER_BYTES_2 (CREATE): raw=0x", std::hex, val, std::dec,
|
||||
|
|
@ -9147,6 +9151,9 @@ void GameHandler::handleUpdateObject(network::Packet& packet) {
|
|||
else if (ufArmor != 0xFFFF && key == ufArmor) {
|
||||
playerArmorRating_ = static_cast<int32_t>(val);
|
||||
}
|
||||
else if (ufArmor != 0xFFFF && key > ufArmor && key <= ufArmor + 6) {
|
||||
playerResistances_[key - ufArmor - 1] = static_cast<int32_t>(val);
|
||||
}
|
||||
else if (ufPBytes2v != 0xFFFF && key == ufPBytes2v) {
|
||||
uint8_t bankBagSlots = static_cast<uint8_t>((val >> 16) & 0xFF);
|
||||
LOG_WARNING("PLAYER_BYTES_2 (VALUES): raw=0x", std::hex, val, std::dec,
|
||||
|
|
|
|||
|
|
@ -1159,7 +1159,9 @@ void InventoryScreen::renderCharacterScreen(game::GameHandler& gameHandler) {
|
|||
int32_t stats[5];
|
||||
for (int i = 0; i < 5; ++i) stats[i] = gameHandler.getPlayerStat(i);
|
||||
const int32_t* serverStats = (stats[0] >= 0) ? stats : nullptr;
|
||||
renderStatsPanel(inventory, gameHandler.getPlayerLevel(), gameHandler.getArmorRating(), serverStats);
|
||||
int32_t resists[6];
|
||||
for (int i = 0; i < 6; ++i) resists[i] = gameHandler.getResistance(i + 1);
|
||||
renderStatsPanel(inventory, gameHandler.getPlayerLevel(), gameHandler.getArmorRating(), serverStats, resists);
|
||||
|
||||
// Played time (shown if available, fetched on character screen open)
|
||||
uint32_t totalSec = gameHandler.getTotalTimePlayed();
|
||||
|
|
@ -1557,7 +1559,8 @@ void InventoryScreen::renderEquipmentPanel(game::Inventory& inventory) {
|
|||
// ============================================================
|
||||
|
||||
void InventoryScreen::renderStatsPanel(game::Inventory& inventory, uint32_t playerLevel,
|
||||
int32_t serverArmor, const int32_t* serverStats) {
|
||||
int32_t serverArmor, const int32_t* serverStats,
|
||||
const int32_t* serverResists) {
|
||||
// Sum equipment stats for item-query bonus display
|
||||
int32_t itemStr = 0, itemAgi = 0, itemSta = 0, itemInt = 0, itemSpi = 0;
|
||||
// Secondary stat sums from extraStats
|
||||
|
|
@ -1665,6 +1668,28 @@ void InventoryScreen::renderStatsPanel(game::Inventory& inventory, uint32_t play
|
|||
renderSecondary("Mana per 5 sec", itemMp5);
|
||||
renderSecondary("Health per 5 sec",itemHp5);
|
||||
}
|
||||
|
||||
// Elemental resistances from server update fields
|
||||
if (serverResists) {
|
||||
static const char* kResistNames[6] = {
|
||||
"Holy Resistance", "Fire Resistance", "Nature Resistance",
|
||||
"Frost Resistance", "Shadow Resistance", "Arcane Resistance"
|
||||
};
|
||||
bool hasResist = false;
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
if (serverResists[i] > 0) { hasResist = true; break; }
|
||||
}
|
||||
if (hasResist) {
|
||||
ImGui::Spacing();
|
||||
ImGui::Separator();
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
if (serverResists[i] > 0) {
|
||||
ImGui::TextColored(ImVec4(0.7f, 0.85f, 1.0f, 1.0f),
|
||||
"%s: %d", kResistNames[i], serverResists[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InventoryScreen::renderBackpackPanel(game::Inventory& inventory, bool collapseEmptySections) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue