acdream/src/AcDream.Runtime/Chat/ChatChannelKind.cs

59 lines
2.2 KiB
C#

namespace AcDream.Runtime.Chat;
/// <summary>
/// Outbound chat channel selector. Mirrors holtburger's <c>ChatChannelKind</c>
/// (<c>references/holtburger/crates/holtburger-core/src/client/types.rs</c>
/// lines 35-49) plus a synthetic <see cref="Say"/> + <see cref="Tell"/> for
/// the two non-channel cases — local speech and whispers — so a single
/// <see cref="SendChatCmd"/> can carry every outbound flavour the chat
/// panel emits.
///
/// <para>
/// Channels split into:
/// <list type="bullet">
/// <item><b>Legacy</b> (Fellowship, Vassals, Patron, Monarch, CoVassals,
/// AllegianceBroadcast): map to a fixed <c>ChatChannel</c> bitflag id
/// via <see cref="ChannelResolver"/> and ride 0x0147 ChatChannel.</item>
/// <item><b>Turbine</b> (Allegiance, General, Trade, Lfg, Roleplay, Society,
/// Olthoi): resolve to a server-assigned Turbine room id at runtime via
/// <c>TurbineChatMembershipGate</c> and ride 0xF7DE TurbineChat.
/// Campaign CH slice CH3 (2026-08-09) moved <see cref="Allegiance"/>
/// here unconditionally — retail's <c>@a</c> binds to
/// <c>DoTurbineChat_Allegiance</c>, never the legacy bitflag; see
/// <see cref="AllegianceBroadcast"/> for the legacy sibling
/// (retail's <c>@ab</c>).</item>
/// <item><b>Say</b> / <b>Tell</b>: route to the dedicated 0x0015 / 0x005D
/// opcodes — no channel id needed.</item>
/// </list>
/// </para>
/// </summary>
public enum ChatChannelKind
{
Say,
Tell,
Fellowship,
Allegiance,
Vassals,
Patron,
Monarch,
CoVassals,
General,
Trade,
Lfg,
Roleplay,
Society,
Olthoi,
/// <summary>
/// Campaign CH slice CH3 (2026-08-09): the legacy
/// <c>ChatChannel.AllegianceBroadcast (0x02000000)</c> bound to retail's
/// <c>@ab</c> verb — a monarch/speaker-permission broadcast over the
/// legacy 0x0147 pipe. Distinct from <see cref="Allegiance"/>, which is
/// ALWAYS the Turbine room now: retail's <c>@a</c> binds unconditionally
/// to <c>DoTurbineChat_Allegiance</c> once Turbine chat starts (research
/// doc §4.3), so it never falls back to this bitflag.
/// </summary>
AllegianceBroadcast,
Unknown,
}