diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs
index 6bda9d53..b57a6458 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs
@@ -31,6 +31,11 @@ internal sealed class SettingEntry
///
public const string SystemBackdropType = "SystemBackdropType";
+ ///
+ /// 启用高级功能
+ ///
+ public const string IsAdvancedLaunchOptionsEnabled = "IsAdvancedLaunchOptionsEnabled";
+
///
/// 实时便笺刷新时间
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
index 737cbf0c..baecfbb4 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
@@ -3561,6 +3561,15 @@ namespace Snap.Hutao.Resource.Localization {
}
}
+ ///
+ /// 查找类似 启用「启动游戏-高级功能」的任意功能 您需要在设置里解锁它 的本地化字符串。
+ ///
+ internal static string ViewPageLaunchGameAdvancedFeatureElevationHint {
+ get {
+ return ResourceManager.GetString("ViewPageLaunchGameAdvancedFeatureElevationHint", resourceCulture);
+ }
+ }
+
///
/// 查找类似 高级功能 的本地化字符串。
///
@@ -4191,6 +4200,33 @@ namespace Snap.Hutao.Resource.Localization {
}
}
+ ///
+ /// 查找类似 在完整阅读原神和胡桃工具箱用户协议后,我选择启用「启动游戏-高级功能」 的本地化字符串。
+ ///
+ internal static string ViewPageSettingIsAdvancedLaunchOptionsEnabledDescription {
+ get {
+ return ResourceManager.GetString("ViewPageSettingIsAdvancedLaunchOptionsEnabledDescription", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 启动高级功能 的本地化字符串。
+ ///
+ internal static string ViewPageSettingIsAdvancedLaunchOptionsEnabledHeader {
+ get {
+ return ResourceManager.GetString("ViewPageSettingIsAdvancedLaunchOptionsEnabledHeader", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 您解锁了「启动游戏-高级功能」!其含有潜在违反原神服务条款的风险,一旦启用,您将咨询承担可能的后果。慎重选择! 的本地化字符串。
+ ///
+ internal static string ViewPageSettingFeaturesDangerousHint {
+ get {
+ return ResourceManager.GetString("ViewPageSettingFeaturesDangerousHint", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Github 上反馈的问题会优先处理 的本地化字符串。
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
index 29cf45c9..16e664c4 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
@@ -1284,6 +1284,9 @@
启动游戏
+
+ 启用「启动游戏-高级功能」的任意功能 您需要在设置里解锁它
+
高级功能
@@ -1494,6 +1497,15 @@
显示
+
+ 在完整阅读原神和胡桃工具箱用户协议后,我选择启用「启动游戏-高级功能」
+
+
+ 启动高级功能
+
+
+ 您解锁了「启动游戏-高级功能」!其含有潜在违反原神服务条款的风险,一旦启用,您将咨询承担可能的后果。慎重选择!
+
Github 上反馈的问题会优先处理
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs
index fa0dd172..5632a210 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs
@@ -6,6 +6,7 @@ using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Snap.Hutao.Core.Database;
+using Snap.Hutao.Core.LifeCycle;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Model.Entity.Database;
using System.Globalization;
@@ -24,6 +25,7 @@ internal sealed class AppOptions : ObservableObject, IOptions
private bool? isEmptyHistoryWishVisible;
private Core.Windowing.BackdropType? backdropType;
private CultureInfo? currentCulture;
+ private bool? isAdvancedLaunchOptionsEnabled;
///
/// 构造一个新的应用程序选项
@@ -171,6 +173,40 @@ internal sealed class AppOptions : ObservableObject, IOptions
}
}
+ ///
+ /// 是否启用高级功能
+ ///
+ public bool IsAdvancedLaunchOptionsEnabled
+ {
+ get
+ {
+ if (isAdvancedLaunchOptionsEnabled == null)
+ {
+ using (IServiceScope scope = serviceScopeFactory.CreateScope())
+ {
+ AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService();
+ string? value = appDbContext.Settings.SingleOrDefault(e => e.Key == SettingEntry.IsAdvancedLaunchOptionsEnabled)?.Value;
+ _ = Activation.GetElevated() == true ? isAdvancedLaunchOptionsEnabled = value != null && bool.Parse(value) : IsAdvancedLaunchOptionsEnabled = false;
+ }
+ }
+
+ return isAdvancedLaunchOptionsEnabled.Value;
+ }
+
+ set
+ {
+ if (SetProperty(ref isAdvancedLaunchOptionsEnabled, value))
+ {
+ using (IServiceScope scope = serviceScopeFactory.CreateScope())
+ {
+ AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService();
+ appDbContext.Settings.ExecuteDeleteWhere(e => e.Key == SettingEntry.IsAdvancedLaunchOptionsEnabled);
+ appDbContext.Settings.AddAndSave(new(SettingEntry.IsAdvancedLaunchOptionsEnabled, value.ToString()));
+ }
+ }
+ }
+ }
+
///
public AppOptions Value { get => this; }
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs
index a6ee8b77..b7fbc887 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs
@@ -1,7 +1,6 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using Snap.Hutao.Model.Binding.Cultivation;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Model.Entity.Primitive;
using Snap.Hutao.Model.Metadata.Item;
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
index ad1e3071..8dfa7c1b 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
@@ -301,16 +301,16 @@ internal sealed class GameService : IGameService
try
{
Interlocked.Increment(ref runningGamesCounter);
- bool isElevated = Activation.GetElevated();
+ bool isPassCheck = Activation.GetElevated() == appOptions.IsAdvancedLaunchOptionsEnabled ? true : false;
game.Start();
- if (isElevated && launchOptions.MultipleInstances)
+ if (isPassCheck && launchOptions.MultipleInstances)
{
ProcessInterop.DisableProtection(game, gamePath);
}
- if (isElevated && launchOptions.UnlockFps)
+ if (isPassCheck && launchOptions.UnlockFps)
{
await ProcessInterop.UnlockFpsAsync(game, launchOptions).ConfigureAwait(false);
}
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
index 05972186..2c285939 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
@@ -251,12 +251,18 @@
-
+
+
+
+
+
+
+
+
+
+
+
();
memoryCache = serviceProvider.GetRequiredService();
Options = serviceProvider.GetRequiredService();
+ AppOptions = serviceProvider.GetRequiredService();
this.serviceProvider = serviceProvider;
LaunchCommand = new AsyncRelayCommand(LaunchAsync, AsyncRelayCommandOptions.AllowConcurrentExecutions);
@@ -100,6 +101,11 @@ internal sealed class LaunchGameViewModel : Abstraction.ViewModel
///
public LaunchOptions Options { get; }
+ ///
+ /// 应用选项
+ ///
+ public AppOptions AppOptions { get; }
+
///
/// 游戏资源
///
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
index 1484b34e..2af84939 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
@@ -8,6 +8,7 @@ using Microsoft.Windows.AppLifecycle;
using Snap.Hutao.Core.Database;
using Snap.Hutao.Core.IO;
using Snap.Hutao.Core.IO.DataTransfer;
+using Snap.Hutao.Core.LifeCycle;
using Snap.Hutao.Core.Setting;
using Snap.Hutao.Core.Windowing;
using Snap.Hutao.Factory.Abstraction;
@@ -162,6 +163,11 @@ internal sealed class SettingViewModel : Abstraction.ViewModel
///
public ExperimentalFeaturesViewModel Experimental { get; }
+ ///
+ /// 是否提权
+ ///
+ public bool IsElevated { get => Activation.GetElevated(); }
+
///
/// 设置游戏路径命令
///