Fix armor stat in character stats panel via UNIT_FIELD_RESISTANCES

The character stats panel was showing Armor: 0 because summing armor
from item query responses is fragile (depends on correct BuyCount/damage
block parsing). Instead, read the server-authoritative total armor
directly from UNIT_FIELD_RESISTANCES (physical resistance, index 0)
in the player entity update fields.

Added UNIT_FIELD_RESISTANCES to the UF enum and all four expansion
JSON files with correct wire indices:
  WotLK 3.3.5a: 99   (NPC_FLAGS=82 + emotestate + stat×5 + posstat×5 + negstat×5)
  TBC 2.4.3:   185   (NPC_FLAGS=168 + same relative layout)
  Classic 1.12: 154  (NPC_FLAGS=147 + emotestate + stat×5, no posstat/negstat)
  Turtle WoW:  154   (same as Classic)

Stats panel uses server armor when > 0, falls back to summed item-query
armor otherwise. Armor rating resets to 0 on world entry and is updated
from both CREATE_OBJECT and VALUES update blocks.
This commit is contained in:
Kelsi 2026-02-19 17:45:09 -08:00
parent 05e2b37894
commit 20cdff0790
10 changed files with 33 additions and 5 deletions

View file

@ -35,6 +35,7 @@ static const UFNameEntry kUFNames[] = {
{"UNIT_FIELD_AURAS", UF::UNIT_FIELD_AURAS},
{"UNIT_NPC_FLAGS", UF::UNIT_NPC_FLAGS},
{"UNIT_DYNAMIC_FLAGS", UF::UNIT_DYNAMIC_FLAGS},
{"UNIT_FIELD_RESISTANCES", UF::UNIT_FIELD_RESISTANCES},
{"UNIT_END", UF::UNIT_END},
{"PLAYER_FLAGS", UF::PLAYER_FLAGS},
{"PLAYER_BYTES", UF::PLAYER_BYTES},
@ -76,6 +77,7 @@ void UpdateFieldTable::loadWotlkDefaults() {
{UF::UNIT_FIELD_MOUNTDISPLAYID, 69},
{UF::UNIT_NPC_FLAGS, 82},
{UF::UNIT_DYNAMIC_FLAGS, 147},
{UF::UNIT_FIELD_RESISTANCES, 99},
{UF::UNIT_END, 148},
{UF::PLAYER_FLAGS, 150},
{UF::PLAYER_BYTES, 151},