Merge branch 'main' into d-v3
# Conflicts: # BetterGenshinImpact/App.xaml.cs # BetterGenshinImpact/BetterGenshinImpact.csproj
@@ -1,7 +1,10 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=chyan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=enkanomiya/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Kongying/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=mirrorchan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=onslaugh/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=retcode/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=serenitea/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=steambird/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=steambird/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Teyvat/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
@@ -26,6 +26,8 @@
|
||||
<bgivc:EnumToVisibilityConverter x:Key="EnumToVisibilityConverter" />
|
||||
<bgivc:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />
|
||||
<bgivc:CultureInfoNameToKVPConverter x:Key="CultureInfoNameToKVPConverter" />
|
||||
<bgivc:StringToColorConverter x:Key="StringToColorConverter" />
|
||||
<bgivc:TrConverter x:Key="TrConverter" />
|
||||
<Style BasedOn="{StaticResource DefaultTextBoxStyle}" TargetType="{x:Type TextBox}">
|
||||
<Setter Property="behavior:ClipboardInterceptor.EnableSafeClipboard" Value="True" />
|
||||
</Style>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
@@ -22,6 +23,8 @@ using BetterGenshinImpact.View.Windows;
|
||||
using BetterGenshinImpact.ViewModel;
|
||||
using BetterGenshinImpact.ViewModel.Pages;
|
||||
using BetterGenshinImpact.ViewModel.Pages.View;
|
||||
using LazyCache;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using BetterGenshinImpact.ViewModel.Windows;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
@@ -31,10 +34,15 @@ using Serilog.Events;
|
||||
using Serilog.Sinks.RichTextBox.Abstraction;
|
||||
using Wpf.Ui;
|
||||
using Wpf.Ui.DependencyInjection;
|
||||
using Wpf.Ui.Violeta.Appearance;
|
||||
using Wpf.Ui.Violeta.Controls;
|
||||
using Quartz;
|
||||
using BetterGenshinImpact.Model.Gear.Triggers;
|
||||
|
||||
// Wine 平台适配
|
||||
using BetterGenshinImpact.Platform.Wine;
|
||||
using BetterGenshinImpact.Service.Tavern;
|
||||
|
||||
namespace BetterGenshinImpact;
|
||||
|
||||
public partial class App : Application
|
||||
@@ -84,7 +92,13 @@ public partial class App : Application
|
||||
}
|
||||
|
||||
Log.Logger = loggerConfiguration.CreateLogger();
|
||||
services.AddLogging(c => c.AddSerilog());
|
||||
services.AddSingleton<IMissingTranslationReporter, SupabaseMissingTranslationReporter>();
|
||||
services.AddSingleton<ITranslationService, JsonTranslationService>();
|
||||
services.AddLogging(logging =>
|
||||
{
|
||||
logging.ClearProviders();
|
||||
logging.Services.AddSingleton<ILoggerProvider, TranslatingSerilogLoggerProvider>();
|
||||
});
|
||||
|
||||
services.AddLocalization();
|
||||
|
||||
@@ -161,6 +175,12 @@ public partial class App : Application
|
||||
services.AddSingleton<HutaoNamedPipe>();
|
||||
services.AddSingleton<BgiOnnxFactory>();
|
||||
services.AddSingleton<OcrFactory>();
|
||||
services.AddMemoryCache();
|
||||
services.AddSingleton<IAppCache, CachingService>();
|
||||
services.AddSingleton<MemoryFileCache>();
|
||||
services.AddSingleton<IMihoyoMapApiService, MihoyoMapApiService>();
|
||||
services.AddSingleton<IKongyingTavernApiService, KongyingTavernApiService>();
|
||||
services.AddSingleton<IMaskMapPointService, MaskMapPointService>();
|
||||
services.AddSingleton<GearTaskStorageService>();
|
||||
services.AddSingleton<GearTriggerStorageService>();
|
||||
services.AddSingleton<ITriggerHistoryService, TriggerHistoryService>();
|
||||
@@ -173,6 +193,8 @@ public partial class App : Application
|
||||
|
||||
// Configuration
|
||||
//services.Configure<AppConfig>(context.Configuration.GetSection(nameof(AppConfig)));
|
||||
|
||||
I18N.Culture = new CultureInfo("zh-Hans"); // #1846
|
||||
}
|
||||
)
|
||||
.Build();
|
||||
@@ -214,6 +236,8 @@ public partial class App : Application
|
||||
/// </summary>
|
||||
protected override async void OnStartup(StartupEventArgs e)
|
||||
{
|
||||
// Wine 平台适配
|
||||
WinePlatformAddon.ApplyApplicationConfig();
|
||||
base.OnStartup(e);
|
||||
|
||||
try
|
||||
@@ -353,4 +377,4 @@ public partial class App : Application
|
||||
// log
|
||||
GetLogger<App>().LogDebug(e, "UnHandle Exception");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<AssemblyName>BetterGI</AssemblyName>
|
||||
<Version>0.54.1-alpha.3</Version>
|
||||
<Version>0.56.3-alpha.5</Version>
|
||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
|
||||
@@ -44,9 +44,9 @@
|
||||
|
||||
|
||||
<PackageReference Include="BetterGI.VCRuntime" Version="14.44.35208" />
|
||||
<PackageReference Include="BetterGI.Assets.Map" Version="1.0.15" />
|
||||
<PackageReference Include="BetterGI.Assets.Model" Version="1.0.17" />
|
||||
<PackageReference Include="BetterGI.Assets.Other" Version="1.0.10" />
|
||||
<PackageReference Include="BetterGI.Assets.Map" Version="1.0.17" />
|
||||
<PackageReference Include="BetterGI.Assets.Model" Version="1.0.18" />
|
||||
<PackageReference Include="BetterGI.Assets.Other" Version="1.0.12" />
|
||||
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
|
||||
<PackageReference Include="DeviceId" Version="6.9.0" />
|
||||
@@ -54,9 +54,11 @@
|
||||
<PackageReference Include="DeviceId.Windows.Wmi" Version="6.9.0" />
|
||||
<PackageReference Include="Emoji.Wpf" Version="0.3.4" />
|
||||
<PackageReference Include="LibGit2Sharp" Version="0.31.0" />
|
||||
<PackageReference Include="LazyCache" Version="2.4.0" />
|
||||
<PackageReference Include="MailKit" Version="4.14.0" />
|
||||
<PackageReference Include="Meziantou.Framework.Win32.CredentialManager" Version="1.7.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.4" />
|
||||
@@ -85,17 +87,19 @@
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.RichTextBoxEx.Wpf" Version="1.1.0.1" />
|
||||
<!-- <PackageReference Include="supabase-csharp" Version="0.16.2" />-->
|
||||
<PackageReference Include="System.Drawing.Common" Version="10.0.0" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="9.0.5" />
|
||||
<PackageReference Include="System.IO.Hashing" Version="9.0.4" />
|
||||
<PackageReference Include="TorchSharp" Version="0.105.0" />
|
||||
<PackageReference Include="Vanara.PInvoke.NtDll" Version="4.1.3" />
|
||||
<PackageReference Include="Vanara.PInvoke.SHCore" Version="4.1.3" />
|
||||
<PackageReference Include="Vanara.PInvoke.User32" Version="4.1.3" />
|
||||
<PackageReference Include="WPF-UI" Version="4.0.2" />
|
||||
<PackageReference Include="WPF-UI.DependencyInjection" Version="4.0.2" />
|
||||
<PackageReference Include="WPF-UI.Tray" Version="4.0.2" />
|
||||
<PackageReference Include="WPF-UI.Violeta" Version="4.0.2.3" />
|
||||
<PackageReference Include="XamlAnimatedGif" Version="2.3.1" />
|
||||
<PackageReference Include="WPF-UI" Version="4.2.0" />
|
||||
<PackageReference Include="WPF-UI.DependencyInjection" Version="4.2.0" />
|
||||
<PackageReference Include="WPF-UI.Tray" Version="4.2.0" />
|
||||
<PackageReference Include="WPF-UI.Violeta" Version="4.2.0.1" />
|
||||
<PackageReference Include="gong-wpf-dragdrop" Version="3.2.1" />
|
||||
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
||||
<PackageReference Include="YoloSharp" Version="6.0.3" />
|
||||
@@ -129,6 +133,9 @@
|
||||
<None Update="GameTask\AutoFishing\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoLeyLineOutcrop\Assets\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\LogParse\Assets\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
@@ -195,11 +202,18 @@
|
||||
<None Update="GameTask\Common\Element\Assets\1920x1080\in_domain.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoDomain\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="User\I18n\en.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="GameTask\OneDragon\" />
|
||||
<Folder Include="GameTask\UseRedeemCode\Assets\1920x1080\" />
|
||||
<Folder Include="Resources\" />
|
||||
<Folder Include="Service\Notification\Builder\" />
|
||||
<Folder Include="User\AutoPathing\" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -1,588 +0,0 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<AssemblyName>BetterGI</AssemblyName>
|
||||
<IntermediateOutputPath>obj\x64\Debug\</IntermediateOutputPath>
|
||||
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
|
||||
<MSBuildProjectExtensionsPath>D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\</MSBuildProjectExtensionsPath>
|
||||
<_TargetAssemblyProjectName>BetterGenshinImpact</_TargetAssemblyProjectName>
|
||||
<RootNamespace>BetterGenshinImpact</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
|
||||
<PropertyGroup>
|
||||
<Version>0.51.1-alpha.1</Version>
|
||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWPF>true</UseWPF>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<LangVersion>12.0</LangVersion>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<ApplicationIcon>Resources\Images\logo.ico</ApplicationIcon>
|
||||
<Platforms>x64</Platforms>
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
<!-- <ItemGroup>
|
||||
<None Remove="Assets\Images\*.jpg" />
|
||||
<None Remove="Assets\Images\*" />
|
||||
<None Remove="Assets\Images\*.png" />
|
||||
<None Remove="Assets\Images\*.ico" />
|
||||
<None Remove="Assets\Fonts\*.ttf" />
|
||||
<None Remove="Assets\Highlighting\*.xshd" />
|
||||
<None Remove="Assets\Strings\*.html" />
|
||||
<None Remove="Assets\Strings\*.md" />
|
||||
<None Remove="Assets\Audios\*.mp3" />
|
||||
<None Update="Assets\Config\*"/>
|
||||
</ItemGroup>-->
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AvalonEdit" Version="6.3.1.120" />
|
||||
<PackageReference Include="BehaviourTree" Version="1.0.73" />
|
||||
<PackageReference Include="BetterGI.VCRuntime" Version="14.44.35208" />
|
||||
<PackageReference Include="BetterGI.Assets.Map" Version="1.0.12" />
|
||||
<PackageReference Include="BetterGI.Assets.Model" Version="1.0.12" />
|
||||
<PackageReference Include="BetterGI.Assets.Other" Version="1.0.9" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
|
||||
<PackageReference Include="DeviceId" Version="6.9.0" />
|
||||
<PackageReference Include="DeviceId.Windows" Version="6.9.0" />
|
||||
<PackageReference Include="DeviceId.Windows.Wmi" Version="6.9.0" />
|
||||
<PackageReference Include="Emoji.Wpf" Version="0.3.4" />
|
||||
<PackageReference Include="LibGit2Sharp" Version="0.31.0" />
|
||||
<PackageReference Include="Meziantou.Framework.Win32.CredentialManager" Version="1.7.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.ML.OnnxRuntime.DirectML" Version="1.21.0" />
|
||||
<!--排除掉cpu的runtime dll-->
|
||||
<PackageReference Include="Microsoft.ML.OnnxRuntime" Version="1.21.0" IncludeAssets="none" />
|
||||
<PackageReference Include="Microsoft.ML.OnnxRuntime.Managed" Version="1.21.0" />
|
||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
|
||||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2592.51" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Ookii.Dialogs.Wpf" Version="5.0.1" />
|
||||
<PackageReference Include="OpenCvSharp4.WpfExtensions" Version="4.11.0.20250507" />
|
||||
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.11.0.20250507" />
|
||||
<PackageReference Include="OpenCvSharp4.Windows" Version="4.11.0.20250507" />
|
||||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.122" />
|
||||
<PackageReference Include="Microsoft.ClearScript.V8" Version="7.4.5" />
|
||||
<PackageReference Include="Microsoft.ClearScript.V8.Native.win-x64" Version="7.4.5" />
|
||||
<PackageReference Include="MouseKeyHook" Version="5.7.1" />
|
||||
<PackageReference Include="PresentMonFps" Version="2.0.5" />
|
||||
<PackageReference Include="Sdl.MultiSelectComboBox" Version="1.0.103" />
|
||||
<PackageReference Include="Semver" Version="3.0.0" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.1" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.RichTextBoxEx.Wpf" Version="1.1.0.1" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="9.0.5" />
|
||||
<PackageReference Include="System.IO.Hashing" Version="9.0.4" />
|
||||
<PackageReference Include="TorchSharp" Version="0.105.0" />
|
||||
<PackageReference Include="Vanara.PInvoke.NtDll" Version="4.1.3" />
|
||||
<PackageReference Include="Vanara.PInvoke.SHCore" Version="4.1.3" />
|
||||
<PackageReference Include="Vanara.PInvoke.User32" Version="4.1.3" />
|
||||
<PackageReference Include="WPF-UI" Version="4.0.2" />
|
||||
<PackageReference Include="WPF-UI.DependencyInjection" Version="4.0.2" />
|
||||
<PackageReference Include="WPF-UI.Tray" Version="4.0.2" />
|
||||
<PackageReference Include="WPF-UI.Violeta" Version="4.0.2.3" />
|
||||
<PackageReference Include="gong-wpf-dragdrop" Version="3.2.1" />
|
||||
<PackageReference Include="YamlDotNet" Version="16.3.0" />
|
||||
<PackageReference Include="YoloSharp" Version="6.0.3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug'">
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Fischless.GameCapture\Fischless.GameCapture.csproj" />
|
||||
<ProjectReference Include="..\Fischless.HotkeyCapture\Fischless.HotkeyCapture.csproj" />
|
||||
<ProjectReference Include="..\Fischless.WindowsInput\Fischless.WindowsInput.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="Assets\Map\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Assets\Model\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Assets\Config\**">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoFight\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoFight\Assets\combat_avatar.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoFishing\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\LogParse\Assets\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoGeniusInvokation\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoGeniusInvokation\Assets\tcg_character_card.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoPick\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoSkip\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoSkip\Assets\hangout.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoTrackPath\Assets\tp.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\Common\Element\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\Common\Element\Assets\Json\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoWood\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoMusicGame\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\GameLoading\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\QuickTeleport\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\QuickSereniteaPot\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\AutoEat\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\QuickBuy\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\UseRedeemCode\Assets\1920x1080\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="User\**">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\LogParse\Assets\log.css">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\LogParse\Assets\log.js">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\GameLoading\Assets\1920x1080\enter_game.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="GameTask\Common\Element\Assets\1920x1080\in_domain.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="GameTask\OneDragon\" />
|
||||
<Folder Include="GameTask\UseRedeemCode\Assets\1920x1080\" />
|
||||
<Folder Include="Resources\" />
|
||||
<Folder Include="Service\Notification\Builder\" />
|
||||
<Folder Include="User\AutoPathing\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="View\Windows\WelcomeDialog.xaml.cs">
|
||||
<SubType>Code</SubType>
|
||||
<DependentUpon>WelcomeDialog.xaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<_DeploymentManifestIconFile Remove="Resources\Images\logo.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\Accessibility.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\behaviourtree\1.0.73\lib\netstandard1.0\BehaviourTree.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\bettergi.assets.map\1.0.12\lib\net8.0\BetterGI.Assets.Map.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\bettergi.assets.model\1.0.12\lib\net8.0\BetterGI.Assets.Model.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\bettergi.assets.other\1.0.9\lib\net8.0\BetterGI.Assets.Other.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\bettergi.vcruntime\14.44.35208\lib\net8.0\BetterGI.VCRuntime.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.clearscript.core\7.4.5\lib\net5.0\ClearScript.Core.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.clearscript.v8\7.4.5\lib\net5.0\ClearScript.V8.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.clearscript.v8.icudata\7.4.5\lib\netstandard1.0\ClearScript.V8.ICUData.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\clipper2\1.4.0\lib\netstandard2.0\Clipper2Lib.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\communitytoolkit.mvvm\8.2.2\lib\net6.0\CommunityToolkit.Mvvm.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\deviceid\6.9.0\lib\net8.0\DeviceId.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\deviceid.windows\6.9.0\lib\net8.0-windows10.0.17763\DeviceId.Windows.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\deviceid.windows.wmi\6.9.0\lib\net8.0\DeviceId.Windows.Wmi.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.diagnostics.tracing.traceevent\3.1.13\lib\netstandard2.0\Dia2Lib.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\emoji.wpf\0.3.4\lib\netcoreapp3.1\Emoji.Wpf.dll" />
|
||||
<ReferencePath Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\Fischless.GameCapture\bin\x64\Debug\net8.0-windows10.0.22621.0\Fischless.GameCapture.dll" />
|
||||
<ReferencePath Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\Fischless.HotkeyCapture\bin\x64\Debug\net8.0-windows10.0.22621.0\Fischless.HotkeyCapture.dll" />
|
||||
<ReferencePath Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\Fischless.WindowsInput\bin\x64\Debug\netstandard2.0\Fischless.WindowsInput.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\mousekeyhook\5.7.1\lib\net7.0-windows7.0\Gma.System.MouseKeyHook.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\gong-wpf-dragdrop\3.2.1\lib\net6.0-windows7.0\GongSolutions.WPF.DragDrop.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\google.protobuf\3.21.9\lib\net5.0\Google.Protobuf.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\avalonedit\6.3.1.120\lib\net8.0-windows7.0\ICSharpCode.AvalonEdit.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sharpziplib\1.4.0\lib\net6.0\ICSharpCode.SharpZipLib.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\libgit2sharp\0.31.0\lib\net8.0\LibGit2Sharp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\meziantou.framework.win32.credentialmanager\1.7.4\lib\net8.0\Meziantou.Framework.Win32.CredentialManager.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\Microsoft.CSharp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.diagnostics.tracing.traceevent\3.1.13\lib\netstandard2.0\Microsoft.Diagnostics.FastSerialization.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.diagnostics.tracing.traceevent\3.1.13\lib\netstandard2.0\Microsoft.Diagnostics.Tracing.TraceEvent.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.abstractions\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.binder\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.Binder.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.commandline\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.CommandLine.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.environmentvariables\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.fileextensions\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.FileExtensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.json\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.Json.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.configuration.usersecrets\9.0.4\lib\net8.0\Microsoft.Extensions.Configuration.UserSecrets.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.dependencyinjection.abstractions\9.0.4\lib\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.dependencyinjection\9.0.4\lib\net8.0\Microsoft.Extensions.DependencyInjection.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.diagnostics.abstractions\9.0.4\lib\net8.0\Microsoft.Extensions.Diagnostics.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.diagnostics\9.0.4\lib\net8.0\Microsoft.Extensions.Diagnostics.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.fileproviders.abstractions\9.0.4\lib\net8.0\Microsoft.Extensions.FileProviders.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.fileproviders.physical\9.0.4\lib\net8.0\Microsoft.Extensions.FileProviders.Physical.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.filesystemglobbing\9.0.4\lib\net8.0\Microsoft.Extensions.FileSystemGlobbing.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.hosting.abstractions\9.0.4\lib\net8.0\Microsoft.Extensions.Hosting.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.hosting\9.0.4\lib\net8.0\Microsoft.Extensions.Hosting.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.localization.abstractions\9.0.4\lib\netstandard2.0\Microsoft.Extensions.Localization.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.localization\9.0.4\lib\netstandard2.0\Microsoft.Extensions.Localization.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.abstractions\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.configuration\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.Configuration.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.console\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.Console.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.debug\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.Debug.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.eventlog\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.EventLog.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.eventsource\9.0.4\lib\net8.0\Microsoft.Extensions.Logging.EventSource.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.options.configurationextensions\9.0.4\lib\net8.0\Microsoft.Extensions.Options.ConfigurationExtensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.options\9.0.4\lib\net8.0\Microsoft.Extensions.Options.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.extensions.primitives\9.0.4\lib\net8.0\Microsoft.Extensions.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.ml.onnxruntime.managed\1.21.0\lib\net8.0\Microsoft.ML.OnnxRuntime.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.toolkit.uwp.notifications\7.1.3\lib\net5.0-windows10.0.17763\Microsoft.Toolkit.Uwp.Notifications.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\Microsoft.VisualBasic.Core.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\Microsoft.VisualBasic.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\Microsoft.VisualBasic.Forms.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.web.webview2\1.0.2592.51\lib\netcoreapp3.0\Microsoft.Web.WebView2.Core.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.web.webview2\1.0.2592.51\lib\netcoreapp3.0\Microsoft.Web.WebView2.WinForms.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.web.webview2\1.0.2592.51\lib\netcoreapp3.0\Microsoft.Web.WebView2.Wpf.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\Microsoft.Win32.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\Microsoft.Win32.Registry.AccessControl.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\Microsoft.Win32.Registry.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.win32.systemevents\9.0.5\lib\net8.0\Microsoft.Win32.SystemEvents.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windows.sdk.net.ref\10.0.22621.54\lib\net8.0\Microsoft.Windows.SDK.NET.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.xaml.behaviors.wpf\1.1.122\lib\net6.0-windows7.0\Microsoft.Xaml.Behaviors.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\mscorlib.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\netstandard.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\newtonsoft.json\13.0.3\lib\net6.0\Newtonsoft.Json.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\ookii.dialogs.wpf\5.0.1\lib\net6.0-windows7.0\Ookii.Dialogs.Wpf.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\opencvsharp4\4.11.0.20250507\lib\net6.0\OpenCvSharp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\opencvsharp4.extensions\4.11.0.20250507\lib\net6.0\OpenCvSharp.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\opencvsharp4.wpfextensions\4.11.0.20250507\lib\net6.0\OpenCvSharp.WpfExtensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationCore.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.Aero.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.Aero2.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.AeroLite.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.Classic.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.Luna.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationFramework.Royale.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\PresentationUI.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\presentmonfps\2.0.5\lib\netstandard2.0\PresentMonFps.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\ReachFramework.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sdl.multiselectcombobox\1.0.103\lib\net6.0-windows7.0\Sdl.MultiSelectComboBox.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\semver\3.0.0\lib\net5.0\Semver.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\serilog\4.2.0\lib\net8.0\Serilog.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\serilog.extensions.logging\9.0.1\lib\net8.0\Serilog.Extensions.Logging.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\serilog.sinks.console\6.0.0\lib\net8.0\Serilog.Sinks.Console.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\serilog.sinks.file\6.0.0\lib\net8.0\Serilog.Sinks.File.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\serilog.sinks.richtextboxex.wpf\1.1.0.1\lib\net8.0-windows7.0\Serilog.Sinks.RichTextBoxEx.Wpf.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sharpdx.d3dcompiler\4.2.0\lib\netstandard1.1\SharpDX.D3DCompiler.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sharpdx.direct3d11\4.2.0\lib\netstandard1.1\SharpDX.Direct3D11.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sharpdx.directinput\4.2.0\lib\netstandard1.3\SharpDX.DirectInput.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sharpdx\4.2.0\lib\netstandard1.1\SharpDX.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sharpdx.dxgi\4.2.0\lib\netstandard1.1\SharpDX.DXGI.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sixlabors.fonts\2.0.8\lib\net6.0\SixLabors.Fonts.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sixlabors.imagesharp\3.1.7\lib\net6.0\SixLabors.ImageSharp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\sixlabors.imagesharp.drawing\2.1.5\lib\net6.0\SixLabors.ImageSharp.Drawing.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\skiasharp\2.88.6\lib\net6.0\SkiaSharp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\stfu\0.1.1\lib\netcoreapp3.1\Stfu.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.AppContext.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Buffers.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.codedom\9.0.3\lib\net8.0\System.CodeDom.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Collections.Concurrent.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Collections.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Collections.Immutable.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Collections.NonGeneric.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Collections.Specialized.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ComponentModel.Annotations.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ComponentModel.DataAnnotations.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ComponentModel.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ComponentModel.EventBasedAsync.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ComponentModel.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ComponentModel.TypeConverter.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Configuration.ConfigurationManager.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Configuration.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Console.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Core.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Data.Common.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Data.DataSetExtensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Data.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Design.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.Contracts.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.Debug.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.diagnostics.diagnosticsource\9.0.4\lib\net8.0\System.Diagnostics.DiagnosticSource.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.diagnostics.eventlog\9.0.4\lib\net8.0\System.Diagnostics.EventLog.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.FileVersionInfo.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Diagnostics.PerformanceCounter.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.Process.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.StackTrace.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.TextWriterTraceListener.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.Tools.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.TraceSource.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Diagnostics.Tracing.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.DirectoryServices.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.drawing.common\9.0.5\lib\net8.0\System.Drawing.Common.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Drawing.Design.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Drawing.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Drawing.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Dynamic.Runtime.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Formats.Asn1.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Formats.Tar.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Globalization.Calendars.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Globalization.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Globalization.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.Compression.Brotli.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.Compression.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.Compression.FileSystem.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.Compression.ZipFile.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.FileSystem.AccessControl.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.FileSystem.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.FileSystem.DriveInfo.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.FileSystem.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.FileSystem.Watcher.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.io.hashing\9.0.4\lib\net8.0\System.IO.Hashing.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.IsolatedStorage.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.MemoryMappedFiles.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.IO.Packaging.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.io.pipelines\9.0.4\lib\net8.0\System.IO.Pipelines.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.Pipes.AccessControl.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.Pipes.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.IO.UnmanagedMemoryStream.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Linq.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Linq.Expressions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Linq.Parallel.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Linq.Queryable.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.management\9.0.3\lib\net8.0\System.Management.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Memory.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Http.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Http.Json.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.HttpListener.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Mail.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.NameResolution.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.NetworkInformation.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Ping.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Quic.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Requests.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Security.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.ServicePoint.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.Sockets.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.WebClient.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.WebHeaderCollection.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.WebProxy.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.WebSockets.Client.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Net.WebSockets.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Numerics.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.numerics.tensors\9.0.0\lib\net8.0\System.Numerics.Tensors.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Numerics.Vectors.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ObjectModel.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Printing.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.drawing.common\9.0.5\lib\net8.0\System.Private.Windows.Core.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.DispatchProxy.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.Emit.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.Emit.ILGeneration.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.Emit.Lightweight.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.Metadata.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Reflection.TypeExtensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Resources.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Resources.Reader.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Resources.ResourceManager.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Resources.Writer.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.CompilerServices.Unsafe.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.CompilerServices.VisualC.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Handles.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.InteropServices.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.InteropServices.JavaScript.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.InteropServices.RuntimeInformation.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Intrinsics.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Loader.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Numerics.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Serialization.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Serialization.Formatters.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Serialization.Json.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Serialization.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Runtime.Serialization.Xml.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.AccessControl.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Claims.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Algorithms.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Cng.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Csp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Encoding.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.OpenSsl.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Pkcs.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.ProtectedData.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.X509Certificates.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Security.Cryptography.Xml.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Security.Permissions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Principal.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.Principal.Windows.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Security.SecureString.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ServiceModel.Web.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ServiceProcess.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Text.Encoding.CodePages.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Text.Encoding.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Text.Encoding.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.text.encodings.web\9.0.4\lib\net8.0\System.Text.Encodings.Web.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\system.text.json\9.0.4\lib\net8.0\System.Text.Json.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Text.RegularExpressions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Threading.AccessControl.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Channels.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Overlapped.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Tasks.Dataflow.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Tasks.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Tasks.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Tasks.Parallel.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Thread.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.ThreadPool.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Threading.Timer.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Transactions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Transactions.Local.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.ValueTuple.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Web.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Web.HttpUtility.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Controls.Ribbon.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Windows.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Forms.Design.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Forms.Design.Editors.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Forms.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Forms.Primitives.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Input.Manipulations.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Windows.Presentation.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\System.Xaml.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.Linq.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.ReaderWriter.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.Serialization.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.XDocument.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.XmlDocument.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.XmlSerializer.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.XPath.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\ref\net8.0\System.Xml.XPath.XDocument.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\torchsharp\0.105.0\lib\net6.0\TorchSharp.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.diagnostics.tracing.traceevent\3.1.13\lib\netstandard2.0\TraceReloggerLib.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\emoji.wpf\0.3.4\lib\netcoreapp3.1\Typography.GlyphLayout.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\emoji.wpf\0.3.4\lib\netcoreapp3.1\Typography.OpenFont.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\UIAutomationClient.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\UIAutomationClientSideProviders.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\UIAutomationProvider.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\UIAutomationTypes.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.core\4.1.3\lib\net8.0-windows7.0\Vanara.Core.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.dwmapi\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.DwmApi.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.gdi32\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.Gdi32.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.kernel32\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.Kernel32.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.ntdll\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.NtDll.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.shared\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.Shared.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.shcore\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.SHCore.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.pinvoke.user32\4.1.3\lib\net8.0-windows7.0\Vanara.PInvoke.User32.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\vanara.windows.extensions\4.1.3\lib\net8.0-windows7.0\Vanara.Windows.Extensions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\WindowsBase.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\ref\net8.0\WindowsFormsIntegration.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\microsoft.windows.sdk.net.ref\10.0.22621.54\lib\net8.0\WinRT.Runtime.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\wpf-ui.abstractions\4.0.2\lib\net8.0\Wpf.Ui.Abstractions.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\wpf-ui.dependencyinjection\4.0.2\lib\net8.0\Wpf.Ui.DependencyInjection.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\wpf-ui\4.0.2\lib\net8.0-windows7.0\Wpf.Ui.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\wpf-ui.tray\4.0.2\lib\net8.0-windows7.0\Wpf.Ui.Tray.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\wpf-ui.violeta\4.0.2.3\lib\net8.0-windows7.0\Wpf.Ui.Violeta.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\yamldotnet\16.3.0\lib\net8.0\YamlDotNet.dll" />
|
||||
<ReferencePath Include="E:\HuiSomething\NugetPackages\yolosharp\6.0.3\lib\net8.0\YoloSharp.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\CaptureTestWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\MainWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\MaskWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\CommonSettingsPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\HomePage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\HotkeyPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\JsListPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\KeyBindingsSettingsPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\KeyMouseRecordPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\MacroSettingsPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\MapPathingPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\NotificationSettingsPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragonFlowPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\CraftPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\DailyCommissionPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\DailyRewardPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\DomainPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\ForgingPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\LeyLineBlossomPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\MailPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\SereniteaPotPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\OneDragon\TcgPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\ScriptControlPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\TaskSettingsPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\TriggerSettingsPage.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\View\HardwareAccelerationView.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\View\PathingConfigView.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Pages\View\ScriptGroupConfigView.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\PickerWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\AboutWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\CheckUpdateWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\Editable\ScriptGroupProjectEditor.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\JsonMonoDialog.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\KeyBindingsWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\MapPathingDevWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\MapViewer.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\OcrDialog.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\PromptDialog.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\ScriptRepoWindow.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\View\Windows\WelcomeDialog.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\App.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\BetterGI_Content.g.cs" />
|
||||
<Compile Include="D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\obj\x64\Debug\net8.0-windows10.0.22621.0\GeneratedInternalTypeHelper.g.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Analyzer Include="C:\Users\huiyadanli\.dotnet\sdk\9.0.100\Sdks\Microsoft.NET.Sdk\targets\..\analyzers\Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll" />
|
||||
<Analyzer Include="C:\Users\huiyadanli\.dotnet\sdk\9.0.100\Sdks\Microsoft.NET.Sdk\targets\..\analyzers\Microsoft.CodeAnalysis.NetAnalyzers.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\communitytoolkit.mvvm\8.2.2\analyzers\dotnet\roslyn4.3\cs\CommunityToolkit.Mvvm.CodeFixers.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\communitytoolkit.mvvm\8.2.2\analyzers\dotnet\roslyn4.3\cs\CommunityToolkit.Mvvm.SourceGenerators.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.extensions.logging.abstractions\9.0.4\analyzers\dotnet\roslyn4.4\cs\Microsoft.Extensions.Logging.Generators.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.extensions.options\9.0.4\analyzers\dotnet\roslyn4.4\cs\Microsoft.Extensions.Options.SourceGeneration.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\system.text.json\9.0.4\analyzers\dotnet\roslyn4.4\cs\System.Text.Json.SourceGeneration.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.netcore.app.ref\8.0.11\analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\analyzers/dotnet/System.Windows.Forms.Analyzers.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.windowsdesktop.app.ref\8.0.11\analyzers/dotnet/cs/System.Windows.Forms.Analyzers.CSharp.dll" />
|
||||
<Analyzer Include="E:\HuiSomething\NugetPackages\microsoft.windows.sdk.net.ref\10.0.22621.54\analyzers/dotnet/cs/WinRT.SourceGenerator.dll" />
|
||||
</ItemGroup>
|
||||
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
using BetterGenshinImpact.GameTask;
|
||||
using BetterGenshinImpact.GameTask;
|
||||
using BetterGenshinImpact.GameTask.AutoCook;
|
||||
using BetterGenshinImpact.GameTask.AutoDomain;
|
||||
using BetterGenshinImpact.GameTask.AutoFight;
|
||||
@@ -22,6 +22,9 @@ using BetterGenshinImpact.GameTask.AutoArtifactSalvage;
|
||||
using BetterGenshinImpact.GameTask.AutoStygianOnslaught;
|
||||
using BetterGenshinImpact.GameTask.GetGridIcons;
|
||||
using BetterGenshinImpact.GameTask.AutoEat;
|
||||
using BetterGenshinImpact.GameTask.AutoLeyLineOutcrop;
|
||||
using BetterGenshinImpact.GameTask.MapMask;
|
||||
using BetterGenshinImpact.GameTask.SkillCd;
|
||||
using BetterGenshinImpact.GameTask.UseRedeemCode;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Config;
|
||||
@@ -171,7 +174,22 @@ public partial class AllConfig : ObservableObject
|
||||
/// 自动吃药配置
|
||||
/// </summary>
|
||||
public AutoEatConfig AutoEatConfig { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 自动地脉花配置
|
||||
/// </summary>
|
||||
public AutoLeyLineOutcropConfig AutoLeyLineOutcropConfig { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 地图遮罩
|
||||
/// </summary>
|
||||
public MapMaskConfig MapMaskConfig { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 技能 CD 提示
|
||||
/// </summary>
|
||||
public SkillCdConfig SkillCdConfig { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 自动使用
|
||||
/// </summary>
|
||||
@@ -261,12 +279,15 @@ public partial class AllConfig : ObservableObject
|
||||
AutoArtifactSalvageConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
AutoRedeemCodeConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
AutoEatConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
AutoLeyLineOutcropConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
MapMaskConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
AutoMusicGameConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
TpConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
ScriptConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
PathingConditionConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
DevConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
HardwareAccelerationConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
SkillCdConfig.PropertyChanged += OnAnyPropertyChanged;
|
||||
}
|
||||
|
||||
public void OnAnyPropertyChanged(object? sender, EventArgs args)
|
||||
@@ -279,4 +300,4 @@ public partial class AllConfig : ObservableObject
|
||||
{
|
||||
NotificationService.Instance().RefreshNotifiers();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using System;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Config;
|
||||
@@ -44,4 +44,7 @@ public partial class GenshinStartConfig : ObservableObject
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private bool _recordGameTimeEnabled = false;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _startGameWithCmd = false;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using BetterGenshinImpact.Model;
|
||||
using BetterGenshinImpact.Model;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using System;
|
||||
|
||||
@@ -100,6 +100,13 @@ public partial class HotKeyConfig : ObservableObject
|
||||
|
||||
[ObservableProperty]
|
||||
private string _quickTeleportTickHotkeyType = HotKeyTypeEnum.KeyboardMonitor.ToString();
|
||||
|
||||
// 技能CD提示开关
|
||||
[ObservableProperty]
|
||||
private string _skillCdEnabledHotkey = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private string _skillCdEnabledHotkeyType = HotKeyTypeEnum.KeyboardMonitor.ToString();
|
||||
|
||||
// 截图
|
||||
[ObservableProperty]
|
||||
@@ -237,4 +244,11 @@ public partial class HotKeyConfig : ObservableObject
|
||||
|
||||
[ObservableProperty]
|
||||
private string _onedragonHotkeyType = HotKeyTypeEnum.KeyboardMonitor.ToString();
|
||||
|
||||
// 地图遮罩开关
|
||||
[ObservableProperty]
|
||||
private string _mapMaskEnabledHotkey = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private string _mapMaskEnabledHotkeyType = HotKeyTypeEnum.KeyboardMonitor.ToString();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using OpenCvSharp;
|
||||
using System;
|
||||
|
||||
@@ -75,4 +75,31 @@ public partial class MaskWindowConfig : ObservableObject
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private double _textOpacity = 1.0;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _overlayLayoutEditEnabled = false;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _logTextBoxLeftRatio = 20.0 / 1920;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _logTextBoxTopRatio = 822.0 / 1080;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _logTextBoxWidthRatio = 480.0 / 1920;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _logTextBoxHeightRatio = 188.0 / 1080;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _statusListLeftRatio = 20.0 / 1920;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _statusListTopRatio = 790.0 / 1080;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _statusListWidthRatio = 480.0 / 1920;
|
||||
|
||||
[ObservableProperty]
|
||||
private double _statusListHeightRatio = 24.0 / 1080;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using BetterGenshinImpact.GameTask;
|
||||
using BetterGenshinImpact.GameTask.AutoLeyLineOutcrop;
|
||||
using BetterGenshinImpact.Helpers;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
@@ -61,6 +62,87 @@ public partial class OneDragonFlowConfig : ObservableObject
|
||||
[ObservableProperty]
|
||||
private List<string> _secretTreasureObjects = new();
|
||||
|
||||
// 地脉花一条龙模式(跳过部分准备流程)
|
||||
[ObservableProperty]
|
||||
private bool _leyLineOneDragonMode = false;
|
||||
|
||||
// 地脉花运行日期设置
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunMonday = true;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunTuesday = true;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunWednesday = true;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunThursday = true;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunFriday = true;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunSaturday = true;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool _leyLineRunSunday = true;
|
||||
|
||||
// 地脉花每日类型与国家配置(为空则使用独立任务配置)
|
||||
[ObservableProperty]
|
||||
private string _leyLineMondayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineMondayCountry = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineTuesdayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineTuesdayCountry = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineWednesdayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineWednesdayCountry = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineThursdayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineThursdayCountry = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineFridayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineFridayCountry = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineSaturdayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineSaturdayCountry = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineSundayType = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _leyLineSundayCountry = string.Empty;
|
||||
|
||||
// 地脉花刷取次数(0 表示使用独立任务配置)
|
||||
[ObservableProperty]
|
||||
private int _leyLineRunCount = 0;
|
||||
|
||||
// 地脉花树脂耗尽模式
|
||||
[ObservableProperty]
|
||||
private bool _leyLineResinExhaustionMode = false;
|
||||
|
||||
// 地脉花刷取次数取小值(仅耗尽模式生效)
|
||||
[ObservableProperty]
|
||||
private bool _leyLineOpenModeCountMin = false;
|
||||
|
||||
#region 每周秘境配置
|
||||
|
||||
//周一
|
||||
@@ -142,5 +224,62 @@ public partial class OneDragonFlowConfig : ObservableObject
|
||||
}
|
||||
}
|
||||
|
||||
public bool ShouldRunLeyLineToday()
|
||||
{
|
||||
if (!LeyLineRunMonday
|
||||
&& !LeyLineRunTuesday
|
||||
&& !LeyLineRunWednesday
|
||||
&& !LeyLineRunThursday
|
||||
&& !LeyLineRunFriday
|
||||
&& !LeyLineRunSaturday
|
||||
&& !LeyLineRunSunday)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var serverTime = ServerTimeHelper.GetServerTimeNow();
|
||||
var dayOfWeek = (serverTime.Hour >= 4 ? serverTime : serverTime.AddDays(-1)).DayOfWeek;
|
||||
return dayOfWeek switch
|
||||
{
|
||||
DayOfWeek.Monday => LeyLineRunMonday,
|
||||
DayOfWeek.Tuesday => LeyLineRunTuesday,
|
||||
DayOfWeek.Wednesday => LeyLineRunWednesday,
|
||||
DayOfWeek.Thursday => LeyLineRunThursday,
|
||||
DayOfWeek.Friday => LeyLineRunFriday,
|
||||
DayOfWeek.Saturday => LeyLineRunSaturday,
|
||||
DayOfWeek.Sunday => LeyLineRunSunday,
|
||||
_ => true
|
||||
};
|
||||
}
|
||||
|
||||
public (string type, string country) GetLeyLineConfigForToday(AutoLeyLineOutcropConfig fallback)
|
||||
{
|
||||
var serverTime = ServerTimeHelper.GetServerTimeNow();
|
||||
var dayOfWeek = (serverTime.Hour >= 4 ? serverTime : serverTime.AddDays(-1)).DayOfWeek;
|
||||
var (type, country) = dayOfWeek switch
|
||||
{
|
||||
DayOfWeek.Monday => (LeyLineMondayType, LeyLineMondayCountry),
|
||||
DayOfWeek.Tuesday => (LeyLineTuesdayType, LeyLineTuesdayCountry),
|
||||
DayOfWeek.Wednesday => (LeyLineWednesdayType, LeyLineWednesdayCountry),
|
||||
DayOfWeek.Thursday => (LeyLineThursdayType, LeyLineThursdayCountry),
|
||||
DayOfWeek.Friday => (LeyLineFridayType, LeyLineFridayCountry),
|
||||
DayOfWeek.Saturday => (LeyLineSaturdayType, LeyLineSaturdayCountry),
|
||||
DayOfWeek.Sunday => (LeyLineSundayType, LeyLineSundayCountry),
|
||||
_ => (string.Empty, string.Empty)
|
||||
};
|
||||
|
||||
if (string.IsNullOrWhiteSpace(type))
|
||||
{
|
||||
type = fallback.LeyLineOutcropType;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(country))
|
||||
{
|
||||
country = fallback.Country;
|
||||
}
|
||||
|
||||
return (type, country);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using BetterGenshinImpact.Core.Recognition;
|
||||
using BetterGenshinImpact.Model;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
@@ -121,4 +121,4 @@ public partial class OtherConfig : ObservableObject
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private string _uiCultureInfoName = "zh-Hans";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,4 +47,7 @@ public partial class ScriptConfig : ObservableObject
|
||||
|
||||
// 仓库页面是否最大化
|
||||
[ObservableProperty] private WindowState _webviewState = WindowState.Normal;
|
||||
|
||||
// 仓库新手教程是否已阅读
|
||||
[ObservableProperty] private bool _guideStatus = false;
|
||||
}
|
||||
|
||||
@@ -11,10 +11,13 @@ using System.Windows.Forms;
|
||||
using Vanara.PInvoke;
|
||||
using Timer = System.Timers.Timer;
|
||||
|
||||
// Wine 平台适配
|
||||
using BetterGenshinImpact.Platform.Wine;
|
||||
namespace BetterGenshinImpact.Core.Monitor;
|
||||
|
||||
public class MouseKeyMonitor
|
||||
public partial class MouseKeyMonitor
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 长按F变F连发
|
||||
/// </summary>
|
||||
@@ -68,12 +71,15 @@ public class MouseKeyMonitor
|
||||
_hWnd = gameHandle;
|
||||
// Note: for the application hook, use the Hook.AppEvents() instead
|
||||
|
||||
GlobalHook.KeyDown += GlobalHookKeyDown;
|
||||
GlobalHook.KeyUp += GlobalHookKeyUp;
|
||||
GlobalHook.MouseDownExt += GlobalHookMouseDownExt;
|
||||
GlobalHook.MouseUpExt += GlobalHookMouseUpExt;
|
||||
GlobalHook.MouseMoveExt += GlobalHookMouseMoveExt;
|
||||
GlobalHook.MouseWheelExt += GlobalHookMouseWheelExt;
|
||||
if (!WinePlatformAddon.IsRunningOnWine) {
|
||||
GlobalHook.KeyDown += GlobalHookKeyDown;
|
||||
GlobalHook.KeyUp += GlobalHookKeyUp;
|
||||
GlobalHook.MouseDownExt += GlobalHookMouseDownExt;
|
||||
GlobalHook.MouseUpExt += GlobalHookMouseUpExt;
|
||||
GlobalHook.MouseMoveExt += GlobalHookMouseMoveExt;
|
||||
GlobalHook.MouseWheelExt += GlobalHookMouseWheelExt;
|
||||
}
|
||||
TrySubscribeWinePolling();
|
||||
//_globalHook.KeyPress += GlobalHookKeyPress;
|
||||
|
||||
_pickUpKey = TaskContext.Instance().Config.KeyBindingsConfig.PickUpOrInteract.ToWinFormKeys();
|
||||
@@ -208,7 +214,7 @@ public class MouseKeyMonitor
|
||||
|
||||
public void Unsubscribe()
|
||||
{
|
||||
if (_globalHook != null)
|
||||
if (_globalHook != null && !WinePlatformAddon.IsRunningOnWine)
|
||||
{
|
||||
_globalHook.KeyDown -= GlobalHookKeyDown;
|
||||
_globalHook.KeyUp -= GlobalHookKeyUp;
|
||||
@@ -220,5 +226,8 @@ public class MouseKeyMonitor
|
||||
_globalHook.Dispose();
|
||||
_globalHook = null;
|
||||
}
|
||||
if (WinePlatformAddon.IsRunningOnWine){
|
||||
DisposeWineAddon();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,21 +95,33 @@ public class Rec(
|
||||
// .AsParallel()
|
||||
.Select(src =>
|
||||
{
|
||||
using var channel3 = src.Channels() switch
|
||||
Mat? channel3 = default;
|
||||
try
|
||||
{
|
||||
4 => src.CvtColor(ColorConversionCodes.BGRA2BGR),
|
||||
1 => src.CvtColor(ColorConversionCodes.GRAY2BGR),
|
||||
3 => src,
|
||||
var x => throw new Exception($"Unexpect src channel: {x}, allow: (1/3/4)")
|
||||
};
|
||||
var result = OcrUtils.ResizeNormImg(channel3, new OcrShape(3, maxWidth, modelHeight),
|
||||
out var owner);
|
||||
lock (owners)
|
||||
{
|
||||
owners.Add(owner);
|
||||
}
|
||||
channel3 = src.Channels() switch
|
||||
{
|
||||
4 => src.CvtColor(ColorConversionCodes.BGRA2BGR),
|
||||
1 => src.CvtColor(ColorConversionCodes.GRAY2BGR),
|
||||
3 => src,
|
||||
var x => throw new Exception($"Unexpect src channel: {x}, allow: (1/3/4)")
|
||||
};
|
||||
var result = OcrUtils.ResizeNormImg(channel3, new OcrShape(3, maxWidth, modelHeight),
|
||||
out var owner);
|
||||
lock (owners)
|
||||
{
|
||||
owners.Add(owner);
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Only dispose Mats created in this scope
|
||||
if (channel3 != null && !ReferenceEquals(channel3, src))
|
||||
{
|
||||
channel3.Dispose();
|
||||
}
|
||||
}
|
||||
})
|
||||
.Select(inputTensor =>
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using BetterGenshinImpact.Core.Recognition.OpenCv.Model;
|
||||
using BetterGenshinImpact.Core.Recognition.OpenCv.Model;
|
||||
using OpenCvSharp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -81,6 +81,79 @@ public class KeyPointFeatureBlockHelper
|
||||
return (cellRow, cellCol);
|
||||
}
|
||||
|
||||
public static (int RowStart, int RowEnd, int ColStart, int ColEnd) GetCellRange(Size originalImage, int rows, int cols, Rect rect)
|
||||
{
|
||||
int cellWidth = originalImage.Width / cols;
|
||||
int cellHeight = originalImage.Height / rows;
|
||||
|
||||
var rowStart = (int)(rect.Y / cellHeight);
|
||||
var rowEnd = (int)((rect.Y + rect.Height) / cellHeight);
|
||||
var colStart = (int)(rect.X / cellWidth);
|
||||
var colEnd = (int)((rect.X + rect.Width) / cellWidth);
|
||||
|
||||
rowStart = Math.Max(0, Math.Min(rowStart, rows - 1));
|
||||
rowEnd = Math.Max(0, Math.Min(rowEnd, rows - 1));
|
||||
colStart = Math.Max(0, Math.Min(colStart, cols - 1));
|
||||
colEnd = Math.Max(0, Math.Min(colEnd, cols - 1));
|
||||
|
||||
if (rowEnd < rowStart)
|
||||
{
|
||||
rowEnd = rowStart;
|
||||
}
|
||||
|
||||
if (colEnd < colStart)
|
||||
{
|
||||
colEnd = colStart;
|
||||
}
|
||||
|
||||
return (rowStart, rowEnd, colStart, colEnd);
|
||||
}
|
||||
|
||||
public static KeyPointFeatureBlock MergeFeaturesInRange(KeyPointFeatureBlock[][] splitKeyPoints, Mat matches, int rowStart, int rowEnd, int colStart, int colEnd)
|
||||
{
|
||||
var rows = splitKeyPoints.Length;
|
||||
if (rows == 0)
|
||||
{
|
||||
return new KeyPointFeatureBlock();
|
||||
}
|
||||
|
||||
var cols = splitKeyPoints[0].Length;
|
||||
|
||||
rowStart = Math.Max(0, Math.Min(rowStart, rows - 1));
|
||||
rowEnd = Math.Max(0, Math.Min(rowEnd, rows - 1));
|
||||
colStart = Math.Max(0, Math.Min(colStart, cols - 1));
|
||||
colEnd = Math.Max(0, Math.Min(colEnd, cols - 1));
|
||||
|
||||
var matchesCols = matches.Cols;
|
||||
var neighboringKeyPoints = new List<KeyPoint>();
|
||||
var neighboringKeyPointIndices = new List<int>();
|
||||
|
||||
for (int i = rowStart; i <= rowEnd; i++)
|
||||
{
|
||||
for (int j = colStart; j <= colEnd; j++)
|
||||
{
|
||||
if (splitKeyPoints[i][j] != null)
|
||||
{
|
||||
neighboringKeyPoints.AddRange(splitKeyPoints[i][j].KeyPointList);
|
||||
neighboringKeyPointIndices.AddRange(splitKeyPoints[i][j].KeyPointIndexList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var mergedKeyPointBlock = new KeyPointFeatureBlock
|
||||
{
|
||||
MergedCenterCellCol = (colStart + colEnd) / 2,
|
||||
MergedCenterCellRow = (rowStart + rowEnd) / 2,
|
||||
KeyPointList = neighboringKeyPoints,
|
||||
KeyPointIndexList = neighboringKeyPointIndices
|
||||
};
|
||||
|
||||
mergedKeyPointBlock.Descriptor = new Mat(mergedKeyPointBlock.KeyPointIndexList.Count, matchesCols, MatType.CV_32FC1);
|
||||
InitBlockMat(mergedKeyPointBlock.KeyPointIndexList, mergedKeyPointBlock.Descriptor, matches);
|
||||
|
||||
return mergedKeyPointBlock;
|
||||
}
|
||||
|
||||
public static KeyPointFeatureBlock MergeNeighboringFeatures(KeyPointFeatureBlock[][] splitKeyPoints, Mat matches, int cellRow, int cellCol)
|
||||
{
|
||||
var matchesCols = matches.Cols; // SURF 64 SIFT 128
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using OpenCvSharp;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Recognition.OpenCv;
|
||||
|
||||
public class TemplateMatchStabilityDetector : IDisposable
|
||||
{
|
||||
private Mat previousFrame;
|
||||
private readonly double similarityThreshold = 0.98; // 相似度阈值(0-1)
|
||||
private readonly int stableFrameCount = 2;
|
||||
private int currentStableCount = 0;
|
||||
private double lastSimilarity = 0;
|
||||
|
||||
public bool IsStable(Mat currentFrame)
|
||||
{
|
||||
Mat processed = PreprocessFrame(currentFrame);
|
||||
|
||||
if (previousFrame == null)
|
||||
{
|
||||
previousFrame = processed;
|
||||
return false;
|
||||
}
|
||||
|
||||
// 使用归一化相关系数进行匹配
|
||||
double similarity = ComputeSimilarity(previousFrame, processed);
|
||||
lastSimilarity = similarity;
|
||||
|
||||
Debug.WriteLine("Similarity: " + similarity);
|
||||
if (similarity >= similarityThreshold)
|
||||
{
|
||||
currentStableCount++;
|
||||
if (currentStableCount >= stableFrameCount)
|
||||
{
|
||||
previousFrame?.Dispose();
|
||||
previousFrame = processed;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
processed.Dispose();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
currentStableCount = 0;
|
||||
previousFrame?.Dispose();
|
||||
previousFrame = processed;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Mat PreprocessFrame(Mat frame)
|
||||
{
|
||||
Mat small = new Mat();
|
||||
|
||||
// 降采样加速
|
||||
Cv2.Resize(frame, small, new Size(320, 180), 0, 0, InterpolationFlags.Area);
|
||||
|
||||
return small;
|
||||
}
|
||||
|
||||
private double ComputeSimilarity(Mat template, Mat image)
|
||||
{
|
||||
// 确保两帧大小相同
|
||||
if (template.Size() != image.Size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 使用归一化相关系数匹配
|
||||
Mat result = new Mat();
|
||||
Cv2.MatchTemplate(image, template, result, TemplateMatchModes.CCoeffNormed);
|
||||
|
||||
// 获取匹配结果(只有一个值)
|
||||
double minVal, maxVal;
|
||||
Point minLoc, maxLoc;
|
||||
Cv2.MinMaxLoc(result, out minVal, out maxVal, out minLoc, out maxLoc);
|
||||
|
||||
result.Dispose();
|
||||
|
||||
return maxVal; // 返回相关系数(-1 到 1,1 表示完全相同)
|
||||
}
|
||||
|
||||
public double GetLastSimilarity()
|
||||
{
|
||||
return lastSimilarity;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
currentStableCount = 0;
|
||||
previousFrame?.Dispose();
|
||||
previousFrame = null;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
previousFrame?.Dispose();
|
||||
previousFrame = null;
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
}
|
||||
@@ -182,7 +182,7 @@ public class Genshin
|
||||
/// 获取当前在大地图上的位置坐标
|
||||
/// </summary>
|
||||
/// <returns>包含X和Y坐标的Point2f结构体</returns>
|
||||
public Point2f GetPositionFromBigMap()
|
||||
public Point2f? GetPositionFromBigMap()
|
||||
{
|
||||
TpTask tpTask = new TpTask(CancellationContext.Instance.Cts.Token);
|
||||
return tpTask.GetPositionFromBigMap(MapTypes.Teyvat.ToString());
|
||||
@@ -193,7 +193,7 @@ public class Genshin
|
||||
/// </summary>
|
||||
/// <param name="mapName">大地图名称</param>
|
||||
/// <returns>包含X和Y坐标的Point2f结构体</returns>
|
||||
public Point2f GetPositionFromBigMap(string mapName)
|
||||
public Point2f? GetPositionFromBigMap(string mapName)
|
||||
{
|
||||
TpTask tpTask = new TpTask(CancellationContext.Instance.Cts.Token);
|
||||
return tpTask.GetPositionFromBigMap(mapName);
|
||||
@@ -203,7 +203,7 @@ public class Genshin
|
||||
/// 获取当前在小地图上的位置坐标
|
||||
/// </summary>
|
||||
/// <returns>包含X和Y坐标的Point2f结构体</returns>
|
||||
public Point2f GetPositionFromMap()
|
||||
public Point2f? GetPositionFromMap()
|
||||
{
|
||||
return GetPositionFromMap(MapTypes.Teyvat.ToString());
|
||||
}
|
||||
@@ -220,7 +220,7 @@ public class Genshin
|
||||
/// <param name="mapName">大地图名称</param>
|
||||
/// <param name="cacheTimeMs">缓存时间,单位毫秒,默认900ms</param>
|
||||
/// <returns>包含X和Y坐标的Point2f结构体</returns>
|
||||
public Point2f GetPositionFromMap(string mapName, int cacheTimeMs = 900)
|
||||
public Point2f? GetPositionFromMap(string mapName, int cacheTimeMs = 900)
|
||||
{
|
||||
var imageRegion = CaptureToRectArea();
|
||||
if (!Bv.IsInMainUi(imageRegion))
|
||||
@@ -241,7 +241,7 @@ public class Genshin
|
||||
/// <param name="x">世界坐标x</param>
|
||||
/// <param name="y">世界坐标y</param>
|
||||
/// <returns>包含X和Y坐标的Point2f结构体</returns>
|
||||
public Point2f GetPositionFromMap(string mapName, float x, float y)
|
||||
public Point2f? GetPositionFromMap(string mapName, float x, float y)
|
||||
{
|
||||
var imageRegion = CaptureToRectArea();
|
||||
if (!Bv.IsInMainUi(imageRegion))
|
||||
@@ -377,6 +377,15 @@ public class Genshin
|
||||
{
|
||||
await new ExitAndReloginJob().Start(CancellationContext.Instance.Cts.Token);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进出千星奇域
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task WonderlandCycle()
|
||||
{
|
||||
await new EnterAndExitWonderlandJob().Start(CancellationContext.Instance.Cts.Token);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 调整时间
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BetterGenshinImpact.Core.Simulator;
|
||||
using BetterGenshinImpact.Core.Config;
|
||||
using BetterGenshinImpact.Core.Simulator;
|
||||
using BetterGenshinImpact.GameTask;
|
||||
using BetterGenshinImpact.GameTask.Model.Area;
|
||||
using BetterGenshinImpact.Helpers;
|
||||
@@ -23,6 +24,11 @@ public class GlobalMethod
|
||||
{
|
||||
await Task.Delay(millisecondsTimeout, CancellationContext.Instance.Cts.Token);
|
||||
}
|
||||
|
||||
public static string GetVersion()
|
||||
{
|
||||
return Global.Version;
|
||||
}
|
||||
|
||||
#region 键盘操作
|
||||
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using BetterGenshinImpact.Core.Monitor;
|
||||
using BetterGenshinImpact.GameTask;
|
||||
using Gma.System.MouseKeyHook;
|
||||
using Microsoft.ClearScript;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@@ -39,219 +42,332 @@ public class KeyMouseHook: IDisposable
|
||||
private EventHandler<MouseEventExtArgs>? _mouseMoveExtHandler;
|
||||
private EventHandler<MouseEventExtArgs>? _mouseWheelExtHandler;
|
||||
|
||||
private readonly object _mouseMoveLock = new();
|
||||
private DateTime _lastProcessMouseMoveTime = DateTime.MinValue;
|
||||
|
||||
private readonly ILogger<KeyMouseHook> _logger = App.GetLogger<KeyMouseHook>();
|
||||
|
||||
/// <summary>
|
||||
/// 统一处理回调函数执行过程中的异常
|
||||
/// </summary>
|
||||
/// <param name="ex">捕获到的异常</param>
|
||||
/// <param name="eventType">事件类型描述</param>
|
||||
private void HandleCallbackException(Exception ex, string eventType)
|
||||
{
|
||||
if (ex is ScriptEngineException scriptEx)
|
||||
{
|
||||
_logger.LogError("执行{eventType}JS回调时发生错误:{scriptEx.Message},清除所有回调",eventType, scriptEx.Message);
|
||||
_logger.LogDebug("{scriptEx}",scriptEx);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogError("执行{eventType}回调时发生错误:{ex.Message},清除所有回调,如果此异常出现在JS脚本结束时,请在JS脚本结束前手动调用Dispose()方法",eventType,ex.Message);
|
||||
_logger.LogDebug("{ex}",ex);
|
||||
}
|
||||
|
||||
Dispose();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将全局屏幕坐标转换为游戏窗口局部坐标
|
||||
/// </summary>
|
||||
/// <param name="globalX">全局X坐标</param>
|
||||
/// <param name="globalY">全局Y坐标</param>
|
||||
/// <returns>游戏窗口局部坐标(X, Y),转换失败时返回(-1, -1)</returns>
|
||||
private (int X, int Y) ConvertToLocalCoordinates(int globalX, int globalY)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 检查TaskContext是否已初始化
|
||||
if (!TaskContext.Instance().IsInitialized)
|
||||
{
|
||||
_logger.LogError("TaskContext未初始化,无法获取游戏窗口信息");
|
||||
return (-1, -1);
|
||||
}
|
||||
|
||||
var gameHandle = TaskContext.Instance().GameHandle;
|
||||
if (gameHandle == IntPtr.Zero)
|
||||
{
|
||||
_logger.LogError("游戏窗口句柄无效,无法获取游戏窗口位置");
|
||||
return (-1, -1);
|
||||
}
|
||||
|
||||
// 获取游戏窗口捕获区域
|
||||
var captureRect = SystemControl.GetCaptureRect(gameHandle);
|
||||
|
||||
// 检查捕获区域是否有效
|
||||
if (captureRect.Width <= 0 || captureRect.Height <= 0)
|
||||
{
|
||||
_logger.LogError("获取的游戏窗口捕获区域无效,宽度或高度为0");
|
||||
return (-1, -1);
|
||||
}
|
||||
|
||||
// 计算局部坐标
|
||||
int localX = globalX - captureRect.Left;
|
||||
int localY = globalY - captureRect.Top;
|
||||
|
||||
return (localX, localY);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "转换鼠标坐标时发生错误");
|
||||
return (-1, -1);
|
||||
}
|
||||
}
|
||||
|
||||
private readonly System.Threading.Channels.Channel<Action> _eventChannel =
|
||||
System.Threading.Channels.Channel.CreateBounded<Action>(
|
||||
new System.Threading.Channels.BoundedChannelOptions(2048)
|
||||
{
|
||||
FullMode = System.Threading.Channels.BoundedChannelFullMode.Wait,
|
||||
SingleReader = true,
|
||||
SingleWriter = false
|
||||
});
|
||||
private readonly CancellationTokenSource _cts = new();
|
||||
|
||||
public KeyMouseHook()
|
||||
{
|
||||
// 启动后台事件处理器,确保不阻塞钩子线程
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var reader = _eventChannel.Reader;
|
||||
while (await reader.WaitToReadAsync(_cts.Token))
|
||||
{
|
||||
while (reader.TryRead(out var action))
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 内部错误已在 action 闭包中通过 HandleCallbackException 处理
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException) { }
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "键鼠钩子后台处理器发生异常");
|
||||
}
|
||||
});
|
||||
|
||||
// 初始化事件处理程序
|
||||
_keyDownHandler = (_, args) =>
|
||||
{
|
||||
// 创建回调列表的副本,避免迭代期间修改集合导致异常
|
||||
if (_keyDownDataCallbacks.Count == 0 && _keyDownCodeCallbacks.Count == 0) return;
|
||||
|
||||
var keyDownDataCallbacksCopy = new List<ScriptObject>(_keyDownDataCallbacks);
|
||||
var keyDownCodeCallbacksCopy = new List<ScriptObject>(_keyDownCodeCallbacks);
|
||||
|
||||
// 调用KeyData回调
|
||||
foreach (var callback in keyDownDataCallbacksCopy)
|
||||
{
|
||||
try
|
||||
var keyDataStr = args.KeyData.ToString();
|
||||
var keyCodeStr = args.KeyCode.ToString();
|
||||
|
||||
if (!_eventChannel.Writer.TryWrite(() =>
|
||||
{
|
||||
callback.InvokeAsFunction(args.KeyData.ToString());
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行键盘按下事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
}
|
||||
|
||||
// 调用KeyCode回调
|
||||
foreach (var callback in keyDownCodeCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(args.KeyCode.ToString());
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行键盘按下事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
// 调用KeyData回调
|
||||
foreach (var callback in keyDownDataCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(keyDataStr);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "键盘按下事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 调用KeyCode回调
|
||||
foreach (var callback in keyDownCodeCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(keyCodeStr);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "键盘按下事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}))
|
||||
{
|
||||
_logger.LogWarning("事件队列已满或已关闭,忽略键盘按下回调");
|
||||
}
|
||||
};
|
||||
|
||||
_keyUpHandler = (_, args) =>
|
||||
{
|
||||
// 创建回调列表的副本,避免迭代期间修改集合导致异常
|
||||
if (_keyUpDataCallbacks.Count == 0 && _keyUpCodeCallbacks.Count == 0) return;
|
||||
|
||||
var keyUpDataCallbacksCopy = new List<ScriptObject>(_keyUpDataCallbacks);
|
||||
var keyUpCodeCallbacksCopy = new List<ScriptObject>(_keyUpCodeCallbacks);
|
||||
|
||||
// 调用KeyData回调
|
||||
foreach (var callback in keyUpDataCallbacksCopy)
|
||||
{
|
||||
try
|
||||
var keyDataStr = args.KeyData.ToString();
|
||||
var keyCodeStr = args.KeyCode.ToString();
|
||||
if (!_eventChannel.Writer.TryWrite(() =>
|
||||
{
|
||||
callback.InvokeAsFunction(args.KeyData.ToString());
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行键盘释放事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
}
|
||||
|
||||
// 调用KeyCode回调
|
||||
foreach (var callback in keyUpCodeCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(args.KeyCode.ToString());
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行键盘释放事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
// 调用KeyData回调
|
||||
foreach (var callback in keyUpDataCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(keyDataStr);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "键盘释放事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 调用KeyCode回调
|
||||
foreach (var callback in keyUpCodeCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(keyCodeStr);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "键盘释放事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}))
|
||||
{
|
||||
_logger.LogWarning("事件队列已满或已关闭,忽略键盘释放回调");
|
||||
}
|
||||
};
|
||||
|
||||
_mouseDownExtHandler = (_, args) =>
|
||||
{
|
||||
// 创建回调列表的副本,避免迭代期间修改集合导致异常
|
||||
if (_mouseDownCallbacks.Count == 0) return;
|
||||
|
||||
var mouseDownCallbacksCopy = new List<ScriptObject>(_mouseDownCallbacks);
|
||||
|
||||
foreach (var callback in mouseDownCallbacksCopy)
|
||||
{
|
||||
try
|
||||
var (localX, localY) = ConvertToLocalCoordinates(args.X, args.Y);
|
||||
var buttonStr = args.Button.ToString();
|
||||
|
||||
if (!_eventChannel.Writer.TryWrite(() =>
|
||||
{
|
||||
callback.InvokeAsFunction(args.Button.ToString(), args.X, args.Y);
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行鼠标按下事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
foreach (var callback in mouseDownCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(buttonStr, localX, localY);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "鼠标按下事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}))
|
||||
{
|
||||
_logger.LogWarning("事件队列已满或已关闭,忽略鼠标按下回调");
|
||||
}
|
||||
};
|
||||
|
||||
_mouseUpExtHandler = (_, args) =>
|
||||
{
|
||||
// 创建回调列表的副本,避免迭代期间修改集合导致异常
|
||||
if (_mouseUpCallbacks.Count == 0) return;
|
||||
|
||||
var mouseUpCallbacksCopy = new List<ScriptObject>(_mouseUpCallbacks);
|
||||
|
||||
foreach (var callback in mouseUpCallbacksCopy)
|
||||
var (localX, localY) = ConvertToLocalCoordinates(args.X, args.Y);
|
||||
var buttonStr = args.Button.ToString();
|
||||
|
||||
if (!_eventChannel.Writer.TryWrite(() =>
|
||||
{
|
||||
foreach (var callback in mouseUpCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(buttonStr, localX, localY);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "鼠标释放事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}))
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(args.Button.ToString(), args.X, args.Y);
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行鼠标释放事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
_logger.LogWarning("事件队列已满或已关闭,忽略鼠标释放回调");
|
||||
}
|
||||
};
|
||||
|
||||
_mouseMoveExtHandler = (_, args) =>
|
||||
{
|
||||
if (_mouseMoveCallbacks.Count == 0) return;
|
||||
|
||||
var now = DateTime.Now;
|
||||
// 创建回调列表的副本,避免迭代期间修改集合导致异常
|
||||
if ((now - _lastProcessMouseMoveTime).TotalMilliseconds < 10) return;
|
||||
_lastProcessMouseMoveTime = now;
|
||||
|
||||
var mouseMoveCallbacksCopy = new List<ScriptObject>(_mouseMoveCallbacks);
|
||||
|
||||
foreach (var callback in mouseMoveCallbacksCopy)
|
||||
{
|
||||
try
|
||||
var (localX, localY) = ConvertToLocalCoordinates(args.X, args.Y);
|
||||
|
||||
if (!_eventChannel.Writer.TryWrite(() =>
|
||||
{
|
||||
// 获取回调的间隔时间
|
||||
if (_mouseMoveCallbackIntervals.TryGetValue(callback, out var interval))
|
||||
foreach (var callback in mouseMoveCallbacksCopy)
|
||||
{
|
||||
// 获取上次调用时间
|
||||
if (_lastMouseMoveCallbackTimes.TryGetValue(callback, out var lastTime))
|
||||
|
||||
try
|
||||
{
|
||||
// 计算时间差
|
||||
var timeSpan = now - lastTime;
|
||||
// 如果时间差大于等于间隔时间,则执行回调
|
||||
if (timeSpan.TotalMilliseconds >= interval)
|
||||
lock (_mouseMoveLock)
|
||||
{
|
||||
callback.InvokeAsFunction(args.X, args.Y);
|
||||
// 更新上次调用时间
|
||||
_lastMouseMoveCallbackTimes[callback] = now;
|
||||
if (_mouseMoveCallbackIntervals.TryGetValue(callback, out var interval) &&
|
||||
_lastMouseMoveCallbackTimes.TryGetValue(callback, out var lastTime))
|
||||
{
|
||||
var timeSpan = now - lastTime;
|
||||
if (timeSpan.TotalMilliseconds >= interval)
|
||||
{
|
||||
callback.InvokeAsFunction(localX, localY);
|
||||
_lastMouseMoveCallbackTimes[callback] = now;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "鼠标移动事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行鼠标移动事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
}))
|
||||
{
|
||||
_logger.LogWarning("事件队列已满或已关闭,忽略鼠标移动回调");
|
||||
}
|
||||
};
|
||||
|
||||
_mouseWheelExtHandler = (_, args) =>
|
||||
{
|
||||
// 创建回调列表的副本,避免迭代期间修改集合导致异常
|
||||
if (_mouseWheelCallbacks.Count == 0) return;
|
||||
|
||||
var mouseWheelCallbacksCopy = new List<ScriptObject>(_mouseWheelCallbacks);
|
||||
|
||||
foreach (var callback in mouseWheelCallbacksCopy)
|
||||
var (localX, localY) = ConvertToLocalCoordinates(args.X, args.Y);
|
||||
var delta = args.Delta;
|
||||
|
||||
if (!_eventChannel.Writer.TryWrite(() =>
|
||||
{
|
||||
foreach (var callback in mouseWheelCallbacksCopy)
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(delta, localX, localY);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleCallbackException(ex, "鼠标滚轮事件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}))
|
||||
{
|
||||
try
|
||||
{
|
||||
callback.InvokeAsFunction(args.Delta, args.X, args.Y);
|
||||
}
|
||||
catch (InvalidOperationException ex) when (ex.Message.Contains("V8 object has been released"))
|
||||
{
|
||||
_logger.LogDebug("V8对象已释放,清除所有回调");
|
||||
RemoveAllListeners();
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "执行鼠标滚轮事件回调时发生错误");
|
||||
// 忽略单个回调执行异常,不影响其他回调
|
||||
}
|
||||
_logger.LogWarning("事件队列已满或已关闭,忽略鼠标滚轮回调");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -342,6 +458,8 @@ public class KeyMouseHook: IDisposable
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
_cts.Cancel();
|
||||
_eventChannel.Writer.TryComplete();
|
||||
// 移除所有事件监听器
|
||||
if (_keyDownHandler != null)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using BetterGenshinImpact.Core.Script.Dependence.Model.TimerConfig;
|
||||
using System;
|
||||
using BetterGenshinImpact.Core.Script.Dependence.Model.TimerConfig;
|
||||
using BetterGenshinImpact.GameTask.AutoSkip;
|
||||
using BetterGenshinImpact.Helpers;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Script.Dependence.Model;
|
||||
@@ -40,5 +42,16 @@ public class RealtimeTimer
|
||||
{
|
||||
Config = ScriptObjectConverter.ConvertTo<AutoPickExternalConfig>(config);
|
||||
}
|
||||
else if (Name == "AutoSkip")
|
||||
{
|
||||
if (config is AutoSkipConfig)
|
||||
{
|
||||
Config = config;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("AutoSkip的配置参数需要为AutoSkipConfig类型");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ using BetterGenshinImpact.Core.Script.Utils;
|
||||
using BetterGenshinImpact.GameTask.AutoDomain;
|
||||
using BetterGenshinImpact.GameTask.AutoFight;
|
||||
using BetterGenshinImpact.GameTask.AutoFight.Model;
|
||||
using BetterGenshinImpact.GameTask.AutoSkip;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Script;
|
||||
|
||||
@@ -35,12 +36,12 @@ public class EngineExtend
|
||||
engine.AddHostObject("file", new LimitedFile(workDir)); // 限制文件访问
|
||||
engine.AddHostObject("http", new Http()); // 限制文件访问
|
||||
engine.AddHostObject("notification", new Notification());
|
||||
engine.AddHostObject("keyMouseHook", new KeyMouseHook());
|
||||
|
||||
// 任务调度器
|
||||
engine.AddHostObject("dispatcher", new Dispatcher(config));
|
||||
engine.AddHostType("RealtimeTimer", typeof(RealtimeTimer));
|
||||
engine.AddHostType("SoloTask", typeof(SoloTask));
|
||||
engine.AddHostType("AutoSkipConfig", typeof(AutoSkipConfig));
|
||||
|
||||
// 添加取消令牌相关类型
|
||||
engine.AddHostType("CancellationTokenSource", typeof(CancellationTokenSource));
|
||||
@@ -71,8 +72,8 @@ public class EngineExtend
|
||||
|
||||
engine.AddHostType("AutoDomainParam", typeof(AutoDomainParam));
|
||||
engine.AddHostType("AutoFightParam", typeof(AutoFightParam));
|
||||
|
||||
|
||||
//鼠标回调
|
||||
engine.AddHostType("KeyMouseHook", typeof(KeyMouseHook));
|
||||
// 添加C#的类型
|
||||
engine.AddHostType(typeof(Task));
|
||||
|
||||
@@ -117,6 +118,7 @@ public class EngineExtend
|
||||
|
||||
#pragma warning disable CS8974 // Converting method group to non-delegate type
|
||||
engine.AddHostObject("sleep", GlobalMethod.Sleep);
|
||||
engine.AddHostObject("getVersion", GlobalMethod.GetVersion);
|
||||
engine.AddHostObject("keyDown", GlobalMethod.KeyDown);
|
||||
engine.AddHostObject("keyUp", GlobalMethod.KeyUp);
|
||||
engine.AddHostObject("keyPress", GlobalMethod.KeyPress);
|
||||
|
||||
@@ -216,6 +216,9 @@ public partial class ScriptGroupProject : ObservableObject
|
||||
}
|
||||
JsScriptSettingsObject ??= new ExpandoObject();
|
||||
|
||||
// 清理配置中的无效值
|
||||
CleanInvalidSettingsValues();
|
||||
|
||||
var pathingPartyConfig = GroupInfo?.Config.PathingConfig;
|
||||
await Project.ExecuteAsync(JsScriptSettingsObject, pathingPartyConfig);
|
||||
}
|
||||
@@ -336,6 +339,67 @@ public partial class ScriptGroupProject : ObservableObject
|
||||
{
|
||||
OnPropertyChanged(nameof(ScheduleDesc));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理 JsScriptSettingsObject 中不在 settings.json 定义的 Options 列表中的无效值
|
||||
/// </summary>
|
||||
private void CleanInvalidSettingsValues()
|
||||
{
|
||||
if (Project == null || JsScriptSettingsObject == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 加载 settings.json 中定义的配置项
|
||||
var settingItems = Project.Manifest.LoadSettingItems(Project.ProjectPath);
|
||||
if (settingItems.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var settingsDict = JsScriptSettingsObject as IDictionary<string, object?>;
|
||||
if (settingsDict == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 遍历所有 multi-checkbox 类型的配置项
|
||||
foreach (var item in settingItems.Where(i => i.Type == "multi-checkbox"))
|
||||
{
|
||||
if (!settingsDict.ContainsKey(item.Name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取当前保存的值
|
||||
var savedValue = settingsDict[item.Name];
|
||||
List<string>? checkedValues = null;
|
||||
|
||||
if (savedValue is List<string> stringList)
|
||||
{
|
||||
checkedValues = stringList;
|
||||
}
|
||||
else if (savedValue is List<object> objectList)
|
||||
{
|
||||
checkedValues = objectList.Select(i => (string)i).ToList();
|
||||
settingsDict[item.Name] = checkedValues;
|
||||
}
|
||||
|
||||
// 清理不在 Options 列表中的无效值
|
||||
if (checkedValues != null && item.Options != null)
|
||||
{
|
||||
checkedValues.RemoveAll(value => !item.Options.Contains(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 清理失败不影响脚本执行,只记录日志
|
||||
TaskControl.Logger.LogDebug(ex, "清理JS脚本配置中的无效值时发生异常");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ScriptGroupProjectExtensions
|
||||
|
||||
145
BetterGenshinImpact/Core/Script/PackageDocumentLoader.cs
Normal file
@@ -0,0 +1,145 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.ClearScript;
|
||||
using Microsoft.ClearScript.JavaScript;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Script
|
||||
{
|
||||
public class PackageDocumentLoader : DocumentLoader
|
||||
{
|
||||
private readonly string _scriptRootPath;
|
||||
|
||||
public PackageDocumentLoader(string scriptRootPath)
|
||||
{
|
||||
_scriptRootPath = Path.GetFullPath(scriptRootPath);
|
||||
}
|
||||
|
||||
public override async Task<Document> LoadDocumentAsync(DocumentSettings settings, DocumentInfo? sourceInfo, string specifier, DocumentCategory category, DocumentContextCallback contextCallback)
|
||||
{
|
||||
string? targetPath = ResolvePhysicalPath(settings, sourceInfo, specifier);
|
||||
|
||||
if (targetPath == null || !File.Exists(targetPath))
|
||||
{
|
||||
return await Default.LoadDocumentAsync(settings, sourceInfo, specifier, category, contextCallback);
|
||||
}
|
||||
|
||||
// 处理 JS 文件的重写
|
||||
if (Path.GetExtension(targetPath).ToLower() == ".js")
|
||||
{
|
||||
string content = await File.ReadAllTextAsync(targetPath);
|
||||
string processedCode = RewriteScriptCode(content, targetPath);
|
||||
return new StringDocument(new DocumentInfo(targetPath) { Category = ModuleCategory.Standard }, processedCode);
|
||||
}
|
||||
|
||||
return await Default.LoadDocumentAsync(settings, sourceInfo, specifier, category, contextCallback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// js重写
|
||||
/// </summary>
|
||||
public string RewriteScriptCode(string code, string currentFilePath)
|
||||
{
|
||||
if (string.IsNullOrEmpty(code)) return code;
|
||||
|
||||
string result = code.Replace("../../../packages", "packages");
|
||||
|
||||
// 拦截资源导入
|
||||
var resourceRegex = new Regex(@"import\s+([\w\d_*$]+|[\s\S]*?)\s+from\s+(['""])([^'""\n]+)(['""])");
|
||||
result = resourceRegex.Replace(result, match =>
|
||||
{
|
||||
string importPart = match.Groups[1].Value.Trim();
|
||||
string quote = match.Groups[2].Value;
|
||||
string rawPath = match.Groups[3].Value;
|
||||
|
||||
string path = rawPath.Replace("../../../packages", "packages");
|
||||
string? resourceFullPath = ResolvePathInternal(null, currentFilePath, path);
|
||||
|
||||
if (resourceFullPath != null && File.Exists(resourceFullPath))
|
||||
{
|
||||
string normalizedPath = Path.GetRelativePath(_scriptRootPath, resourceFullPath).Replace("\\", "/");
|
||||
bool isJs = resourceFullPath.EndsWith(".js", StringComparison.OrdinalIgnoreCase);
|
||||
bool isImage = IsImageFile(resourceFullPath);
|
||||
|
||||
// 图片 -> Mat
|
||||
if (isImage)
|
||||
{
|
||||
if (importPart.StartsWith("{")) return match.Value;
|
||||
return $"const {importPart} = file.ReadImageMatSync({quote}{normalizedPath}{quote});";
|
||||
}
|
||||
|
||||
// 非 JS 资源 -> 文本内容
|
||||
if (!isJs)
|
||||
{
|
||||
if (importPart.StartsWith("{")) return match.Value;
|
||||
return $"const {importPart} = file.ReadTextSync({quote}{normalizedPath}{quote});";
|
||||
}
|
||||
}
|
||||
|
||||
return match.Value;
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private string? ResolvePhysicalPath(DocumentSettings settings, DocumentInfo? sourceInfo, string specifier)
|
||||
{
|
||||
return ResolvePathInternal(settings.SearchPath, sourceInfo?.Name, specifier);
|
||||
}
|
||||
|
||||
private string? ResolvePathInternal(string? searchPath, string? referrer, string specifier)
|
||||
{
|
||||
if (specifier.StartsWith("packages/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return ProbeFile(Path.Combine(_scriptRootPath, specifier));
|
||||
}
|
||||
|
||||
if (specifier.StartsWith("."))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(referrer))
|
||||
{
|
||||
string? dir = Path.GetDirectoryName(referrer);
|
||||
if (dir != null)
|
||||
{
|
||||
return ProbeFile(Path.GetFullPath(Path.Combine(dir, specifier)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(searchPath))
|
||||
{
|
||||
var paths = searchPath.Split(';', StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (var p in paths)
|
||||
{
|
||||
string combined = Path.Combine(p, specifier);
|
||||
string? found = ProbeFile(combined);
|
||||
if (found != null) return found;
|
||||
}
|
||||
}
|
||||
|
||||
return ProbeFile(Path.Combine(_scriptRootPath, specifier));
|
||||
}
|
||||
|
||||
private string? ProbeFile(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (File.Exists(path)) return path;
|
||||
if (File.Exists(path + ".js")) return path + ".js";
|
||||
}
|
||||
catch { }
|
||||
return null;
|
||||
}
|
||||
|
||||
private static bool IsImageFile(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) return false;
|
||||
string ext = Path.GetExtension(path).ToLower();
|
||||
string[] imageExtensions = { ".png", ".jpg", ".jpeg", ".bmp", ".tiff", ".webp" };
|
||||
return imageExtensions.Contains(ext);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,10 @@ using BetterGenshinImpact.Core.Config;
|
||||
using Microsoft.ClearScript;
|
||||
using Microsoft.ClearScript.V8;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -69,10 +71,24 @@ public class ScriptProject
|
||||
return scrollViewer;
|
||||
}
|
||||
|
||||
public IScriptEngine BuildScriptEngine(PathingPartyConfig? partyConfig = null)
|
||||
private IScriptEngine BuildScriptEngine(PathingPartyConfig? partyConfig)
|
||||
{
|
||||
IScriptEngine engine = new V8ScriptEngine(V8ScriptEngineFlags.UseCaseInsensitiveMemberBinding | V8ScriptEngineFlags.EnableTaskPromiseConversion);
|
||||
EngineExtend.InitHost(engine, ProjectPath, Manifest.Library,partyConfig);
|
||||
V8ScriptEngine engine = new V8ScriptEngine(V8ScriptEngineFlags.UseCaseInsensitiveMemberBinding | V8ScriptEngineFlags.EnableTaskPromiseConversion);
|
||||
|
||||
// packages 依赖和资源重载
|
||||
var loader = new PackageDocumentLoader(ProjectPath);
|
||||
engine.DocumentSettings.Loader = loader;
|
||||
|
||||
// 添加 packages 到搜索路径
|
||||
var libraries = new HashSet<string>(Manifest.Library ?? Array.Empty<string>())
|
||||
{
|
||||
".",
|
||||
"./packages"
|
||||
};
|
||||
|
||||
var libraryList = libraries.ToList();
|
||||
|
||||
EngineExtend.InitHost(engine, ProjectPath, libraryList.ToArray(), partyConfig);
|
||||
return engine;
|
||||
}
|
||||
|
||||
@@ -83,6 +99,10 @@ public class ScriptProject
|
||||
// 加载代码
|
||||
var code = await LoadCode();
|
||||
var engine = BuildScriptEngine(partyConfig);
|
||||
|
||||
// 使用自定义加载器解析脚本文件
|
||||
var loader = (PackageDocumentLoader)engine.DocumentSettings.Loader;
|
||||
|
||||
if (context != null)
|
||||
{
|
||||
// 写入配置的内容
|
||||
@@ -90,15 +110,25 @@ public class ScriptProject
|
||||
}
|
||||
try
|
||||
{
|
||||
if (Manifest.Library.Length != 0)
|
||||
bool useModule = Manifest.Library.Length != 0 ||
|
||||
code.Contains("import ", StringComparison.Ordinal) ||
|
||||
code.Contains("export ", StringComparison.Ordinal);
|
||||
|
||||
if (useModule)
|
||||
{
|
||||
// 清除Document缓存
|
||||
DocumentLoader.Default.DiscardCachedDocuments();
|
||||
await (Task)engine.Evaluate(new DocumentInfo { Category = ModuleCategory.Standard }, code);
|
||||
|
||||
string mainScriptPath = Path.Combine(ProjectPath, Manifest.Main);
|
||||
string runtimeCode = loader.RewriteScriptCode(code, mainScriptPath);
|
||||
|
||||
var evaluation = engine.Evaluate(new DocumentInfo(mainScriptPath) { Category = ModuleCategory.Standard }, runtimeCode);
|
||||
if (evaluation is Task task) await task;
|
||||
}
|
||||
else
|
||||
{
|
||||
await (Task)engine.Evaluate(code);
|
||||
var evaluation = engine.Evaluate(code);
|
||||
if (evaluation is Task task) await task;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@@ -9,6 +9,7 @@ using BetterGenshinImpact.ViewModel.Message;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Net;
|
||||
using BetterGenshinImpact.GameTask;
|
||||
|
||||
namespace BetterGenshinImpact.Core.Script.WebView;
|
||||
|
||||
@@ -31,7 +32,7 @@ public sealed class RepoWebBridge
|
||||
{
|
||||
".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".bmp", ".ico"
|
||||
};
|
||||
|
||||
|
||||
public async Task<string> GetRepoJson()
|
||||
{
|
||||
try
|
||||
@@ -77,7 +78,7 @@ public sealed class RepoWebBridge
|
||||
return await File.ReadAllTextAsync(userConfigPath);
|
||||
}
|
||||
|
||||
public async Task<string> GetFile(string relPath)
|
||||
public Task<string> GetFile(string relPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -92,34 +93,53 @@ public sealed class RepoWebBridge
|
||||
string normalizedFilePath = Path.GetFullPath(filePath);
|
||||
if (!normalizedFilePath.StartsWith(normalizedBasePath, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return "404";
|
||||
}
|
||||
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
return "404";
|
||||
return Task.FromResult("404");
|
||||
}
|
||||
|
||||
string extension = Path.GetExtension(filePath).ToLower();
|
||||
|
||||
if (AllowedTextExtensions.Contains(extension))
|
||||
{
|
||||
return await File.ReadAllTextAsync(filePath);
|
||||
// 读取文本文件
|
||||
string? content = ScriptRepoUpdater.Instance.ReadFileFromCenterRepo(relPath);
|
||||
return Task.FromResult(string.IsNullOrEmpty(content) ? "404" : content);
|
||||
}
|
||||
else if (AllowedImageExtensions.Contains(extension))
|
||||
{
|
||||
byte[] bytes = await File.ReadAllBytesAsync(filePath);
|
||||
return Convert.ToBase64String(bytes);
|
||||
// 读取图片文件,返回 Base64 编码
|
||||
byte[]? bytes = ScriptRepoUpdater.Instance.ReadBinaryFileFromCenterRepo(relPath);
|
||||
if (bytes == null || bytes.Length == 0)
|
||||
{
|
||||
return Task.FromResult("404");
|
||||
}
|
||||
|
||||
string base64 = Convert.ToBase64String(bytes);
|
||||
return Task.FromResult(base64);
|
||||
}
|
||||
|
||||
return "404";
|
||||
return Task.FromResult("404");
|
||||
}
|
||||
catch
|
||||
{
|
||||
return "404";
|
||||
return Task.FromResult("404");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static string GetMimeType(string extension)
|
||||
{
|
||||
return extension.ToLower() switch
|
||||
{
|
||||
".png" => "image/png",
|
||||
".jpg" or ".jpeg" => "image/jpeg",
|
||||
".gif" => "image/gif",
|
||||
".bmp" => "image/bmp",
|
||||
".webp" => "image/webp",
|
||||
".svg" => "image/svg+xml",
|
||||
".ico" => "image/x-icon",
|
||||
_ => "application/octet-stream"
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<bool> UpdateSubscribed(string path)
|
||||
{
|
||||
try
|
||||
@@ -176,6 +196,36 @@ public sealed class RepoWebBridge
|
||||
}
|
||||
}
|
||||
|
||||
// 设置新手引导标志位
|
||||
public bool SetGuideStatus(bool status)
|
||||
{
|
||||
try
|
||||
{
|
||||
var scriptConfig = TaskContext.Instance().Config.ScriptConfig;
|
||||
scriptConfig.GuideStatus = status;
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取新手引导标志位
|
||||
public bool GetGuideStatus()
|
||||
{
|
||||
try
|
||||
{
|
||||
return TaskContext.Instance().Config.ScriptConfig.GuideStatus;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetRepoJsonPath()
|
||||
{
|
||||
string updatedRepoJsonPath = Path.Combine(
|
||||
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,49 @@
|
||||
using BetterGenshinImpact.Core.Recognition;
|
||||
using BetterGenshinImpact.GameTask.Model;
|
||||
using OpenCvSharp;
|
||||
|
||||
namespace BetterGenshinImpact.GameTask.AutoDomain.Assets;
|
||||
|
||||
public class AutoDomainAssets : BaseAssets<AutoDomainAssets>
|
||||
{
|
||||
public RecognitionObject ResinSwitchBtnRo;
|
||||
public RecognitionObject ResinSwitchBtnNoActiveRo;
|
||||
|
||||
|
||||
private AutoDomainAssets() : base()
|
||||
{
|
||||
Initialization(this.systemInfo);
|
||||
}
|
||||
|
||||
protected AutoDomainAssets(ISystemInfo systemInfo) : base(systemInfo)
|
||||
{
|
||||
Initialization(systemInfo);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void Initialization(ISystemInfo systemInfo)
|
||||
{
|
||||
// 可点击状态的树脂切换按钮
|
||||
ResinSwitchBtnRo = new RecognitionObject
|
||||
{
|
||||
Name = "ResinSwitchBtn",
|
||||
RecognitionType = RecognitionTypes.TemplateMatch,
|
||||
TemplateImageMat = GameTaskManager.LoadAssetImage("AutoDomain", "resin_switch_btn.png", this.systemInfo),
|
||||
RegionOfInterest = new Rect((int)(960 * AssetScale), (int)(430 * AssetScale), (int)(400 * AssetScale), (int)(130 * AssetScale)),
|
||||
Threshold = 0.8,
|
||||
DrawOnWindow = false
|
||||
}.InitTemplate();
|
||||
|
||||
// 不可点击状态的树脂切换按钮
|
||||
ResinSwitchBtnNoActiveRo = new RecognitionObject
|
||||
{
|
||||
Name = "ResinSwitchBtnNoActive",
|
||||
RecognitionType = RecognitionTypes.TemplateMatch,
|
||||
TemplateImageMat = GameTaskManager.LoadAssetImage("AutoDomain", "resin_switch_btn_no_active.png", this.systemInfo),
|
||||
RegionOfInterest = new Rect((int)(960 * AssetScale), (int)(430 * AssetScale), (int)(400 * AssetScale), (int)(130 * AssetScale)),
|
||||
Threshold = 0.8,
|
||||
DrawOnWindow = false
|
||||
}.InitTemplate();
|
||||
}
|
||||
}
|
||||
@@ -68,6 +68,13 @@ public partial class AutoDomainConfig : ObservableObject
|
||||
// 使用原粹树脂刷取副本次数
|
||||
[ObservableProperty]
|
||||
private int _originalResinUseCount = 0;
|
||||
// 使用原粹树脂(20)刷取副本次数
|
||||
[ObservableProperty]
|
||||
private int _originalResin20UseCount = 0;
|
||||
|
||||
// 使用原粹树脂(40)刷取副本次数
|
||||
[ObservableProperty]
|
||||
private int _originalResin40UseCount = 0;
|
||||
|
||||
//使用浓缩树脂刷取副本次数
|
||||
[ObservableProperty]
|
||||
|
||||
@@ -34,9 +34,13 @@ public class AutoDomainParam : BaseTaskParam<AutoDomainTask>
|
||||
"浓缩树脂",
|
||||
"原粹树脂"
|
||||
];
|
||||
|
||||
// 使用原粹树脂刷取副本次数
|
||||
public int OriginalResinUseCount { get; set; } = 0;
|
||||
// 使用原粹树脂(20)刷取副本次数
|
||||
public int OriginalResin20UseCount { get; set; } = 0;
|
||||
|
||||
// 使用原粹树脂(40)刷取副本次数
|
||||
public int OriginalResin40UseCount { get; set; } = 0;
|
||||
|
||||
// 使用浓缩树脂刷取副本次数
|
||||
public int CondensedResinUseCount { get; set; } = 0;
|
||||
@@ -73,6 +77,8 @@ public class AutoDomainParam : BaseTaskParam<AutoDomainTask>
|
||||
TransientResinUseCount = config.TransientResinUseCount;
|
||||
FragileResinUseCount = config.FragileResinUseCount;
|
||||
SpecifyResinUse = config.SpecifyResinUse;
|
||||
OriginalResin20UseCount = config.OriginalResin20UseCount;
|
||||
OriginalResin40UseCount = config.OriginalResin40UseCount;
|
||||
}
|
||||
|
||||
public AutoDomainParam(int domainRoundNum = 0) : base(null, null)
|
||||
|
||||
@@ -41,6 +41,7 @@ using BetterGenshinImpact.GameTask.Common;
|
||||
using Compunet.YoloSharp;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using BetterGenshinImpact.GameTask.AutoFight;
|
||||
using BetterGenshinImpact.GameTask.AutoDomain.Assets;
|
||||
|
||||
namespace BetterGenshinImpact.GameTask.AutoDomain;
|
||||
|
||||
@@ -1151,6 +1152,26 @@ public class AutoDomainTask : ISoloTask
|
||||
{
|
||||
if (record.RemainCount > 0)
|
||||
{
|
||||
if (record.Name == "原粹树脂20" || record.Name == "原粹树脂40")
|
||||
{
|
||||
int expectedNum = record.Name == "原粹树脂20" ? 20 : 40;
|
||||
bool switched;
|
||||
try
|
||||
{
|
||||
switched = SwitchOriginalResinType(expectedNum, _ct);
|
||||
}
|
||||
catch (RetryException)
|
||||
{
|
||||
Logger.LogWarning("自动秘境:切换原粹树脂类型重试超时,跳过 {Name}", record.Name);
|
||||
switched = false;
|
||||
}
|
||||
|
||||
if (!switched)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
var (success, _) = PressUseResin(textListInPrompt2, record.Name);
|
||||
if (success)
|
||||
{
|
||||
@@ -1258,6 +1279,11 @@ public class AutoDomainTask : ISoloTask
|
||||
|
||||
public static (bool, int) PressUseResin(List<Region> regionList, string resinName)
|
||||
{
|
||||
if (resinName == "原粹树脂20" || resinName == "原粹树脂40")
|
||||
{
|
||||
resinName = "原粹树脂";
|
||||
}
|
||||
|
||||
var resinKey = regionList.FirstOrDefault(t => t.Text.Contains(resinName));
|
||||
if (resinKey != null)
|
||||
{
|
||||
@@ -1293,6 +1319,46 @@ public class AutoDomainTask : ISoloTask
|
||||
return (false, 0);
|
||||
}
|
||||
|
||||
private bool SwitchOriginalResinType(int expectedNum, CancellationToken ct)
|
||||
{
|
||||
return NewRetry.Do(() =>
|
||||
{
|
||||
using var ra0 = CaptureToRectArea();
|
||||
var regionList = ra0.FindMulti(RecognitionObject.Ocr(ra0.Width * 0.25, ra0.Height * 0.2, ra0.Width * 0.5, ra0.Height * 0.6));
|
||||
var has20 = regionList.Any(t => t.Text.Contains("20"));
|
||||
var has40 = regionList.Any(t => t.Text.Contains("40"));
|
||||
if (expectedNum == 20 && has20)
|
||||
{
|
||||
Logger.LogInformation("自动秘境:已切换到使用20原粹树脂");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (expectedNum == 40 && has40)
|
||||
{
|
||||
Logger.LogInformation("自动秘境:已切换到使用40原粹树脂");
|
||||
return true;
|
||||
}
|
||||
|
||||
//切换20/40原粹树脂的按钮是亮的
|
||||
var clickable = ra0.Find(AutoDomainAssets.Instance.ResinSwitchBtnRo);
|
||||
if (clickable.IsExist())
|
||||
{
|
||||
Logger.LogDebug("自动秘境:切换原粹树脂使用数量");
|
||||
clickable.Click();
|
||||
}
|
||||
|
||||
//切换20/40原粹树脂的按钮是暗的
|
||||
var disabled = ra0.Find(AutoDomainAssets.Instance.ResinSwitchBtnNoActiveRo);
|
||||
if (disabled.IsExist())
|
||||
{
|
||||
Logger.LogWarning("自动秘境:切换原粹树脂的使用数量失败,可能是体力不足,当前目标:{Num}", expectedNum);
|
||||
return false; // 不可点击
|
||||
}
|
||||
|
||||
throw new RetryException("未检测到按钮"); // 继续重试
|
||||
}, TimeSpan.FromMilliseconds(500), 10);
|
||||
}
|
||||
|
||||
private static int GetResinNum(Region region, string resinName)
|
||||
{
|
||||
if (resinName == "原粹树脂")
|
||||
@@ -1335,7 +1401,7 @@ public class AutoDomainTask : ISoloTask
|
||||
return (region1Top <= region2Bottom && region1Bottom >= region2Top);
|
||||
}
|
||||
|
||||
private async Task ArtifactSalvage()
|
||||
private async Task ArtifactSalvage()
|
||||
{
|
||||
if (!_taskParam.AutoArtifactSalvage)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,14 @@ public class ResinUseRecord
|
||||
{
|
||||
list.Add(new ResinUseRecord("浓缩树脂", taskParam.CondensedResinUseCount));
|
||||
}
|
||||
if (taskParam.OriginalResin40UseCount > 0)
|
||||
{
|
||||
list.Add(new ResinUseRecord("原粹树脂40", taskParam.OriginalResin40UseCount));
|
||||
}
|
||||
if (taskParam.OriginalResin20UseCount > 0)
|
||||
{
|
||||
list.Add(new ResinUseRecord("原粹树脂20", taskParam.OriginalResin20UseCount));
|
||||
}
|
||||
if (taskParam.OriginalResinUseCount > 0)
|
||||
{
|
||||
list.Add(new ResinUseRecord("原粹树脂", taskParam.OriginalResinUseCount));
|
||||
|
||||
@@ -9,6 +9,7 @@ using BetterGenshinImpact.GameTask.GetGridIcons;
|
||||
using BetterGenshinImpact.GameTask.Model;
|
||||
using BetterGenshinImpact.GameTask.Model.Area;
|
||||
using BetterGenshinImpact.GameTask.Model.GameUI;
|
||||
using BetterGenshinImpact.Helpers;
|
||||
using BetterGenshinImpact.View.Drawable;
|
||||
using Fischless.WindowsInput;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@@ -104,7 +105,8 @@ public class AutoEatTask : BaseIndependentTask, ISoloTask<int?>
|
||||
itemRegion.Click();
|
||||
|
||||
#region 识别数量
|
||||
string numStr = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
|
||||
string ocrText = itemRegion.SrcMat.GetGridItemIconText(OcrFactory.Paddle);
|
||||
string numStr = StringUtils.ConvertFullWidthNumToHalfWidth(ocrText);
|
||||
if (int.TryParse(numStr, out int num))
|
||||
{
|
||||
count = num - 1; // 算上吃掉的1个
|
||||
|
||||
@@ -2021,5 +2021,33 @@
|
||||
"nameEn": "Columbina",
|
||||
"skillCD": 17,
|
||||
"weapon": "10"
|
||||
},
|
||||
{
|
||||
"alias": [
|
||||
"兹白",
|
||||
"Zibai",
|
||||
"白马仙人",
|
||||
"白马"
|
||||
],
|
||||
"burstCD": 15,
|
||||
"id": "10000126",
|
||||
"name": "兹白",
|
||||
"nameEn": "Zibai",
|
||||
"skillCD": 18,
|
||||
"weapon": "10"
|
||||
},
|
||||
{
|
||||
"alias": [
|
||||
"叶洛亚",
|
||||
"Illuga",
|
||||
"少爷",
|
||||
"小少爷"
|
||||
],
|
||||
"burstCD": 15,
|
||||
"id": "10000127",
|
||||
"name": "叶洛亚",
|
||||
"nameEn": "Illuga",
|
||||
"skillCD": 15,
|
||||
"weapon": "10"
|
||||
}
|
||||
]
|
||||
@@ -320,7 +320,8 @@ namespace BetterGenshinImpact.GameTask.AutoFight
|
||||
if (retryCount == 0)
|
||||
{
|
||||
await Delay(delayTime,ct);
|
||||
Logger.LogInformation("打开编队界面检查战斗是否结束,延时{detectDelayTime}毫秒检查", detectDelayTime);
|
||||
// Logger.LogInformation("打开编队界面检查战斗是否结束,延时{detectDelayTime}毫秒检查", detectDelayTime);
|
||||
Logger.LogInformation("打开编队界面检查战斗是否结束");
|
||||
Simulation.SendInput.SimulateAction(GIActions.OpenPartySetupScreen);
|
||||
await Delay(detectDelayTime, ct);
|
||||
var ra3 = CaptureToRectArea();
|
||||
|
||||
@@ -22,6 +22,9 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using BetterGenshinImpact.GameTask.AutoPathing.Model;
|
||||
using BetterGenshinImpact.GameTask.AutoPathing.Handler;
|
||||
using BetterGenshinImpact.GameTask.AutoPick.Assets;
|
||||
using BetterGenshinImpact.Core.Recognition;
|
||||
using BetterGenshinImpact.GameTask.Common.Element.Assets;
|
||||
using BetterGenshinImpact.GameTask.Common;
|
||||
|
||||
namespace BetterGenshinImpact.GameTask.AutoFight;
|
||||
|
||||
@@ -44,6 +47,10 @@ public class AutoFightTask : ISoloTask
|
||||
public static bool FightStatusFlag { get; set; } = false;
|
||||
|
||||
private static readonly object PickLock = new object();
|
||||
|
||||
private readonly double _assetScale = TaskContext.Instance().SystemInfo.AssetScale;
|
||||
|
||||
private readonly ReturnMainUiTask _returnMainUiTask = new();
|
||||
|
||||
// 战斗点位
|
||||
public static WaypointForTrack? FightWaypoint {get; set;} = null;
|
||||
@@ -437,7 +444,7 @@ public class AutoFightTask : ISoloTask
|
||||
if (_finishDetectConfig.DelayTimes.TryGetValue(command.Name, out var time))
|
||||
{
|
||||
delayTime = time;
|
||||
Logger.LogInformation($"{command.Name}结束后,延时检查为{delayTime}毫秒");
|
||||
// Logger.LogInformation($"{command.Name}结束后,延时检查为{delayTime}毫秒");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -486,7 +493,91 @@ public class AutoFightTask : ISoloTask
|
||||
// 队伍中存在万叶的时候使用一次长E
|
||||
var picker = combatScenes.SelectAvatar("枫原万叶") ?? combatScenes.SelectAvatar("琴");
|
||||
|
||||
var oldPartyName = RunnerContext.Instance.PartyName;
|
||||
string? oldPartyName = null;
|
||||
if (RunnerContext.Instance.PartyName is not null)
|
||||
{
|
||||
oldPartyName = RunnerContext.Instance.PartyName;
|
||||
}
|
||||
else if(picker is null && !string.IsNullOrEmpty(_taskParam.KazuhaPartyName))
|
||||
{
|
||||
Logger.LogWarning("换队拾取:当前队伍名称为空,尝试读取!");
|
||||
await Delay(1000, ct);
|
||||
await _returnMainUiTask.Start(ct);
|
||||
|
||||
for (int attempt = 0; attempt < 6; attempt++)
|
||||
{
|
||||
Simulation.SendInput.SimulateAction(GIActions.OpenPartySetupScreen);
|
||||
var enterGameAppear = await NewRetry.WaitForElementAppear(
|
||||
ElementAssets.Instance.PartyBtnChooseView,
|
||||
() => { },
|
||||
ct,
|
||||
15,
|
||||
500
|
||||
);
|
||||
if(attempt == 5 && !enterGameAppear)
|
||||
{
|
||||
Logger.LogWarning("换队拾取:读取队伍名称失败,跳过换队拾取步骤");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(_taskParam.KazuhaPartyName)){
|
||||
await Delay(1000, ct);
|
||||
|
||||
//等待寻找2秒队伍按钮出现
|
||||
var timeWaitStart = 0;
|
||||
while(timeWaitStart < 6000)
|
||||
{
|
||||
using var ra = CaptureToRectArea();
|
||||
var partyViewBtn = ra.Find(ElementAssets.Instance.PartyBtnChooseView);
|
||||
if (partyViewBtn.IsExist())
|
||||
{
|
||||
// OCR 当前队伍名称(无法单字,中间禁止空格)
|
||||
// 读取OCR原始识别文本
|
||||
var rawPartyName = ra.Find(new RecognitionObject
|
||||
{
|
||||
RecognitionType = RecognitionTypes.Ocr,
|
||||
RegionOfInterest = new Rect(partyViewBtn.Right, partyViewBtn.Top, (int)(350 * _assetScale),
|
||||
partyViewBtn.Height)
|
||||
}).Text;
|
||||
|
||||
// 核心处理逻辑:1.空值兜底 2.去首尾空白 3.移除末尾的“口”字(仅最后一个是口才删)
|
||||
if (string.IsNullOrWhiteSpace(rawPartyName))
|
||||
{
|
||||
oldPartyName = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
//有概率把编辑图标识别为字符,并且含有空格或换行符,需要过滤
|
||||
var tempName = rawPartyName
|
||||
.Replace("\"", "") // 移除所有双引号(核心新增,解决日志里的""问题)
|
||||
.Replace("\r\n", "") // 清理Windows换行符
|
||||
.Replace("\r", ""); // 先清理所有双引号,避免引号干扰后续处理
|
||||
|
||||
// 核心逻辑:找到第一个换行符(\n)的位置,截断并删除换行+后面所有字符
|
||||
int firstNewLineIndex = tempName.IndexOf('\n');
|
||||
if (firstNewLineIndex != -1) // 存在换行符,截取到换行符前
|
||||
{
|
||||
tempName = tempName.Substring(0, firstNewLineIndex);
|
||||
}
|
||||
|
||||
// 最后统一去首尾所有空白(空格、制表符、回车符\r等),得到纯净队伍名
|
||||
oldPartyName = tempName.Trim();
|
||||
}
|
||||
|
||||
// 后续原有逻辑不变
|
||||
Logger.LogInformation("换队拾取:当前队伍名称读取为:{oldPartyName}", oldPartyName);
|
||||
// 加在rawPartyName赋值后,打印原始文本的“原始形态”(转义符会显示)
|
||||
Logger.LogDebug("OCR原始识别文本(含转义):{rawPartyName}", rawPartyName);
|
||||
RunnerContext.Instance.PartyName = oldPartyName;
|
||||
// await _returnMainUiTask.Start(ct);
|
||||
break;
|
||||
}
|
||||
await Delay(200, ct);
|
||||
timeWaitStart += 200;
|
||||
}
|
||||
}
|
||||
|
||||
var switchPartyFlag = false;
|
||||
if (picker == null && !timeOutFlag &&!string.IsNullOrEmpty(_taskParam.KazuhaPartyName) && oldPartyName != _taskParam.KazuhaPartyName)
|
||||
{
|
||||
@@ -516,7 +607,12 @@ public class AutoFightTask : ISoloTask
|
||||
if (picker.Name == "枫原万叶")
|
||||
{
|
||||
var time = TimeSpan.FromSeconds(picker.GetSkillCdSeconds());
|
||||
if (!(lastFightName == picker.Name && time.TotalSeconds > 3))
|
||||
|
||||
// 如果配置了二次拾取,或者不满足跳过条件(上次是万叶且冷却时间>3秒),则执行拾取
|
||||
bool shouldSkip = lastFightName == picker.Name && time.TotalSeconds > 3;
|
||||
bool forcePickup = _taskParam.QinDoublePickUp;
|
||||
|
||||
if (forcePickup || !shouldSkip)
|
||||
{
|
||||
Logger.LogInformation("使用 枫原万叶-长E 拾取掉落物");
|
||||
await Delay(200, ct);
|
||||
@@ -677,7 +773,8 @@ public class AutoFightTask : ISoloTask
|
||||
|
||||
if (!_finishDetectConfig.RotateFindEnemyEnabled)await Delay(delayTime, _ct);
|
||||
|
||||
Logger.LogInformation("打开编队界面检查战斗是否结束,延时{detectDelayTime}毫秒检查", detectDelayTime);
|
||||
// Logger.LogInformation("打开编队界面检查战斗是否结束,延时{detectDelayTime}毫秒检查", detectDelayTime);
|
||||
Logger.LogInformation("打开编队界面检查战斗是否结束");
|
||||
// 最终方案确认战斗结束
|
||||
Simulation.SendInput.SimulateAction(GIActions.OpenPartySetupScreen);
|
||||
await Delay(detectDelayTime, _ct);
|
||||
@@ -700,8 +797,9 @@ public class AutoFightTask : ISoloTask
|
||||
return true;
|
||||
}
|
||||
|
||||
Logger.LogInformation($"未识别到战斗结束yellow{b3.Item0},{b3.Item1},{b3.Item2}");
|
||||
Logger.LogInformation($"未识别到战斗结束white{whiteTile.Item0},{whiteTile.Item1},{whiteTile.Item2}");
|
||||
// Logger.LogInformation($"未识别到战斗结束yellow{b3.Item0},{b3.Item1},{b3.Item2}");
|
||||
// Logger.LogInformation($"未识别到战斗结束white{whiteTile.Item0},{whiteTile.Item1},{whiteTile.Item2}");
|
||||
Logger.LogInformation($"未识别到战斗结束: yellow{b3.Item0},{b3.Item1},{b3.Item2};white{whiteTile.Item0},{whiteTile.Item1},{whiteTile.Item2}");
|
||||
|
||||
if (_finishDetectConfig.RotateFindEnemyEnabled)
|
||||
{
|
||||
@@ -804,4 +902,4 @@ public class AutoFightTask : ISoloTask
|
||||
// // 要大于 gadgetMat 的 1/2
|
||||
// return list.Any(r => r.Width > gadgetMat.Width / 2 && r.Height > gadgetMat.Height / 2);
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -128,28 +128,37 @@ public class Avatar
|
||||
}
|
||||
|
||||
Logger.LogInformation("游泳检测:尝试回到战斗地点");
|
||||
var pathExecutor = new PathExecutor(ct);
|
||||
var cts = new CancellationTokenSource();
|
||||
var pathExecutor = new PathExecutor(cts.Token);
|
||||
|
||||
try
|
||||
{
|
||||
pathExecutor.FaceTo(AutoFightTask.FightWaypoint).Wait(2000, ct);
|
||||
AutoFightTask.FightWaypoint.MoveMode = MoveModeEnum.Fly.Code;//改为跳飞
|
||||
pathExecutor.FaceTo(AutoFightTask.FightWaypoint).Wait(2000,cts.Token);
|
||||
AutoFightTask.FightWaypoint.MoveMode = MoveModeEnum.Fly.Code; // 改为跳飞
|
||||
Simulation.SendInput.Mouse.RightButtonDown();
|
||||
pathExecutor.MoveTo(AutoFightTask.FightWaypoint).Wait(15000, ct);
|
||||
AutoFightTask.FightWaypoint = null;//执行后清空,即每次战斗只执行一次,第二次直接去七天神像
|
||||
pathExecutor.MoveTo(AutoFightTask.FightWaypoint).Wait(15000,cts.Token);
|
||||
cts.Cancel();
|
||||
AutoFightTask.FightWaypoint = null;
|
||||
Simulation.SendInput.Mouse.RightButtonUp();
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
Logger.LogError("游泳检测:回到战斗地点任务被取消");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogWarning(ex, "游泳检测:回到战斗地点异常");
|
||||
Logger.LogError(ex, "游泳检测:回到战斗地点异常");
|
||||
}
|
||||
finally
|
||||
{
|
||||
Simulation.ReleaseAllKey();
|
||||
}
|
||||
|
||||
Simulation.ReleaseAllKey();
|
||||
|
||||
using var ra2 = CaptureToRectArea();
|
||||
if (!SwimmingConfirm(ra2))
|
||||
using var bitmap2 = CaptureToRectArea();
|
||||
if (!SwimmingConfirm(bitmap2))
|
||||
{
|
||||
Logger.LogInformation("游泳检测:游泳脱困成功");
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
Logger.LogWarning("游泳检测:回到战斗地点失败");
|
||||
@@ -245,10 +254,10 @@ public class Avatar
|
||||
// 切换成功
|
||||
if (CombatScenes.GetActiveAvatarIndex(region, context) == Index)
|
||||
{
|
||||
if (needLog && i > 0)
|
||||
{
|
||||
Logger.LogInformation("成功切换角色:{Name}", Name);
|
||||
}
|
||||
// if (needLog && i > 0)
|
||||
// {
|
||||
// Logger.LogInformation("成功切换角色:{Name}", Name);
|
||||
// }
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -258,6 +267,8 @@ public class Avatar
|
||||
|
||||
Sleep(250, Ct);
|
||||
}
|
||||
|
||||
Logger.LogWarning("切换角色失败:{Name}", Name);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -463,8 +474,8 @@ public class Avatar
|
||||
var cd = AfterUseSkill(region);
|
||||
if (cd > 0)
|
||||
{
|
||||
Logger.LogInformation(hold ? "{Name} 长按元素战技,cd:{Cd} 秒" : "{Name} 点按元素战技,cd:{Cd} 秒", Name,
|
||||
Math.Round(cd, 2));
|
||||
// Logger.LogInformation(hold ? "{Name} 长按元素战技,cd:{Cd} 秒" : "{Name} 点按元素战技,cd:{Cd} 秒", Name,
|
||||
// Math.Round(cd, 2));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -620,6 +631,32 @@ public class Avatar
|
||||
{
|
||||
Sleep(ms); // 由于存在宏操作,等待不应被cts取消
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 等待完成
|
||||
/// </summary>
|
||||
public void Ready()
|
||||
{
|
||||
Sleep(200, Ct);
|
||||
|
||||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
if (Ct is { IsCancellationRequested: true })
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using var region = CaptureToRectArea();
|
||||
// 等待角色编号块出现
|
||||
if (PartyAvatarSideIndexHelper.HasAnyIndexRect(region))
|
||||
{
|
||||
region.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
Sleep(150, Ct);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
@@ -857,6 +894,11 @@ public class Avatar
|
||||
GlobalMethod.MoveMouseBy(x, y);
|
||||
}
|
||||
|
||||
public void Scroll(int scrollAmountInClicks)
|
||||
{
|
||||
Simulation.SendInput.Mouse.VerticalScroll(scrollAmountInClicks);
|
||||
}
|
||||
|
||||
public void KeyDown(string key)
|
||||
{
|
||||
var vk = KeyBindingsSettingsPageViewModel.MappingKey(User32Helper.ToVk(key));
|
||||
|
||||
@@ -177,6 +177,48 @@ public class CombatScenes : IDisposable
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 静默模式下的队伍识别(用于后台挂件)
|
||||
/// </summary>
|
||||
public CombatScenes InitializeTeamSilent(ImageRegion imageRegion, AutoFightConfig? autoFightConfig = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (autoFightConfig == null)
|
||||
{
|
||||
autoFightConfig = TaskContext.Instance().Config.AutoFightConfig;
|
||||
}
|
||||
|
||||
// 优先取配置
|
||||
if (!string.IsNullOrEmpty(autoFightConfig.TeamNames))
|
||||
{
|
||||
InitializeTeamFromConfig(autoFightConfig.TeamNames, autoFightConfig);
|
||||
return this;
|
||||
}
|
||||
|
||||
// 使用 NullLogger 彻底屏蔽底层工具类的日志输出
|
||||
var nullLogger = Microsoft.Extensions.Logging.Abstractions.NullLogger.Instance;
|
||||
|
||||
CurrentMultiGameStatus = PartyAvatarSideIndexHelper.DetectedMultiGameStatus(imageRegion, _autoFightAssets, nullLogger);
|
||||
var (avatarIndexRectList, avatarSideIconRectList) = PartyAvatarSideIndexHelper.GetAllIndexRects(imageRegion, CurrentMultiGameStatus, nullLogger, _elementAssets, _systemInfo);
|
||||
ExpectedTeamAvatarNum = avatarIndexRectList.Count;
|
||||
|
||||
var names = new string[avatarSideIconRectList.Count];
|
||||
for (var i = 0; i < avatarSideIconRectList.Count; i++)
|
||||
{
|
||||
using var ra = imageRegion.DeriveCrop(avatarSideIconRectList[i]);
|
||||
var pair = ClassifyAvatarCnName(ra.CacheImage, i + 1);
|
||||
names[i] = pair.Item1;
|
||||
}
|
||||
Avatars = BuildAvatars([.. names], null, avatarIndexRectList, autoFightConfig);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 静默模式下完全不抛出、不记录异常
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 这个个方法主要用于在切人判断有误的情况下,且能够找到预期数量的角色编号框。此时只有两种情况
|
||||
|
||||
@@ -167,9 +167,10 @@ public class OneKeyFightTask : Singleton<OneKeyFightTask>
|
||||
{
|
||||
return new Task(() =>
|
||||
{
|
||||
Logger.LogInformation("→ {Name}执行宏", activeAvatar.Name);
|
||||
var round = 1;
|
||||
while (!ct.IsCancellationRequested && IsEnabled())
|
||||
{
|
||||
Logger.LogInformation("→ {Name}执行宏 (第{Round}轮)", activeAvatar.Name, round);
|
||||
if (IsHoldOnMode() && !_isKeyDown)
|
||||
{
|
||||
break;
|
||||
@@ -178,8 +179,14 @@ public class OneKeyFightTask : Singleton<OneKeyFightTask>
|
||||
// 通用化战斗策略
|
||||
foreach (var command in combatCommands)
|
||||
{
|
||||
if (command.ActivatingRound != null && command.ActivatingRound.Count > 0 && !command.ActivatingRound.Contains(round))
|
||||
{
|
||||
// 跳过强制首轮指令
|
||||
continue;
|
||||
}
|
||||
command.Execute(activeAvatar);
|
||||
}
|
||||
round++;
|
||||
}
|
||||
|
||||
Logger.LogInformation("→ {Name}停止宏", activeAvatar.Name);
|
||||
@@ -194,7 +201,7 @@ public class OneKeyFightTask : Singleton<OneKeyFightTask>
|
||||
|
||||
public Dictionary<string, List<CombatCommand>> LoadAvatarMacros()
|
||||
{
|
||||
var jsonPath = Global.Absolute("User/avatar_macro.json");
|
||||
var jsonPath = GetAvatarMacroJsonPath();
|
||||
var json = File.ReadAllText(jsonPath);
|
||||
_lastUpdateTime = File.GetLastWriteTime(jsonPath);
|
||||
var avatarMacros = JsonSerializer.Deserialize<List<AvatarMacro>>(json, ConfigService.JsonOptions);
|
||||
@@ -219,10 +226,20 @@ public class OneKeyFightTask : Singleton<OneKeyFightTask>
|
||||
public bool IsAvatarMacrosEdited()
|
||||
{
|
||||
// 通过修改时间判断是否编辑过
|
||||
var jsonPath = Global.Absolute("User/avatar_macro.json");
|
||||
var jsonPath = GetAvatarMacroJsonPath();
|
||||
var lastWriteTime = File.GetLastWriteTime(jsonPath);
|
||||
return lastWriteTime > _lastUpdateTime;
|
||||
}
|
||||
|
||||
public static string GetAvatarMacroJsonPath()
|
||||
{
|
||||
var path = Global.Absolute("User/avatar_macro.json");
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
File.Copy(Global.Absolute("User/avatar_macro_default.json"), path);
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
public static bool IsEnabled()
|
||||
{
|
||||
|
||||
@@ -14,6 +14,8 @@ public class CombatCommand
|
||||
|
||||
public List<string>? Args { get; set; }
|
||||
|
||||
public List<int> ActivatingRound { get; set; }
|
||||
|
||||
public CombatCommand(string name, string command)
|
||||
{
|
||||
Name = name.Trim();
|
||||
@@ -62,6 +64,16 @@ public class CombatCommand
|
||||
throw new ArgumentException($"{Method.Alias[0]}方法的入参必须是VirtualKeyCodes枚举中的值,当前入参 {Args[0]} 不合法");
|
||||
}
|
||||
}
|
||||
else if (Method == Method.Scroll)
|
||||
{
|
||||
AssertUtils.IsTrue(Args.Count == 1, "scroll方法必须有一个入参,代表滚动格数。例:scroll(1) 或 scroll(-1)");
|
||||
AssertUtils.IsTrue(int.TryParse(Args[0], out _), "滚动格数必须是整数");
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"<CombatCommand {Name}, {Method}({Args}) (rounds {ActivatingRound})>";
|
||||
}
|
||||
|
||||
public void Execute(CombatScenes combatScenes, CombatCommand? lastCommand = null)
|
||||
@@ -95,7 +107,8 @@ public class CombatCommand
|
||||
&& Method != Method.MoveBy
|
||||
&& Method != Method.KeyDown
|
||||
&& Method != Method.KeyUp
|
||||
&& Method != Method.KeyPress)
|
||||
&& Method != Method.KeyPress
|
||||
&& Method != Method.Scroll)
|
||||
{
|
||||
avatar.Switch();
|
||||
}
|
||||
@@ -185,6 +198,10 @@ public class CombatCommand
|
||||
var s = double.Parse(Args![0]);
|
||||
avatar.Wait((int)TimeSpan.FromSeconds(s).TotalMilliseconds);
|
||||
}
|
||||
else if (Method == Method.Ready)
|
||||
{
|
||||
avatar.Ready();
|
||||
}
|
||||
else if (Method == Method.Aim)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
@@ -264,6 +281,14 @@ public class CombatCommand
|
||||
{
|
||||
avatar.KeyPress(Args![0]);
|
||||
}
|
||||
else if (Method == Method.Scroll)
|
||||
{
|
||||
avatar.Scroll(int.Parse(Args![0]));
|
||||
}
|
||||
else if (Method == Method.Round)
|
||||
{
|
||||
// 作为回合标记使用,不做任何操作
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
@@ -28,7 +28,9 @@ public class CombatScriptBag(List<CombatScript> combatScripts)
|
||||
}
|
||||
|
||||
if (matchCount != avatars.Count) continue;
|
||||
Logger.LogInformation("匹配到战斗脚本:{Name}", combatScript.Name);
|
||||
// Logger.LogInformation("匹配到战斗脚本:{Name},共{Cnt}条指令,涉及角色:{Str}",
|
||||
// combatScript.Name, combatScript.CombatCommands.Count, string.Join(",", combatScript.AvatarNames));
|
||||
Logger.LogInformation("匹配到战斗脚本:{Name}", combatScript.Name);
|
||||
return combatScript.CombatCommands;
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ public class CombatScriptParser
|
||||
}
|
||||
|
||||
var names = string.Join(",", combatAvatarNames);
|
||||
Logger.LogDebug("战斗脚本解析完成,共{Cnt}条指令,涉及角色:{Str}", combatCommands.Count, names);
|
||||
// Logger.LogDebug("战斗脚本解析完成,共{Cnt}条指令,涉及角色:{Str}", combatCommands.Count, names);
|
||||
|
||||
return new CombatScript(combatAvatarNames, combatCommands);
|
||||
}
|
||||
@@ -131,7 +131,70 @@ public class CombatScriptParser
|
||||
return oneLineCombatCommands;
|
||||
}
|
||||
|
||||
public static List<CombatCommand> ParseLineCommands(string lineWithoutAvatar, string avatarName)
|
||||
public static List<int> ParseRoundCommand(CombatCommand roundCommand) {
|
||||
// 解析round命令的入参,返回一个整数列表,代表在哪些回合执行后续指令
|
||||
// 支持Round(1)、Round(1,3,5)、Round(2-4)、Round(1,3-5)等格式
|
||||
var activatingRounds = new List<int>();
|
||||
if (roundCommand.Args == null || roundCommand.Args.Count == 0) {
|
||||
Logger.LogError("round方法必须有入参,代表在哪些回合执行后续指令,例:round(1)、round(1,3-5)");
|
||||
throw new ArgumentException("round方法必须有入参,代表在哪些回合执行后续指令,例:round(1)、round(1,3-5)");
|
||||
}
|
||||
foreach (var arg in roundCommand.Args) {
|
||||
if (arg.Contains('-')) {
|
||||
// 范围
|
||||
var parts = arg.Split('-', StringSplitOptions.TrimEntries);
|
||||
if (parts.Length != 2) {
|
||||
Logger.LogError("round方法的入参格式错误,例:round(1-3)");
|
||||
throw new ArgumentException("round方法的入参格式错误,例:round(1-3)");
|
||||
}
|
||||
var start = int.Parse(parts[0]);
|
||||
var end = int.Parse(parts[1]);
|
||||
if (start > end || start <= 0) {
|
||||
Logger.LogError("round方法的入参格式错误,起始回合必须小于等于结束回合且大于0,例:round(1-3)");
|
||||
throw new ArgumentException("round方法的入参格式错误,起始回合必须小于等于结束回合且大于0,例:round(1-3)");
|
||||
}
|
||||
for (int i = start; i <= end; i++) {
|
||||
activatingRounds.Add(i);
|
||||
}
|
||||
} else {
|
||||
// 单个回合
|
||||
var round = int.Parse(arg);
|
||||
if (round <= 0) {
|
||||
Logger.LogError("round方法的入参格式错误,回合数必须大于0,例:round(1)");
|
||||
throw new ArgumentException("round方法的入参格式错误,回合数必须大于0,例:round(1)");
|
||||
}
|
||||
activatingRounds.Add(round);
|
||||
}
|
||||
}
|
||||
return activatingRounds;
|
||||
}
|
||||
|
||||
public static List<CombatCommand> ParseLineCommands(string lineWithoutAvatar, string avatarName) {
|
||||
var parts = lineWithoutAvatar.Split("|", StringSplitOptions.RemoveEmptyEntries);
|
||||
var fullCombatCommands = new List<CombatCommand>();
|
||||
foreach (var part in parts)
|
||||
{
|
||||
var combatCommands = ParseLinePart(part, avatarName);
|
||||
if (combatCommands.Count > 0 && combatCommands[0].Method == Method.Round) {
|
||||
// 遇到round指令,作为回合分隔符使用,不加入最终指令列表
|
||||
var roundCommand = combatCommands[0];
|
||||
var activatingRounds = ParseRoundCommand(roundCommand);
|
||||
combatCommands.RemoveAt(0);
|
||||
foreach (var combatCommand in combatCommands) {
|
||||
|
||||
combatCommand.ActivatingRound = activatingRounds;
|
||||
}
|
||||
}
|
||||
fullCombatCommands.AddRange(combatCommands);
|
||||
}
|
||||
// foreach (var combatCommand in fullCombatCommands)
|
||||
// {
|
||||
// Logger.LogDebug("解析战斗脚本命令:{cmd}", combatCommand.ToString());
|
||||
// }
|
||||
return fullCombatCommands;
|
||||
}
|
||||
|
||||
public static List<CombatCommand> ParseLinePart(string lineWithoutAvatar, string avatarName)
|
||||
{
|
||||
var oneLineCombatCommands = new List<CombatCommand>();
|
||||
var commandArray = lineWithoutAvatar.Split(",", StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
@@ -12,6 +12,7 @@ public class Method
|
||||
public static readonly Method Attack = new(["attack", "普攻", "普通攻击"]);
|
||||
public static readonly Method Charge = new(["charge", "重击"]);
|
||||
public static readonly Method Wait = new(["wait", "after", "等待"]);
|
||||
public static readonly Method Ready = new(["ready", "完成"]);
|
||||
|
||||
public static readonly Method Walk = new(["walk", "行走"]);
|
||||
public static readonly Method W = new(["w"]);
|
||||
@@ -31,6 +32,8 @@ public class Method
|
||||
public static readonly Method KeyDown = new(["keydown"]);
|
||||
public static readonly Method KeyUp = new(["keyup"]);
|
||||
public static readonly Method KeyPress = new(["keypress"]);
|
||||
public static readonly Method Scroll = new(["scroll", "verticalscroll"]);
|
||||
public static readonly Method Round = new(["round"]);
|
||||
|
||||
public static IEnumerable<Method> Values
|
||||
{
|
||||
@@ -41,6 +44,7 @@ public class Method
|
||||
yield return Attack;
|
||||
yield return Charge;
|
||||
yield return Wait;
|
||||
yield return Ready;
|
||||
|
||||
yield return Walk;
|
||||
yield return W;
|
||||
@@ -60,6 +64,8 @@ public class Method
|
||||
yield return KeyDown;
|
||||
yield return KeyUp;
|
||||
yield return KeyPress;
|
||||
yield return Scroll;
|
||||
yield return Round;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +138,8 @@ namespace BetterGenshinImpact.GameTask.AutoFishing
|
||||
{
|
||||
if (!SystemControl.IsGenshinImpactActiveByProcess())
|
||||
{
|
||||
_logger.LogInformation("当前获取焦点的窗口不是原神,停止执行");
|
||||
var name = SystemControl.GetActiveByProcess();
|
||||
_logger.LogWarning($"当前获取焦点的窗口为: {name},不是原神,停止执行");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -648,7 +648,7 @@
|
||||
"nameEn": "charlotte",
|
||||
"type": "character",
|
||||
"name": "夏洛蒂",
|
||||
"hp": 10,
|
||||
"hp": 11,
|
||||
"energy": 2,
|
||||
"element": "冰元素",
|
||||
"weapon": "法器",
|
||||
@@ -1439,7 +1439,7 @@
|
||||
"nameEn": "kamisato_ayato",
|
||||
"type": "character",
|
||||
"name": "神里绫人",
|
||||
"hp": 10,
|
||||
"hp": 11,
|
||||
"energy": 2,
|
||||
"element": "水元素",
|
||||
"weapon": "单手剑",
|
||||
@@ -2720,7 +2720,7 @@
|
||||
"nameEn": "thoma",
|
||||
"type": "character",
|
||||
"name": "托马",
|
||||
"hp": 10,
|
||||
"hp": 12,
|
||||
"energy": 2,
|
||||
"element": "火元素",
|
||||
"weapon": "长柄武器",
|
||||
@@ -4222,6 +4222,83 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 1416,
|
||||
"nameEn": "ororon",
|
||||
"type": "character",
|
||||
"name": "欧洛伦",
|
||||
"hp": 10,
|
||||
"energy": 2,
|
||||
"element": "雷元素",
|
||||
"weapon": "弓",
|
||||
"skills": [
|
||||
{
|
||||
"nameEn": "spiritvessel_snapshot",
|
||||
"name": "宿灵闪箭",
|
||||
"skillTag": [
|
||||
"普通攻击"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1104,
|
||||
"nameEn": "electro",
|
||||
"type": "雷元素",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"id": 1109,
|
||||
"nameEn": "unaligned_element",
|
||||
"type": "无色元素",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "nights_sling",
|
||||
"name": "暝色缒索",
|
||||
"skillTag": [
|
||||
"元素战技"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1104,
|
||||
"nameEn": "electro",
|
||||
"type": "雷元素",
|
||||
"count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "dark_voices_echo",
|
||||
"name": "黯声回响",
|
||||
"skillTag": [
|
||||
"元素爆发"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1104,
|
||||
"nameEn": "electro",
|
||||
"type": "雷元素",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"id": 1110,
|
||||
"nameEn": "energy",
|
||||
"type": "充能",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "nightshade_synesthesia",
|
||||
"name": "夜翳的通感",
|
||||
"skillTag": [
|
||||
"被动技能"
|
||||
],
|
||||
"cost": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 1501,
|
||||
"nameEn": "sucrose",
|
||||
@@ -6068,7 +6145,7 @@
|
||||
"nameEn": "collei",
|
||||
"type": "character",
|
||||
"name": "柯莱",
|
||||
"hp": 10,
|
||||
"hp": 11,
|
||||
"energy": 2,
|
||||
"element": "草元素",
|
||||
"weapon": "弓",
|
||||
@@ -7457,7 +7534,7 @@
|
||||
"nameEn": "hydro_tulpa",
|
||||
"type": "character",
|
||||
"name": "水形幻人",
|
||||
"hp": 12,
|
||||
"hp": 11,
|
||||
"energy": 3,
|
||||
"element": "水元素",
|
||||
"weapon": "其他武器",
|
||||
@@ -7529,6 +7606,83 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2207,
|
||||
"nameEn": "consecrated_horned_crocodile",
|
||||
"type": "character",
|
||||
"name": "圣骸角鳄",
|
||||
"hp": 11,
|
||||
"energy": 2,
|
||||
"element": "水元素",
|
||||
"weapon": "其他武器",
|
||||
"skills": [
|
||||
{
|
||||
"nameEn": "fang_bite",
|
||||
"name": "尖牙噬咬",
|
||||
"skillTag": [
|
||||
"普通攻击"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1102,
|
||||
"nameEn": "hydro",
|
||||
"type": "水元素",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"id": 1109,
|
||||
"nameEn": "unaligned_element",
|
||||
"type": "无色元素",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "sawtoothed_surge",
|
||||
"name": "鳄齿锐波",
|
||||
"skillTag": [
|
||||
"元素战技"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1102,
|
||||
"nameEn": "hydro",
|
||||
"type": "水元素",
|
||||
"count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "reptilian_rage",
|
||||
"name": "凶鳄狂浪",
|
||||
"skillTag": [
|
||||
"元素爆发"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1102,
|
||||
"nameEn": "hydro",
|
||||
"type": "水元素",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"id": 1110,
|
||||
"nameEn": "energy",
|
||||
"type": "充能",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "consecrated_senses",
|
||||
"name": "圣骸感应",
|
||||
"skillTag": [
|
||||
"被动技能"
|
||||
],
|
||||
"cost": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2301,
|
||||
"nameEn": "fatui_pyro_agent",
|
||||
@@ -7842,7 +7996,7 @@
|
||||
"nameEn": "lord_of_eroded_primal_fire",
|
||||
"type": "character",
|
||||
"name": "蚀灭的源焰之主",
|
||||
"hp": 12,
|
||||
"hp": 11,
|
||||
"energy": 2,
|
||||
"element": "火元素",
|
||||
"weapon": "其他武器",
|
||||
@@ -9220,5 +9374,76 @@
|
||||
"cost": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6605,
|
||||
"nameEn": "skirk",
|
||||
"type": "character",
|
||||
"name": "丝柯克",
|
||||
"hp": 10,
|
||||
"energy": 0,
|
||||
"element": "冰元素",
|
||||
"weapon": "单手剑",
|
||||
"skills": [
|
||||
{
|
||||
"nameEn": "havoc_sunder",
|
||||
"name": "极恶技·断",
|
||||
"skillTag": [
|
||||
"普通攻击"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1101,
|
||||
"nameEn": "cryo",
|
||||
"type": "冰元素",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"id": 1109,
|
||||
"nameEn": "unaligned_element",
|
||||
"type": "无色元素",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "havoc_warp",
|
||||
"name": "极恶技·闪",
|
||||
"skillTag": [
|
||||
"元素战技"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1101,
|
||||
"nameEn": "cryo",
|
||||
"type": "冰元素",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "havoc_extinction",
|
||||
"name": "极恶技·尽",
|
||||
"skillTag": [
|
||||
"元素爆发"
|
||||
],
|
||||
"cost": [
|
||||
{
|
||||
"id": 1101,
|
||||
"nameEn": "cryo",
|
||||
"type": "冰元素",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nameEn": "reason_beyond_reason",
|
||||
"name": "理外之理",
|
||||
"skillTag": [
|
||||
"被动技能"
|
||||
],
|
||||
"cost": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -111,7 +111,8 @@ public class GeniusInvokationControl
|
||||
TaskControl.TrySuspend();
|
||||
if (!SystemControl.IsGenshinImpactActiveByProcess())
|
||||
{
|
||||
_logger.LogWarning("当前获取焦点的窗口不是原神,暂停");
|
||||
var name = SystemControl.GetActiveByProcess();
|
||||
_logger.LogWarning($"当前获取焦点的窗口为: {name},不是原神,暂停");
|
||||
throw new RetryException("当前获取焦点的窗口不是原神");
|
||||
}
|
||||
}, TimeSpan.FromSeconds(1), 100);
|
||||
@@ -714,13 +715,6 @@ public class GeniusInvokationControl
|
||||
Sleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
// 存在吞星之鲸的情况下,烧牌后等待加血动画
|
||||
if (duel.Characters.Any(c => c is { Name: "吞星之鲸" }))
|
||||
{
|
||||
Debug.WriteLine("存在吞星之鲸的情况下,烧牌后等待动画");
|
||||
Sleep(5000);
|
||||
}
|
||||
}
|
||||
|
||||
return ActionPhaseUseSkill(skillIndex);
|
||||
@@ -1254,4 +1248,4 @@ public class GeniusInvokationControl
|
||||
return -10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 918 B |
|
After Width: | Height: | Size: 350 B |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 707 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 755 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 682 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
2003
BetterGenshinImpact/GameTask/AutoLeyLineOutcrop/Assets/config.json
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1018 B |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 696 B |
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"info": {
|
||||
"authors": [],
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "",
|
||||
"enable_monster_loot_split": false,
|
||||
"last_modified_time": 1757822946823,
|
||||
"map_match_method": "",
|
||||
"map_name": "Teyvat",
|
||||
"name": "挪德卡莱3-蓝泊湖-2-rerun",
|
||||
"tags": [],
|
||||
"type": "collect",
|
||||
"version": "1.0"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 1,
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 9099.5234375,
|
||||
"y": 2296.4248046875
|
||||
},
|
||||
{
|
||||
"action": "stop_flying",
|
||||
"action_params": "",
|
||||
"id": 2,
|
||||
"move_mode": "fly",
|
||||
"type": "path",
|
||||
"x": 9094.8037109375,
|
||||
"y": 2281.67529296875
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 3,
|
||||
"move_mode": "dash",
|
||||
"type": "path",
|
||||
"x": 9068.869140625,
|
||||
"y": 2268.197021484375
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 4,
|
||||
"move_mode": "dash",
|
||||
"type": "path",
|
||||
"x": 9058.2861328125,
|
||||
"y": 2253.7373046875
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 5,
|
||||
"move_mode": "run",
|
||||
"type": "path",
|
||||
"x": 9041.37890625,
|
||||
"y": 2250.19384765625
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 6,
|
||||
"move_mode": "dash",
|
||||
"type": "path",
|
||||
"x": 9026.62109375,
|
||||
"y": 2235.5322265625
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 7,
|
||||
"move_mode": "dash",
|
||||
"type": "path",
|
||||
"x": 9024.693359375,
|
||||
"y": 2198.438720703125
|
||||
},
|
||||
{
|
||||
"action": "stop_flying",
|
||||
"action_params": "1000",
|
||||
"id": 8,
|
||||
"move_mode": "fly",
|
||||
"type": "path",
|
||||
"x": 9018.0087890625,
|
||||
"y": 2152.14990234375
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 9,
|
||||
"move_mode": "walk",
|
||||
"type": "target",
|
||||
"x": 9018.50390625,
|
||||
"y": 2146.216064453125
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"info": {
|
||||
"authors": [],
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "",
|
||||
"enable_monster_loot_split": false,
|
||||
"last_modified_time": 1768391916967,
|
||||
"map_match_method": "SIFT",
|
||||
"map_name": "Teyvat",
|
||||
"name": "挪德卡莱4-望崖营垒-2-rerun",
|
||||
"tags": [],
|
||||
"type": "collect",
|
||||
"version": "1.0"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 1,
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 10043.07421875,
|
||||
"y": 5938.26025390625
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 2,
|
||||
"move_mode": "dash",
|
||||
"type": "path",
|
||||
"x": 10014.490234375,
|
||||
"y": 5945.666015625
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 3,
|
||||
"move_mode": "jump",
|
||||
"type": "path",
|
||||
"x": 10011.1904296875,
|
||||
"y": 5951.84716796875
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 4,
|
||||
"move_mode": "walk",
|
||||
"type": "path",
|
||||
"x": 10006.8232421875,
|
||||
"y": 5972.55029296875
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 5,
|
||||
"locked": false,
|
||||
"move_mode": "dash",
|
||||
"type": "target",
|
||||
"x": 10039.93359375,
|
||||
"y": 5999.8994140625
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"info": {
|
||||
"authors": [],
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "",
|
||||
"enable_monster_loot_split": false,
|
||||
"last_modified_time": 1768473650004,
|
||||
"map_match_method": "SIFT",
|
||||
"map_name": "Teyvat",
|
||||
"name": "挪德卡莱5-厄布拉神柱-2-rerun",
|
||||
"tags": [],
|
||||
"type": "collect",
|
||||
"version": "1.0"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 1,
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 9920.326171875,
|
||||
"y": 5727.9716796875
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 2,
|
||||
"move_mode": "dash",
|
||||
"type": "target",
|
||||
"x": 10005.4228515625,
|
||||
"y": 5797.181640625
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"info": {
|
||||
"authors": [],
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "",
|
||||
"enable_monster_loot_split": false,
|
||||
"last_modified_time": 1768473974691,
|
||||
"map_match_method": "SIFT",
|
||||
"map_name": "Teyvat",
|
||||
"name": "挪德卡莱5-厄布拉神柱-4-rerun",
|
||||
"tags": [],
|
||||
"type": "collect",
|
||||
"version": "1.0"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 1,
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 10068.767578125,
|
||||
"y": 5628.6015625
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 2,
|
||||
"move_mode": "dash",
|
||||
"type": "path",
|
||||
"x": 10106.7109375,
|
||||
"y": 5636.09033203125
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 3,
|
||||
"move_mode": "jump",
|
||||
"type": "path",
|
||||
"x": 10117.119140625,
|
||||
"y": 5647.3115234375
|
||||
},
|
||||
{
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"id": 4,
|
||||
"move_mode": "dash",
|
||||
"type": "target",
|
||||
"x": 10133.953125,
|
||||
"y": 5683.69970703125
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹1-秋分山西侧-1-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 4146.91,
|
||||
"y": 2606.27,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4191.61,
|
||||
"y": 2522.25,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4183.27,
|
||||
"y": 2502.37,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹1-秋分山西侧-2-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4146.69,
|
||||
"y": 2606.25,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4157.89,
|
||||
"y": 2579.28,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4150.46,
|
||||
"y": 2530.25,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4180.84,
|
||||
"y": 2450.05,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 4190.03,
|
||||
"y": 2426.41,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹1-秋分山西侧-3-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4375.5,
|
||||
"y": 2280.05,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4334.42,
|
||||
"y": 2337.57,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4327.22,
|
||||
"y": 2345.84,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4280.2,
|
||||
"y": 2342.5,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 4264.16,
|
||||
"y": 2357.42,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"x": 4246.28,
|
||||
"y": 2374.05,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹1-秋分山西侧-4-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4375.37,
|
||||
"y": 2281.02,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4383.66,
|
||||
"y": 2268.13,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4318.1,
|
||||
"y": 2235.66,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4299.75,
|
||||
"y": 2232.59,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹1-秋分山西侧-5-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4375.04,
|
||||
"y": 2280.11,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4394.32,
|
||||
"y": 2257.98,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4402.53,
|
||||
"y": 2253.27,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹2-芒索斯山东麓-1-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4984.79,
|
||||
"y": 4462.98,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4970.03,
|
||||
"y": 4415.96,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4962.82,
|
||||
"y": 4395.81,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹2-芒索斯山东麓-2-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4984.69,
|
||||
"y": 4462.91,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4952.04,
|
||||
"y": 4468.84,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹2-芒索斯山东麓-3-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 4984.75,
|
||||
"y": 4462.97,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 5032.75,
|
||||
"y": 4492.81,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 5043.36,
|
||||
"y": 4479.99,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹2-芒索斯山东麓-4-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 4984.75,
|
||||
"y": 4462.94,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 5046.47,
|
||||
"y": 4496.56,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 5077.78,
|
||||
"y": 4494.85,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 5107.19,
|
||||
"y": 4542.49,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 5087.02,
|
||||
"y": 4573.27,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹3-新枫丹科学院-1-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 4498.18,
|
||||
"y": 4710.79,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4496.67,
|
||||
"y": 4741.03,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4539.94,
|
||||
"y": 4771.01,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4556.1,
|
||||
"y": 4762.42,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹3-新枫丹科学院-2-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 4498.15,
|
||||
"y": 4710.78,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4494.08,
|
||||
"y": 4762.04,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4499.02,
|
||||
"y": 4825.24,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4517.81,
|
||||
"y": 4866.48,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹3-新枫丹科学院-3-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4624.36,
|
||||
"y": 4951.78,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4607.47,
|
||||
"y": 4925.97,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4578.63,
|
||||
"y": 4913.28,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹3-新枫丹科学院-4-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 4624.37,
|
||||
"y": 4951.84,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4635.65,
|
||||
"y": 4951.5,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4665.65,
|
||||
"y": 4970.14,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4679.47,
|
||||
"y": 4977.83,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹4-柔灯港-1-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 2873.54,
|
||||
"y": 3512.04,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 2890.51,
|
||||
"y": 3532.46,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 2904.51,
|
||||
"y": 3545.62,
|
||||
"type": "path",
|
||||
"move_mode": "climb",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 2929.82,
|
||||
"y": 3563.57,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 2932.47,
|
||||
"y": 3583.9,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹4-柔灯港-2-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 3032.66,
|
||||
"y": 3732.42,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 3019.81,
|
||||
"y": 3712.95,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 3015.82,
|
||||
"y": 3665.19,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 3010.95,
|
||||
"y": 3624.05,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 3008.4,
|
||||
"y": 3602.59,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹4-柔灯港-3-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 3032.67,
|
||||
"y": 3732.43,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 3045.59,
|
||||
"y": 3710.54,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 3039.93,
|
||||
"y": 3671.22,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 3055.35,
|
||||
"y": 3641.24,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 3077.19,
|
||||
"y": 3602.84,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹4-柔灯港-4-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 3032.68,
|
||||
"y": 3732.45,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 3038.55,
|
||||
"y": 3718.42,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 3067.2,
|
||||
"y": 3698.43,
|
||||
"type": "target",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 3079.73,
|
||||
"y": 3675.76,
|
||||
"type": "path",
|
||||
"move_mode": "dash",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 3091.8,
|
||||
"y": 3654.75,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹5-秋分山东侧-1-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4146.68,
|
||||
"y": 2606.23,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4116.21,
|
||||
"y": 2592.0,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4098.63,
|
||||
"y": 2584.16,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹5-秋分山东侧-2-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4146.78,
|
||||
"y": 2606.25,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4091.37,
|
||||
"y": 2573.86,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4063.52,
|
||||
"y": 2564.29,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹5-秋分山东侧-3-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 3917.29,
|
||||
"y": 2576.43,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 3922.84,
|
||||
"y": 2562.64,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 3986.65,
|
||||
"y": 2599.51,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4034.13,
|
||||
"y": 2625.87,
|
||||
"action": "fight",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 3999.66,
|
||||
"y": 2613.18,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹5-秋分山东侧-4-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"type": "teleport",
|
||||
"x": 3917.28,
|
||||
"y": 2576.33,
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 3917.23,
|
||||
"y": 2573.3,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 3907.25,
|
||||
"y": 2607.02,
|
||||
"type": "path",
|
||||
"move_mode": "fly",
|
||||
"action": "stop_flying",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 3921.35,
|
||||
"y": 2617.81,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": "",
|
||||
"locked": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹6-厄里那斯-1-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4749.59,
|
||||
"y": 2636.21,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4758.19,
|
||||
"y": 2611.12,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4760.8,
|
||||
"y": 2574.52,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹6-厄里那斯-2-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4689.61,
|
||||
"y": 2429.43,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4631.0,
|
||||
"y": 2468.98,
|
||||
"action": "",
|
||||
"move_mode": "fly",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4653.67,
|
||||
"y": 2531.89,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "枫丹6-厄里那斯-3-rerun",
|
||||
"type": "collect",
|
||||
"author": "平面镜",
|
||||
"version": "1.1",
|
||||
"description": "",
|
||||
"bgi_version": "0.42.3"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 4689.57,
|
||||
"y": 2429.33,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 4664.06,
|
||||
"y": 2408.48,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 4628.4,
|
||||
"y": 2418.34,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"x": 4585.56,
|
||||
"y": 2438.06,
|
||||
"action": "",
|
||||
"move_mode": "dash",
|
||||
"action_params": "",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"x": 4568.49,
|
||||
"y": 2433.23,
|
||||
"action": "",
|
||||
"move_mode": "walk",
|
||||
"action_params": "",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||