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:
parent
5090aa7217
commit
5a45a7ac7f
19 changed files with 604 additions and 78 deletions
|
|
@ -16,12 +16,10 @@ namespace AcDream.UI.Abstractions.Panels.Chat;
|
|||
/// <item><c>/say</c> with no message → <c>null</c></item>
|
||||
/// <item><c>/t</c> with no target / no message → <c>null</c></item>
|
||||
/// <item><c>/r</c> with no <c>lastTellSender</c> → <c>null</c></item>
|
||||
/// <item>unknown <c>/xyz</c> verb → rewritten to <c>@xyz</c> and passed
|
||||
/// through on the default channel. Retail treats / and @ as
|
||||
/// equivalent command prefixes; ACE's <c>GameActionTalk</c> only
|
||||
/// intercepts the <c>@</c> form on the wire. Deliberate divergence
|
||||
/// from holtburger's literal fall-through (which would SAY the
|
||||
/// command text out loud).</item>
|
||||
/// <item>unknown <c>/xyz</c> verb → rewritten to <c>@xyz</c> when this pure
|
||||
/// parser is called directly. The production <see
|
||||
/// cref="ChatCommandRouter"/> intercepts it first and publishes a typed
|
||||
/// <see cref="SendServerCommandCmd"/>.</item>
|
||||
/// <item>multi-word <c>/t</c> target: first whitespace token is target,
|
||||
/// rest is message (matches Rust <c>split_once</c> semantics)</item>
|
||||
/// </list>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue