fix(ui): port exact selected health policy

Replace the toolbar's PWD-bit approximation with retail ObjectIsAttackable composed with the exact player and pet short-circuits. Carry second-header PetOwner through CreateObject, session, and ClientObject state so self, pet, and Free-PK cases match retail while friendly NPCs and attackable non-creatures remain name-only.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-11 11:42:04 +02:00
parent 52a80dc531
commit 2644d1d527
18 changed files with 416 additions and 50 deletions

View file

@ -524,7 +524,7 @@ their live action gate remains pending. The inventory-button gate remains pendin
`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.
- [x] Replace the PWD-only health gate with the exact attackable/player/pet policy.
- [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.
@ -559,6 +559,15 @@ Automated wire, state, and retained-controller conformance is green. The live ga
transferred its mana into armor, and the selected armor's authored mana bar updated from
the authoritative `0x0264` response.
**Wave 4.4c implementation (2026-07-11):** the former PWD-only approximation is
replaced by a pure Core port of `ClientCombatSystem::ObjectIsAttackable @ 0x0056A600`
composed exactly with toolbar `IsPlayer || pet_owner`. CreateObject now continues through
the complete second header and preserves `PetOwner` after MaterialType/Cooldown fields,
matching `PublicWeenieDesc::UnPack @ 0x005AD7AC..0x005AD7F8` and ACE serialization.
The policy restores self, pet, and Free-PK creature cases while retaining name-only
friendly NPCs and rejecting attackable non-creatures. AP-46 is retired; automated
parser/model/policy conformance is green and the live gate 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