feat(chat): route retail lifestone commands

Separate retail client actions, ACE server commands, and ordinary chat at the shared router. Port lifestone/lif/ls from the named retail registry through a typed App controller to game action 0x0063, keep unknown verbs on ACE Talk, and cover both UI backends plus exact outbound bytes.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-13 11:43:19 +02:00
parent 5090aa7217
commit 5a45a7ac7f
19 changed files with 604 additions and 78 deletions

View file

@ -46,6 +46,43 @@ 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
**Severity:** MEDIUM
**Component:** retained UI / chat commands / net
**Description:** Retail chat-bar commands such as `/ls` were treated as unknown
ACE commands. The client rewrote `/ls` to `@ls` and sent it through Talk, so ACE
reported an unknown command instead of recalling the character.
**Root cause:** The shared chat router had only two outcomes: local
presentation commands and `SendChatCmd`. It therefore conflated retail commands
that send typed game actions with ACE administrator commands that are consumed
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.
**Research:**
`docs/research/2026-07-13-retail-client-command-routing-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.
---
## #212 — Toolbar shortcut numbers turn gray in physical combat
**Status:** IN-PROGRESS — implementation complete 2026-07-13, pending user gate