feat(ui): port retail selected-item mana

Parse and route the complete 0x0264 guid/fraction/valid response, send exact 0x0263 item-mana queries, and reproduce retail meter visibility plus guid-zero cancellation for mana and health selection changes. Keep the behavior in Core state and the retained selected-object controller with wire/state/UI conformance coverage.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-11 11:16:21 +02:00
parent df460f94c3
commit fa1da02783
21 changed files with 402 additions and 38 deletions

View file

@ -519,13 +519,13 @@ their live action gate remains pending. The inventory-button gate remains pendin
Use, and Examine actions; dispatch panel buttons through the window registry,
ghosting unavailable panels rather than constructing placeholders.
- [ ] Make open/closed states event-driven from `RetailWindowManager`.
- [ ] Complete selected-object item mana and port `RecvNotice_UpdateItemMana`.
- [x] Complete selected-object item mana and port `RecvNotice_UpdateItemMana`.
- [x] Complete formatted stack count, stack entry and split slider, the applicable
`RecvNotice_SplitStack` activation behavior, and `HandleSelectionChanged` stack
precedence. Vendor-specific initial quantity remains naturally dormant until a
vendor panel owns an active vendor id.
- [ ] Replace the PWD-only health gate with the exact attackable/player/pet policy.
- [ ] Add item-mana query/cancel state and health query cancellation.
- [x] Add item-mana query/cancel state and health query cancellation.
- [x] Add one shared split-quantity owner for the entry, slider, and selected-source
item-holder merge, container-split, and ground-split payloads.
@ -547,6 +547,16 @@ moves send `StackableSplitToContainer 0x0055`; partial drag-out drops send
because the authoritative destination stack receives a server-assigned guid. The
partial inventory and ground transfers were live-confirmed 2026-07-11.
**Wave 4.4b implementation (2026-07-11):** named retail pins the complete selected-item
mana exchange: `CM_Item::Event_QueryItemMana @ 0x006A8610` sends `0x0263 + guid`,
`DispatchUI_QueryItemManaResponse @ 0x006A84D0` reads guid/fraction/valid, and
`gmToolbarUI::RecvNotice_UpdateItemMana @ 0x004BD0C0` reveals the meter only for a
valid response. `ItemManaState` owns the parsed response; `SelectedObjectController`
queries only owned non-stack items, ignores stale-guid notices, cancels invalid/visible
queries with guid zero, and applies the same visible-meter cancellation to health.
Automated wire, state, and retained-controller conformance is green; live visual/action
confirmation remains pending.
**Wave 4.1 implementation (2026-07-11):** bare `1..9` now use slots 0..8,
Ctrl+`1..9` selects them, Alt+`5..9` uses slots 13..17, and `0` creates a
shortcut to the selected owned/eligible object in the first empty slot. A focused