1943788122
The stat and player-field getters answered from a copy pushed at the frame's end. So a `UNIT_STATS`, `PLAYER_XP_UPDATE` or `PLAYER_MONEY` listener read the frame's last packet, not its own.
1.12.1's getters read the object inside the call: for example `UnitStat` at `0x518600`, `GetMoney` at `+0xf70` (`0x518160`), and dodge, block and parry at `+0xe5c`/`+0xe58`/`+0xe60`.
Twenty-five getters now read live through the lent call host, among them `UnitStat`, resistances, armor, damage, attack power, defense, the avoidance chances, money, XP and rest. The snapshot and the live read share one derivation. Worn weapons resolve through the per-packet views. With no player held, the getters answer 0 or nil, as the reference does.
Tests: live against snapshot for every getter across four tokens, gear and buffs included; each listener reading its own packet's value. Cost: `UnitStat('player')` takes 344 ns live, against 261 ns from the snapshot.
Part of #2217
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>