From 281a1e172f6a7824a0ac9f162c7ff4bc7cb9c281 Mon Sep 17 00:00:00 2001 From: JonKazama-Hellion Date: Sat, 2 May 2026 18:28:29 +0200 Subject: [PATCH] feat(tabs): add dedicated System tab to default layout Split the technical/notification streams (System, Error, Echo, Debug, NPC announcements, login/logout, retainer sales, gathering system, glamour notifications, sign messages, alarms, orchestrion, message book, random number, progress) out of the General tab into their own System tab. General now shows player conversation plus the active gameplay events (loot rolls, crafting, gathering, NPC dialogue, party finder pings) without burying chat under technical chatter. --- ChatTwo/Plugin.cs | 10 ++-- ChatTwo/Resources/HellionStrings.Designer.cs | 1 + ChatTwo/Resources/HellionStrings.de.resx | 3 + ChatTwo/Resources/HellionStrings.resx | 3 + ChatTwo/Util/TabsUtil.cs | 58 ++++++++++++-------- 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/ChatTwo/Plugin.cs b/ChatTwo/Plugin.cs index b5adad9..fc45fc1 100755 --- a/ChatTwo/Plugin.cs +++ b/ChatTwo/Plugin.cs @@ -153,13 +153,15 @@ public sealed class Plugin : IDalamudPlugin } // Hellion default tab layout for first-run and v10-wipe. - // General-catch-all + FC + Party + Linkshell + Tells matches the - // channel set the average raider uses; the Beginner tab only - // appears when the user has the Novice Network enabled in Audio - // & Notifications, otherwise it would just sit empty. + // General catches player chat plus active gameplay events; the + // System tab takes the technical noise so it does not bury real + // conversation. Beginner tab only appears when the Novice + // Network is enabled in Audio and Notifications, otherwise it + // would just sit empty. if (Config.Tabs.Count == 0) { Config.Tabs.Add(TabsUtil.VanillaGeneral); + Config.Tabs.Add(TabsUtil.HellionSystem); Config.Tabs.Add(TabsUtil.HellionFreeCompany); Config.Tabs.Add(TabsUtil.HellionParty); if (Config.ShowNoviceNetwork) diff --git a/ChatTwo/Resources/HellionStrings.Designer.cs b/ChatTwo/Resources/HellionStrings.Designer.cs index 538883a..c4dd719 100644 --- a/ChatTwo/Resources/HellionStrings.Designer.cs +++ b/ChatTwo/Resources/HellionStrings.Designer.cs @@ -233,6 +233,7 @@ internal class HellionStrings internal static string Settings_Information_Changelog_Heading => Get(nameof(Settings_Information_Changelog_Heading)); // Hellion Chat — Default tab presets (channel-themed) + internal static string Tabs_Presets_System => Get(nameof(Tabs_Presets_System)); internal static string Tabs_Presets_FreeCompany => Get(nameof(Tabs_Presets_FreeCompany)); internal static string Tabs_Presets_Party => Get(nameof(Tabs_Presets_Party)); internal static string Tabs_Presets_Beginner => Get(nameof(Tabs_Presets_Beginner)); diff --git a/ChatTwo/Resources/HellionStrings.de.resx b/ChatTwo/Resources/HellionStrings.de.resx index 2aa6ac9..1f9b7f4 100644 --- a/ChatTwo/Resources/HellionStrings.de.resx +++ b/ChatTwo/Resources/HellionStrings.de.resx @@ -528,6 +528,9 @@ + + System + Free Company diff --git a/ChatTwo/Resources/HellionStrings.resx b/ChatTwo/Resources/HellionStrings.resx index 8fa8abd..519f010 100644 --- a/ChatTwo/Resources/HellionStrings.resx +++ b/ChatTwo/Resources/HellionStrings.resx @@ -528,6 +528,9 @@ + + System + Free Company diff --git a/ChatTwo/Util/TabsUtil.cs b/ChatTwo/Util/TabsUtil.cs index 776d3f0..b143a5c 100755 --- a/ChatTwo/Util/TabsUtil.cs +++ b/ChatTwo/Util/TabsUtil.cs @@ -14,22 +14,17 @@ public static class TabsUtil return channels; } - // Hellion-tuned General preset. Differs from upstream Vanilla: - // Tells (own tab), emotes, novice network and the FC/PvP announcement - // streams move into their dedicated themed tabs so the General tab - // is the public-chat catch-all that the maintainer actually runs in - // production. NpcDialogue stays here because the user reads it - // alongside system messages instead of in a separate Event tab. + // Hellion-tuned General preset. The pure player-talk catch-all plus + // the active-gameplay event streams (loot, crafting, gathering, NPC + // dialogue, party-finder pings). Pure technical noise (System, Error, + // Login/Logout spam, retainer sales, alarms, sign messages) lives in + // the dedicated System tab so it doesn't bury actual conversation. public static Tab VanillaGeneral => new() { Name = Language.Tabs_Presets_General, SelectedChannels = new Dictionary { - // Special - [ChatType.Debug] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Urgent] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Notice] = (ChatSourceExt.All, ChatSourceExt.All), - // Chat + // Player chat [ChatType.Say] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Yell] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Shout] = (ChatSourceExt.All, ChatSourceExt.All), @@ -54,25 +49,13 @@ public static class TabsUtil [ChatType.Linkshell6] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Linkshell7] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Linkshell8] = (ChatSourceExt.All, ChatSourceExt.All), - // Announcements - [ChatType.System] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Error] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Echo] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.NpcAnnouncement] = (ChatSourceExt.All, ChatSourceExt.All), + // Active-gameplay events [ChatType.NpcDialogue] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.FreeCompanyLoginLogout] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.PvpTeamLoginLogout] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.RetainerSale] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.LootNotice] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Progress] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.LootRoll] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Crafting] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Gathering] = (ChatSource.LocalPlayer, ChatSource.LocalPlayer), [ChatType.PeriodicRecruitmentNotification] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.RandomNumber] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Orchestrion] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.MessageBook] = (ChatSourceExt.All, ChatSourceExt.All), - [ChatType.Alarm] = (ChatSourceExt.All, ChatSourceExt.All), } }; @@ -139,6 +122,33 @@ public static class TabsUtil Channel = InputChannel.NoviceNetwork, }; + public static Tab HellionSystem => new() + { + Name = HellionStrings.Tabs_Presets_System, + SelectedChannels = new Dictionary + { + [ChatType.Debug] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Urgent] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Notice] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.System] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Error] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Echo] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.GatheringSystem] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.NoviceNetworkSystem] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.NpcAnnouncement] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.FreeCompanyLoginLogout] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.PvpTeamLoginLogout] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.RetainerSale] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Progress] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.RandomNumber] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Orchestrion] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.MessageBook] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Alarm] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.Sign] = (ChatSourceExt.All, ChatSourceExt.All), + [ChatType.GlamourNotifications] = (ChatSourceExt.All, ChatSourceExt.All), + }, + }; + public static Tab HellionLinkshell => new() { Name = HellionStrings.Tabs_Presets_Linkshell,