diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/KnownLaunchSchemes.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/KnownLaunchSchemes.cs
new file mode 100644
index 00000000..16fac365
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/KnownLaunchSchemes.cs
@@ -0,0 +1,52 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Snap.Hutao.Model.Intrinsic;
+
+namespace Snap.Hutao.Service.Game;
+
+internal static class KnownLaunchSchemes
+{
+ private static readonly LaunchScheme ServerChineseChannelDefaultSubChannelDefaultCompat = new LaunchSchemeChinese(ChannelType.Default, SubChannelType.Default, false);
+ private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelDefault = new LaunchSchemeChinese(ChannelType.Official, SubChannelType.Default);
+ private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelOfficial = new LaunchSchemeChinese(ChannelType.Official, SubChannelType.Official);
+ private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelNoTapTap = new LaunchSchemeChinese(ChannelType.Official, SubChannelType.NoTapTap);
+ private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelEpicCompat = new LaunchSchemeChinese(ChannelType.Official, SubChannelType.Epic, false);
+
+ private static readonly LaunchScheme ServerChineseChannelBilibiliSubChannelDefault = new LaunchSchemeBilibili(SubChannelType.Default);
+ private static readonly LaunchScheme ServerChineseChannelBilibiliSubChannelOfficialCompat = new LaunchSchemeBilibili(SubChannelType.Official, false);
+
+ private static readonly LaunchScheme ServerGlobalChannelDefaultSubChannelDefaultCompat = new LaunchSchemeOversea(ChannelType.Default, SubChannelType.Default, false);
+ private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelDefault = new LaunchSchemeOversea(ChannelType.Official, SubChannelType.Default);
+ private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelOfficial = new LaunchSchemeOversea(ChannelType.Official, SubChannelType.Official);
+ private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelEpic = new LaunchSchemeOversea(ChannelType.Official, SubChannelType.Epic);
+ private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelGoogle = new LaunchSchemeOversea(ChannelType.Official, SubChannelType.Google);
+
+ ///
+ /// 获取已知的启动方案
+ ///
+ /// 已知的启动方案
+ public static List Get()
+ {
+ return new List()
+ {
+ // 官服
+ ServerChineseChannelDefaultSubChannelDefaultCompat,
+ ServerChineseChannelOfficialSubChannelDefault,
+ ServerChineseChannelOfficialSubChannelOfficial,
+ ServerChineseChannelOfficialSubChannelNoTapTap,
+ ServerChineseChannelOfficialSubChannelEpicCompat,
+
+ // 渠道服
+ ServerChineseChannelBilibiliSubChannelDefault,
+ ServerChineseChannelBilibiliSubChannelOfficialCompat,
+
+ // 国际服
+ ServerGlobalChannelDefaultSubChannelDefaultCompat,
+ ServerGlobalChannelOfficialSubChannelDefault,
+ ServerGlobalChannelOfficialSubChannelOfficial,
+ ServerGlobalChannelOfficialSubChannelEpic,
+ ServerGlobalChannelOfficialSubChannelGoogle,
+ };
+ }
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs
deleted file mode 100644
index 338b3989..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Snap.Hutao.Model.Intrinsic;
-
-namespace Snap.Hutao.Service.Game;
-
-///
-/// 方案列表部分
-///
-internal sealed partial class LaunchScheme
-{
- private const int SdkStaticLauncherChineseId = 18;
- private const int SdkStaticLauncherBilibiliId = 17;
- private const int SdkStaticLauncherGlobalId = 10;
-
- private const string SdkStaticLauncherChineseKey = "eYd89JmJ";
- private const string SdkStaticLauncherBilibiliKey = "KAtdSsoQ";
- private const string SdkStaticLauncherGlobalKey = "gcStgarh";
-
- private static readonly LaunchScheme ServerChineseChannelDefaultSubChannelDefaultCompatOnly = new()
- {
- LauncherId = SdkStaticLauncherChineseId,
- Key = SdkStaticLauncherChineseKey,
- Channel = ChannelType.Default,
- SubChannel = SubChannelType.Default,
- IsOversea = false,
- IsNotCompatOnly = false,
- };
-
- private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelDefault = new()
- {
- LauncherId = SdkStaticLauncherChineseId,
- Key = SdkStaticLauncherChineseKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Default,
- IsOversea = false,
- };
-
- private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelOfficial = new()
- {
- LauncherId = SdkStaticLauncherChineseId,
- Key = SdkStaticLauncherChineseKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Official,
- IsOversea = false,
- };
-
- private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelNoTapTap = new()
- {
- LauncherId = SdkStaticLauncherChineseId,
- Key = SdkStaticLauncherChineseKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.NoTapTap,
- IsOversea = false,
- };
-
- private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelEpicCompatOnly = new()
- {
- LauncherId = SdkStaticLauncherChineseId,
- Key = SdkStaticLauncherChineseKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Epic,
- IsOversea = false,
- IsNotCompatOnly = false,
- };
-
- private static readonly LaunchScheme ServerChineseChannelBilibiliSubChannelDefault = new()
- {
- LauncherId = SdkStaticLauncherBilibiliId,
- Key = SdkStaticLauncherBilibiliKey,
- Channel = ChannelType.Bili,
- SubChannel = SubChannelType.Default,
- IsOversea = false,
- };
-
- private static readonly LaunchScheme ServerChineseChannelBilibiliSubChannelOfficialCompatOnly = new()
- {
- LauncherId = SdkStaticLauncherBilibiliId,
- Key = SdkStaticLauncherBilibiliKey,
- Channel = ChannelType.Bili,
- SubChannel = SubChannelType.Official,
- IsOversea = false,
- IsNotCompatOnly = false,
- };
-
- private static readonly LaunchScheme ServerGlobalChannelDefaultSubChannelDefaultCompatOnly = new()
- {
- LauncherId = SdkStaticLauncherGlobalId,
- Key = SdkStaticLauncherGlobalKey,
- Channel = ChannelType.Default,
- SubChannel = SubChannelType.Default,
- IsOversea = true,
- IsNotCompatOnly = false,
- };
-
- private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelDefault = new()
- {
- LauncherId = SdkStaticLauncherGlobalId,
- Key = SdkStaticLauncherGlobalKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Default,
- IsOversea = true,
- };
-
- private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelOfficial = new()
- {
- LauncherId = SdkStaticLauncherGlobalId,
- Key = SdkStaticLauncherGlobalKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Official,
- IsOversea = true,
- };
-
- private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelEpic = new()
- {
- LauncherId = SdkStaticLauncherGlobalId,
- Key = SdkStaticLauncherGlobalKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Epic,
- IsOversea = true,
- };
-
- private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelGoogle = new()
- {
- LauncherId = SdkStaticLauncherGlobalId,
- Key = SdkStaticLauncherGlobalKey,
- Channel = ChannelType.Official,
- SubChannel = SubChannelType.Google,
- IsOversea = true,
- };
-
- ///
- /// 获取已知的启动方案
- ///
- /// 已知的启动方案
- public static List GetKnownSchemes()
- {
- return new List()
- {
- // 官服
- ServerChineseChannelDefaultSubChannelDefaultCompatOnly,
- ServerChineseChannelOfficialSubChannelDefault,
- ServerChineseChannelOfficialSubChannelOfficial,
- ServerChineseChannelOfficialSubChannelNoTapTap,
- ServerChineseChannelOfficialSubChannelEpicCompatOnly,
-
- // 渠道服
- ServerChineseChannelBilibiliSubChannelDefault,
- ServerChineseChannelBilibiliSubChannelOfficialCompatOnly,
-
- // 国际服
- ServerGlobalChannelDefaultSubChannelDefaultCompatOnly,
- ServerGlobalChannelOfficialSubChannelDefault,
- ServerGlobalChannelOfficialSubChannelOfficial,
- ServerGlobalChannelOfficialSubChannelEpic,
- ServerGlobalChannelOfficialSubChannelGoogle,
- };
- }
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs
index 523e0de6..5aeede35 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs
@@ -9,7 +9,7 @@ namespace Snap.Hutao.Service.Game;
/// 启动方案
///
[HighQuality]
-internal sealed partial class LaunchScheme
+internal partial class LaunchScheme
{
///
/// 显示名称
@@ -32,29 +32,29 @@ internal sealed partial class LaunchScheme
///
/// 通道
///
- public ChannelType Channel { get; private set; }
+ public ChannelType Channel { get; private protected set; }
///
/// 子通道
///
- public SubChannelType SubChannel { get; private set; }
+ public SubChannelType SubChannel { get; private protected set; }
///
/// 启动器 Id
///
- public int LauncherId { get; private set; }
+ public int LauncherId { get; private protected set; }
///
/// API Key
///
- public string Key { get; private set; } = default!;
+ public string Key { get; private protected set; } = default!;
///
/// 是否为海外
///
- public bool IsOversea { get; private set; }
+ public bool IsOversea { get; private protected set; }
- public bool IsNotCompatOnly { get; private set; } = true;
+ public bool IsNotCompatOnly { get; private protected set; } = true;
///
/// 多通道相等
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeBilibili.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeBilibili.cs
new file mode 100644
index 00000000..cd5057be
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeBilibili.cs
@@ -0,0 +1,22 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Snap.Hutao.Model.Intrinsic;
+
+namespace Snap.Hutao.Service.Game;
+
+internal sealed class LaunchSchemeBilibili : LaunchScheme
+{
+ private const int SdkStaticLauncherBilibiliId = 17;
+ private const string SdkStaticLauncherBilibiliKey = "KAtdSsoQ";
+
+ public LaunchSchemeBilibili(SubChannelType subChannel, bool isNotCompatOnly = true)
+ {
+ LauncherId = SdkStaticLauncherBilibiliId;
+ Key = SdkStaticLauncherBilibiliKey;
+ Channel = ChannelType.Bili;
+ SubChannel = subChannel;
+ IsOversea = false;
+ IsNotCompatOnly = isNotCompatOnly;
+ }
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeChinese.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeChinese.cs
new file mode 100644
index 00000000..1e8f0e9f
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeChinese.cs
@@ -0,0 +1,22 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Snap.Hutao.Model.Intrinsic;
+
+namespace Snap.Hutao.Service.Game;
+
+internal sealed class LaunchSchemeChinese : LaunchScheme
+{
+ private const int SdkStaticLauncherChineseId = 18;
+ private const string SdkStaticLauncherChineseKey = "eYd89JmJ";
+
+ public LaunchSchemeChinese(ChannelType channel, SubChannelType subChannel, bool isNotCompatOnly = true)
+ {
+ LauncherId = SdkStaticLauncherChineseId;
+ Key = SdkStaticLauncherChineseKey;
+ Channel = channel;
+ SubChannel = subChannel;
+ IsOversea = false;
+ IsNotCompatOnly = isNotCompatOnly;
+ }
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeOversea.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeOversea.cs
new file mode 100644
index 00000000..2838d82e
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchSchemeOversea.cs
@@ -0,0 +1,22 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Snap.Hutao.Model.Intrinsic;
+
+namespace Snap.Hutao.Service.Game;
+
+internal sealed class LaunchSchemeOversea : LaunchScheme
+{
+ private const int SdkStaticLauncherOverseaId = 10;
+ private const string SdkStaticLauncherOverseaKey = "gcStgarh";
+
+ public LaunchSchemeOversea(ChannelType channel, SubChannelType subChannel, bool isNotCompatOnly = true)
+ {
+ LauncherId = SdkStaticLauncherOverseaId;
+ Key = SdkStaticLauncherOverseaKey;
+ Channel = channel;
+ SubChannel = subChannel;
+ IsOversea = true;
+ IsNotCompatOnly = isNotCompatOnly;
+ }
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs
index 4badbf36..24dc9524 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs
@@ -55,7 +55,7 @@ internal sealed partial class LaunchGameViewModel : Abstraction.ViewModel
/// 已知的服务器方案
///
[SuppressMessage("", "CA1822")]
- public List KnownSchemes { get => LaunchScheme.GetKnownSchemes(); }
+ public List KnownSchemes { get => KnownLaunchSchemes.Get(); }
///
/// 当前选择的服务器方案