feat(chat): port retail client command families
Expand the typed client-command boundary across travel, character queries, local UI and layout controls, AFK and consent, emotes, friends, squelch and filters, and fill-components. Preserve retail packet layouts and queue ownership, import the confirmation dialog, and keep authoritative social state in Core. Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
parent
5a45a7ac7f
commit
9ea579bdd0
47 changed files with 6659 additions and 99 deletions
|
|
@ -48,7 +48,7 @@ Copy this block when adding a new issue:
|
|||
|
||||
## #213 — Retail client commands were sent to ACE as chat text
|
||||
|
||||
**Status:** IN-PROGRESS — implementation complete 2026-07-13, pending live gate
|
||||
**Status:** IN-PROGRESS — full named-retail command-family port complete 2026-07-13, pending live gate
|
||||
**Severity:** MEDIUM
|
||||
**Component:** retained UI / chat commands / net
|
||||
|
||||
|
|
@ -63,23 +63,29 @@ as Talk text.
|
|||
|
||||
**Resolution:** Added an immutable named-retail client-command catalog and
|
||||
three explicit routes: typed retail client action, ACE server command, and
|
||||
ordinary chat. `/lifestone`, `/lif`, and `/ls` now publish
|
||||
`ExecuteClientCommandCmd`; the App-layer `ClientCommandController` invokes
|
||||
`WorldSession.SendTeleportToLifestone`, which sends retail game action `0x0063`.
|
||||
Unknown `/` commands publish `SendServerCommandCmd` in canonical `@` form, so
|
||||
commands such as `/ci` continue to reach ACE. Both chat backends use the same
|
||||
router.
|
||||
ordinary chat. The catalog now owns recall/house/PK travel, age/birth,
|
||||
framerate/lock/version/location/corpse/die, clear and named/automatic UI
|
||||
layouts, AFK/consent, emotes, friends, squelch/filter/message types, and
|
||||
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
|
||||
canonical `@` form so ACE administrator commands continue to work. Both chat
|
||||
backends use the same router.
|
||||
|
||||
**Research:**
|
||||
`docs/research/2026-07-13-retail-client-command-routing-pseudocode.md`;
|
||||
`docs/research/2026-07-13-retail-client-command-families-pseudocode.md`;
|
||||
`ClientCommunicationSystem::OnChatCommand @ 0x00581320`;
|
||||
`ClientCommunicationSystem::DoLifestone @ 0x0056FC70`;
|
||||
`CM_Character::Event_TeleToLifestone @ 0x006A1B90`.
|
||||
|
||||
**Acceptance:** In the connected Release client, `/ls`, `/lif`, and
|
||||
`/lifestone` begin recall to the bound lifestone without appearing as speech or
|
||||
an ACE unknown-command error. `/ls now` shows local usage and sends nothing.
|
||||
An ACE command such as `/ci 629 1` still works.
|
||||
**Acceptance:** In the connected Release client, representative local and
|
||||
server-backed commands execute without appearing as speech: `/loc`,
|
||||
`/framerate`, `/saveui test`, `/loadui test`, `/age`, `/friends`, `/afk on`,
|
||||
and `/marketplace`. `/ls now` shows local usage and sends nothing. An ACE
|
||||
command such as `/ci 629 1` still works.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -5132,18 +5138,20 @@ rendering.
|
|||
|
||||
---
|
||||
|
||||
## #L.6 — UI layout save/load (saveui / loadui / lockui)
|
||||
## #L.6 — [DONE 2026-07-13] UI layout save/load (saveui / loadui / lockui)
|
||||
|
||||
**Status:** OPEN
|
||||
**Status:** DONE
|
||||
**Severity:** LOW
|
||||
**Filed:** 2026-04-26 (deferred from Phase K)
|
||||
**Component:** ui
|
||||
|
||||
**Description:** Retail had `@saveui <name>`, `@loadui <name>`,
|
||||
`@lockui` commands for persisting ImGui-style window layouts. ImGui
|
||||
has built-in `LoadIniSettingsFromMemory` /
|
||||
`SaveIniSettingsToMemory` — wire these to per-named-layout files,
|
||||
plus chat-command parsing for the `@` prefixes.
|
||||
**Resolution:** The retained production UI now implements `@saveui [name]`,
|
||||
`@loadui [name]`, `@saveautoui`, `@loadautoui`, and `@lockui`. Named profiles
|
||||
persist all mounted retail windows independently of character/resolution;
|
||||
automatic profiles continue to use the existing character-and-resolution
|
||||
layout store. Both `/` and `@` prefixes route through the shared typed retail
|
||||
command catalog. The JSON storage remains the documented IA-15 modern
|
||||
adaptation of retail's `UIElement_Position` serialization.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue