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.
This commit is contained in:
2026-05-02 18:28:29 +02:00
parent 45a5035426
commit 281a1e172f
5 changed files with 47 additions and 28 deletions
+6 -4
View File
@@ -153,13 +153,15 @@ public sealed class Plugin : IDalamudPlugin
} }
// Hellion default tab layout for first-run and v10-wipe. // Hellion default tab layout for first-run and v10-wipe.
// General-catch-all + FC + Party + Linkshell + Tells matches the // General catches player chat plus active gameplay events; the
// channel set the average raider uses; the Beginner tab only // System tab takes the technical noise so it does not bury real
// appears when the user has the Novice Network enabled in Audio // conversation. Beginner tab only appears when the Novice
// & Notifications, otherwise it would just sit empty. // Network is enabled in Audio and Notifications, otherwise it
// would just sit empty.
if (Config.Tabs.Count == 0) if (Config.Tabs.Count == 0)
{ {
Config.Tabs.Add(TabsUtil.VanillaGeneral); Config.Tabs.Add(TabsUtil.VanillaGeneral);
Config.Tabs.Add(TabsUtil.HellionSystem);
Config.Tabs.Add(TabsUtil.HellionFreeCompany); Config.Tabs.Add(TabsUtil.HellionFreeCompany);
Config.Tabs.Add(TabsUtil.HellionParty); Config.Tabs.Add(TabsUtil.HellionParty);
if (Config.ShowNoviceNetwork) if (Config.ShowNoviceNetwork)
+1
View File
@@ -233,6 +233,7 @@ internal class HellionStrings
internal static string Settings_Information_Changelog_Heading => Get(nameof(Settings_Information_Changelog_Heading)); internal static string Settings_Information_Changelog_Heading => Get(nameof(Settings_Information_Changelog_Heading));
// Hellion Chat — Default tab presets (channel-themed) // 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_FreeCompany => Get(nameof(Tabs_Presets_FreeCompany));
internal static string Tabs_Presets_Party => Get(nameof(Tabs_Presets_Party)); internal static string Tabs_Presets_Party => Get(nameof(Tabs_Presets_Party));
internal static string Tabs_Presets_Beginner => Get(nameof(Tabs_Presets_Beginner)); internal static string Tabs_Presets_Beginner => Get(nameof(Tabs_Presets_Beginner));
+3
View File
@@ -528,6 +528,9 @@
</data> </data>
<!-- Hellion Chat — Default-Tab-Presets (kanalspezifisch) --> <!-- Hellion Chat — Default-Tab-Presets (kanalspezifisch) -->
<data name="Tabs_Presets_System" xml:space="preserve">
<value>System</value>
</data>
<data name="Tabs_Presets_FreeCompany" xml:space="preserve"> <data name="Tabs_Presets_FreeCompany" xml:space="preserve">
<value>Free Company</value> <value>Free Company</value>
</data> </data>
+3
View File
@@ -528,6 +528,9 @@
</data> </data>
<!-- Hellion Chat — Default tab presets (channel-themed) --> <!-- Hellion Chat — Default tab presets (channel-themed) -->
<data name="Tabs_Presets_System" xml:space="preserve">
<value>System</value>
</data>
<data name="Tabs_Presets_FreeCompany" xml:space="preserve"> <data name="Tabs_Presets_FreeCompany" xml:space="preserve">
<value>Free Company</value> <value>Free Company</value>
</data> </data>
+34 -24
View File
@@ -14,22 +14,17 @@ public static class TabsUtil
return channels; return channels;
} }
// Hellion-tuned General preset. Differs from upstream Vanilla: // Hellion-tuned General preset. The pure player-talk catch-all plus
// Tells (own tab), emotes, novice network and the FC/PvP announcement // the active-gameplay event streams (loot, crafting, gathering, NPC
// streams move into their dedicated themed tabs so the General tab // dialogue, party-finder pings). Pure technical noise (System, Error,
// is the public-chat catch-all that the maintainer actually runs in // Login/Logout spam, retainer sales, alarms, sign messages) lives in
// production. NpcDialogue stays here because the user reads it // the dedicated System tab so it doesn't bury actual conversation.
// alongside system messages instead of in a separate Event tab.
public static Tab VanillaGeneral => new() public static Tab VanillaGeneral => new()
{ {
Name = Language.Tabs_Presets_General, Name = Language.Tabs_Presets_General,
SelectedChannels = new Dictionary<ChatType, (ChatSource, ChatSource)> SelectedChannels = new Dictionary<ChatType, (ChatSource, ChatSource)>
{ {
// Special // Player chat
[ChatType.Debug] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Urgent] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Notice] = (ChatSourceExt.All, ChatSourceExt.All),
// Chat
[ChatType.Say] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Say] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Yell] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Yell] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Shout] = (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.Linkshell6] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Linkshell7] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Linkshell7] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Linkshell8] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Linkshell8] = (ChatSourceExt.All, ChatSourceExt.All),
// Announcements // Active-gameplay events
[ChatType.System] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Error] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Echo] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.NpcAnnouncement] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.NpcDialogue] = (ChatSourceExt.All, ChatSourceExt.All), [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.LootNotice] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Progress] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.LootRoll] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.LootRoll] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Crafting] = (ChatSourceExt.All, ChatSourceExt.All), [ChatType.Crafting] = (ChatSourceExt.All, ChatSourceExt.All),
[ChatType.Gathering] = (ChatSource.LocalPlayer, ChatSource.LocalPlayer), [ChatType.Gathering] = (ChatSource.LocalPlayer, ChatSource.LocalPlayer),
[ChatType.PeriodicRecruitmentNotification] = (ChatSourceExt.All, ChatSourceExt.All), [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, Channel = InputChannel.NoviceNetwork,
}; };
public static Tab HellionSystem => new()
{
Name = HellionStrings.Tabs_Presets_System,
SelectedChannels = new Dictionary<ChatType, (ChatSource, ChatSource)>
{
[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() public static Tab HellionLinkshell => new()
{ {
Name = HellionStrings.Tabs_Presets_Linkshell, Name = HellionStrings.Tabs_Presets_Linkshell,