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