feat(ui): port retail dialog factory lifecycle

Replace the single mutable confirmation service with retail's property-backed DialogFactory model: fresh DAT roots, context ids, queue groups, priority preemption, callback/close-notice ordering, and context cancellation. Route /die, server confirmation aborts, and guarded item use through focused semantic owners.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-13 16:30:05 +02:00
parent 43f7c7807c
commit 66bdae7a83
22 changed files with 1442 additions and 220 deletions

View file

@ -70,7 +70,8 @@ fill-components. `ClientCommandController` keeps the panel layer independent
of App/network services; `WorldSession` sends the exact game-action or control
message for server-backed families. Friends and squelch databases are parsed
into authoritative Core state, confirmation requests use the imported retail
dialog, and unknown `/` commands still publish `SendServerCommandCmd` in
dialog catalog through the ported context/queue/callback factory, and unknown
`/` commands still publish `SendServerCommandCmd` in
canonical `@` form so ACE administrator commands continue to work. Both chat
backends use the same router.
@ -83,9 +84,16 @@ showing the live `FPS` and `DEG` values with the authored font and two-decimal
format. `/framrate` remains unknown because retail registers no misspelled
alias.
The reusable-dialog follow-up ports `DialogFactory @ 0x004773C0..0x00478470`
and type-1 `ConfirmationDialog` rather than sharing one mutable widget. Every
display gets a fresh LayoutDesc `0x2100003C` root; `/die`, server confirmation
tuples (including `CharacterConfirmationDone` aborts), and PK/NPK/volatile-rare
item use now share its property-backed result and lifecycle.
**Research:**
`docs/research/2026-07-13-retail-client-command-routing-pseudocode.md`;
`docs/research/2026-07-13-retail-client-command-families-pseudocode.md`;
`docs/research/2026-07-13-retail-dialog-factory-pseudocode.md`;
`ClientCommunicationSystem::OnChatCommand @ 0x00581320`;
`ClientCommunicationSystem::DoLifestone @ 0x0056FC70`;
`CM_Character::Event_TeleToLifestone @ 0x006A1B90`.