From d7302b65c3fc8000bebfc3a08356ebb08ad092d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sun, 24 Nov 2024 17:48:23 +0800 Subject: [PATCH] auto domain: tp & switch party & artifact salvage --- .../Simple/AllMap/BigMapMatchTest.cs | 2 +- .../Simple/AllMap/MapTeleportPointDraw.cs | 2 +- .../GameTask/AutoDomain/AutoDomainTask.cs | 32 +++- .../GameTask/AutoTrackPath/TpTask.cs | 4 +- .../Assets/1920x1080/bag_artifact_checked.png | Bin 0 -> 5954 bytes .../1920x1080/bag_artifact_unchecked.png | Bin 0 -> 3793 bytes .../Assets/1920x1080/btn_artifact_salvage.png | Bin 0 -> 1778 bytes .../btn_artifact_salvage_confirm.png | Bin 0 -> 2062 bytes .../Common/Element/Assets/ElementAssets.cs | 42 +++++- .../Common/Element/Assets/MapAssets.cs | 36 ----- .../Common/Element/Assets/MapLazyAssets.cs | 52 +++++++ .../Common/Job/ArtifactSalvageTask.cs | 105 ++++++++++++- .../GameTask/Common/Job/SwitchPartyTask.cs | 5 +- .../GameTask/GameTaskManager.cs | 2 +- .../Helpers/Extensions/RectCutExtension.cs | 51 +++++++ .../View/Pages/TaskSettingsPage.xaml | 139 ++++++++++++++++-- .../ViewModel/Pages/HotKeyPageViewModel.cs | 7 +- .../Pages/TaskSettingsPageViewModel.cs | 12 +- 18 files changed, 416 insertions(+), 75 deletions(-) create mode 100644 BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/bag_artifact_checked.png create mode 100644 BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/bag_artifact_unchecked.png create mode 100644 BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/btn_artifact_salvage.png create mode 100644 BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/btn_artifact_salvage_confirm.png create mode 100644 BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.cs create mode 100644 BetterGenshinImpact/Helpers/Extensions/RectCutExtension.cs diff --git a/BetterGenshinImpact.Test/Simple/AllMap/BigMapMatchTest.cs b/BetterGenshinImpact.Test/Simple/AllMap/BigMapMatchTest.cs index 8345d188..700dcdab 100644 --- a/BetterGenshinImpact.Test/Simple/AllMap/BigMapMatchTest.cs +++ b/BetterGenshinImpact.Test/Simple/AllMap/BigMapMatchTest.cs @@ -17,7 +17,7 @@ public class BigMapMatchTest SpeedTimer speedTimer = new(); // var mainMap100BlockMat = new Mat(@"D:\HuiPrograming\Projects\CSharp\MiHoYo\BetterGenshinImpact\BetterGenshinImpact\Assets\Map\mainMap100Block.png", ImreadModes.Grayscale); - var map2048 = MapAssets.Instance.MainMap2048BlockMat.Value; + var map2048 = new Mat(@"E:\HuiTask\更好的原神\地图匹配\有用的素材\5.2\map_52_2048.png", ImreadModes.Grayscale); var mainMap100BlockMat = ResizeHelper.Resize(map2048, 1d / (4 * 2)); Cv2.ImWrite(@"E:\HuiTask\更好的原神\地图匹配\有用的素材\mainMap128Block.png", mainMap100BlockMat); diff --git a/BetterGenshinImpact.Test/Simple/AllMap/MapTeleportPointDraw.cs b/BetterGenshinImpact.Test/Simple/AllMap/MapTeleportPointDraw.cs index 9d769f91..718c4db8 100644 --- a/BetterGenshinImpact.Test/Simple/AllMap/MapTeleportPointDraw.cs +++ b/BetterGenshinImpact.Test/Simple/AllMap/MapTeleportPointDraw.cs @@ -16,7 +16,7 @@ public class MapTeleportPointDraw // var pList = LoadTeleportPoint(@"E:\HuiTask\更好的原神\地图匹配\地图点位\5.0"); // pList.AddRange(MapAssets.Instance.TpPositions); var map = new Mat(@"E:\HuiTask\更好的原神\地图匹配\有用的素材\5.0\mainMap1024BlockColor.png"); - DrawTeleportPoint(map, MapAssets.Instance.TpPositions); + DrawTeleportPoint(map, MapLazyAssets.Instance.TpPositions); Cv2.ImWrite(@"E:\HuiTask\更好的原神\地图匹配\有用的素材\5.0\传送点_1024_0.34.3.png", map); } diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs index 90564273..a6f692c4 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs @@ -75,10 +75,10 @@ public class AutoDomainTask : ISoloTask Init(); NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Started().Build()); // TODO: 通知后续需要删除迁移 - // // 传送到秘境 - // await TpDomain(); - // // 切换队伍 - // await SwitchParty(_taskParam.PartyName); + // 传送到秘境 + await TpDomain(); + // 切换队伍 + await SwitchParty(_taskParam.PartyName); var combatScenes = new CombatScenes().InitializeTeam(CaptureToRectArea()); @@ -133,6 +133,11 @@ public class AutoDomainTask : ISoloTask NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Progress().Build()); } + + await Delay(1000, ct); + await Bv.WaitForMainUi(_ct); + + await ArtifactSalvage(); } private void Init() @@ -179,7 +184,7 @@ public class AutoDomainTask : ISoloTask // 传送到秘境 if (!string.IsNullOrEmpty(_taskParam.DomainName)) { - if (MapAssets.Instance.DomainPositionMap.TryGetValue(_taskParam.DomainName, out var domainPosition)) + if (MapLazyAssets.Instance.DomainPositionMap.TryGetValue(_taskParam.DomainName, out var domainPosition)) { Logger.LogInformation("自动秘境:传送到秘境{Text}", _taskParam.DomainName); await new TpTask(_ct).Tp(domainPosition.X, domainPosition.Y); @@ -187,7 +192,7 @@ public class AutoDomainTask : ISoloTask await Bv.WaitForMainUi(_ct); await Delay(1000, _ct); var walkKey = User32.VK.VK_W; - if (MapAssets.Instance.DomainBackwardList.Contains(_taskParam.DomainName)) + if (MapLazyAssets.Instance.DomainBackwardList.Contains(_taskParam.DomainName)) { walkKey = User32.VK.VK_S; } @@ -885,4 +890,19 @@ public class AutoDomainTask : ISoloTask Logger.LogInformation("剩余:浓缩树脂 {CondensedResinCount} 脆弱树脂 {FragileResinCount}", condensedResinCount, fragileResinCount); return (condensedResinCount, fragileResinCount); } + + private async Task ArtifactSalvage() + { + if (!_taskParam.AutoArtifactSalvage) + { + return; + } + + if (!int.TryParse(_taskParam.MaxArtifactStar, out var star)) + { + star = 4; + } + + await new ArtifactSalvageTask().Start(star, _ct); + } } \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs b/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs index 26a64225..672a38db 100644 --- a/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs +++ b/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs @@ -347,7 +347,7 @@ public class TpTask(CancellationToken ct) double recentX = 0; double recentY = 0; var minDistance = double.MaxValue; - foreach (var tpPosition in MapAssets.Instance.TpPositions) + foreach (var tpPosition in MapLazyAssets.Instance.TpPositions) { var distance = Math.Sqrt(Math.Pow(tpPosition.X - x, 2) + Math.Pow(tpPosition.Y - y, 2)); if (distance < minDistance) @@ -388,7 +388,7 @@ public class TpTask(CancellationToken ct) } var minCountry = "当前位置"; - foreach (var (country, position) in MapAssets.Instance.CountryPositions) + foreach (var (country, position) in MapLazyAssets.Instance.CountryPositions) { var distance = Math.Sqrt(Math.Pow(position[0] - x, 2) + Math.Pow(position[1] - y, 2)); if (distance < minDistance) diff --git a/BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/bag_artifact_checked.png b/BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/bag_artifact_checked.png new file mode 100644 index 0000000000000000000000000000000000000000..cea95e187e367773d6ac1216be954a7cfd819826 GIT binary patch literal 5954 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 literal 0 HcmV?d00001 diff --git a/BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/bag_artifact_unchecked.png b/BetterGenshinImpact/GameTask/Common/Element/Assets/1920x1080/bag_artifact_unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..7d15f5369f45ec2abc23120ad321750032d3d1e8 GIT binary patch literal 3793 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 public RecognitionObject CraftCondensedResin; + public RecognitionObject BagArtifactUnchecked; + public RecognitionObject BagArtifactChecked; + public RecognitionObject BtnArtifactSalvage; + public RecognitionObject BtnArtifactSalvageConfirm; + private ElementAssets() { // 按钮 @@ -162,5 +168,39 @@ public class ElementAssets : BaseAssets RegionOfInterest = new Rect(CaptureRect.Width / 2, 0, CaptureRect.Width / 2, CaptureRect.Height / 3 * 2), DrawOnWindow = false }.InitTemplate(); + + // 分解圣遗物 + BagArtifactUnchecked = new RecognitionObject + { + Name = "BagArtifactUnchecked", + RecognitionType = RecognitionTypes.TemplateMatch, + TemplateImageMat = GameTaskManager.LoadAssetImage(@"Common\Element", "bag_artifact_unchecked.png"), + RegionOfInterest = CaptureRect.CutTop(0.1), + DrawOnWindow = false + }.InitTemplate(); + BagArtifactChecked = new RecognitionObject + { + Name = "BagArtifactChecked", + RecognitionType = RecognitionTypes.TemplateMatch, + TemplateImageMat = GameTaskManager.LoadAssetImage(@"Common\Element", "bag_artifact_checked.png"), + RegionOfInterest = CaptureRect.CutTop(0.1), + DrawOnWindow = false + }.InitTemplate(); + BtnArtifactSalvage = new RecognitionObject + { + Name = "BtnArtifactSalvage", + RecognitionType = RecognitionTypes.TemplateMatch, + TemplateImageMat = GameTaskManager.LoadAssetImage(@"Common\Element", "btn_artifact_salvage.png"), + RegionOfInterest = CaptureRect.CutBottom(0.1), + DrawOnWindow = false + }.InitTemplate(); + BtnArtifactSalvageConfirm = new RecognitionObject + { + Name = "BtnArtifactSalvageConfirm", + RecognitionType = RecognitionTypes.TemplateMatch, + TemplateImageMat = GameTaskManager.LoadAssetImage(@"Common\Element", "btn_artifact_salvage_confirm.png"), + RegionOfInterest = CaptureRect.CutBottom(0.1), + DrawOnWindow = false + }.InitTemplate(); } -} +} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs index 89927f1e..3c34b36c 100644 --- a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs +++ b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs @@ -13,46 +13,10 @@ namespace BetterGenshinImpact.GameTask.Common.Element.Assets; public class MapAssets : BaseAssets { - public Lazy MainMap2048BlockMat { get; } = new(() => new Mat(@"E:\HuiTask\更好的原神\地图匹配\有用的素材\5.2\map_52_2048.png", ImreadModes.Grayscale)); - - public Lazy MainMap256BlockMat { get; } = new(() => new Mat(Global.Absolute(@"Assets\Map\mainMap256Block.png"), ImreadModes.Grayscale)); - - // 2048 区块下,存在传送点的最大面积,识别结果比这个大的话,需要点击放大 - - // 传送点信息 - - public List TpPositions; - - // 每个地区点击后处于的中心位置 - public readonly Dictionary CountryPositions = new() - { - { "蒙德", [-876, 2278] }, - { "璃月", [270, -666] }, - { "稻妻", [-4400, -3050] }, - { "须弥", [2877, -374] }, - { "枫丹", [4515, 3631] }, - { "纳塔", [8973.5, -1879.1] }, - }; - - public readonly Dictionary DomainPositionMap = new(); - public readonly List DomainPositionsList = []; - // 反方向行走的副本 - public readonly List DomainBackwardList = ["无妄引咎密宫", "芬德尼尔之顶"]; - public Rect MimiMapRect { get; } public MapAssets() { - var json = File.ReadAllText(Global.Absolute(@"GameTask\AutoTrackPath\Assets\tp.json")); - TpPositions = JsonSerializer.Deserialize>(json, ConfigService.JsonOptions) ?? throw new System.Exception("tp.json deserialize failed"); - - // 取出秘境 description=Domain - foreach (var tp in TpPositions.Where(tp => tp.Description == "Domain")) - { - DomainPositionMap[tp.Name] = tp; - DomainPositionsList.Add(tp); - } - MimiMapRect = new Rect((int)Math.Round(62 * AssetScale), (int)Math.Round(19 * AssetScale), (int)Math.Round(212 * AssetScale), (int)Math.Round(212 * AssetScale)); } } diff --git a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.cs b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.cs new file mode 100644 index 00000000..fabd07e2 --- /dev/null +++ b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.cs @@ -0,0 +1,52 @@ +using BetterGenshinImpact.Core.Config; +using BetterGenshinImpact.GameTask.AutoTrackPath.Model; +using BetterGenshinImpact.Service; +using OpenCvSharp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using BetterGenshinImpact.Model; + +namespace BetterGenshinImpact.GameTask.Common.Element.Assets; + +public class MapLazyAssets : Singleton +{ + + // 2048 区块下,存在传送点的最大面积,识别结果比这个大的话,需要点击放大 + + // 传送点信息 + + public List TpPositions; + + // 每个地区点击后处于的中心位置 + public readonly Dictionary CountryPositions = new() + { + { "蒙德", [-876, 2278] }, + { "璃月", [270, -666] }, + { "稻妻", [-4400, -3050] }, + { "须弥", [2877, -374] }, + { "枫丹", [4515, 3631] }, + { "纳塔", [8973.5, -1879.1] }, + }; + + public readonly Dictionary DomainPositionMap = new(); + public readonly List DomainNameList = []; + // 反方向行走的副本 + public readonly List DomainBackwardList = ["无妄引咎密宫", "芬德尼尔之顶"]; + + public MapLazyAssets() + { + var json = File.ReadAllText(Global.Absolute(@"GameTask\AutoTrackPath\Assets\tp.json")); + TpPositions = JsonSerializer.Deserialize>(json, ConfigService.JsonOptions) ?? throw new System.Exception("tp.json deserialize failed"); + + // 取出秘境 description=Domain + foreach (var tp in TpPositions.Where(tp => tp.Description == "Domain")) + { + DomainPositionMap[tp.Name] = tp; + DomainNameList.Add(tp.Name); + } + + } +} diff --git a/BetterGenshinImpact/GameTask/Common/Job/ArtifactSalvageTask.cs b/BetterGenshinImpact/GameTask/Common/Job/ArtifactSalvageTask.cs index 6a525e89..c451d034 100644 --- a/BetterGenshinImpact/GameTask/Common/Job/ArtifactSalvageTask.cs +++ b/BetterGenshinImpact/GameTask/Common/Job/ArtifactSalvageTask.cs @@ -2,27 +2,118 @@ using System; using System.Threading; using System.Threading.Tasks; +using BetterGenshinImpact.Core.Recognition; +using BetterGenshinImpact.Core.Simulator; +using BetterGenshinImpact.GameTask.Common.Element.Assets; +using BetterGenshinImpact.Helpers.Extensions; using Microsoft.Extensions.Logging; +using Vanara.PInvoke; using static BetterGenshinImpact.GameTask.Common.TaskControl; namespace BetterGenshinImpact.GameTask.Common.Job; - /// /// 圣遗物自动分解 /// public class ArtifactSalvageTask { - public async Task Start(CancellationToken ct) + private readonly ReturnMainUiTask _returnMainUiTask = new(); + + public async Task Start(int star, CancellationToken ct) { + await _returnMainUiTask.Start(ct); + // B键打开背包 - + Simulation.SendInput.Keyboard.KeyPress(User32.VK.VK_B); + await Delay(800, ct); + + // 选择圣遗物 - + using var ra = CaptureToRectArea(); + using var artifactBtn = ra.Find(ElementAssets.Instance.BagArtifactChecked); + if (artifactBtn.IsEmpty()) + { + using var artifactBtn2 = ra.Find(ElementAssets.Instance.BagArtifactUnchecked); + if (artifactBtn2.IsExist()) + { + artifactBtn2.Click(); + await Delay(800, ct); + } + else + { + Logger.LogError("未找到背包中圣遗物菜单按钮"); + return; + } + } + + // 点击分解按钮打开分解界面 - + using var ra2 = CaptureToRectArea(); + using var salvageBtn = ra2.Find(ElementAssets.Instance.BtnArtifactSalvage); + if (salvageBtn.IsExist()) + { + salvageBtn.Click(); + await Delay(1000, ct); + } + else + { + Logger.LogError("未找到圣遗物分解按钮"); + return; + } + // 快速选择 - - // 点击分解按钮 + using var ra3 = CaptureToRectArea(); + var ocrList = ra3.FindMulti(RecognitionObject.Ocr(ra3.ToRect().CutLeftBottom(0.25, 0.1))); + foreach (var ocr in ocrList) + { + if (ocr.Text.Contains("快速选择")) + { + ocr.Click(); + await Delay(500, ct); + break; + } + } + + // 确认选择 + using var ra4 = CaptureToRectArea(); + var ocrList2 = ra4.FindMulti(RecognitionObject.Ocr(ra3.ToRect().CutLeft(0.35))); + for (var i = 1; i <= star; i++) + { + foreach (var ocr in ocrList2) + { + if (ocr.Text.Contains(i + "星")) + { + ocr.Click(); + await Delay(500, ct); + break; + } + } + } + + Bv.ClickWhiteConfirmButton(ra4); + await Delay(500, ct); + + // 点击分解 + using var ra5 = CaptureToRectArea(); + var salvageBtnConfirm = ra5.Find(ElementAssets.Instance.BtnArtifactSalvageConfirm); + if (salvageBtnConfirm.IsExist()) + { + salvageBtnConfirm.Click(); + await Delay(800, ct); + } + else + { + Logger.LogError("未找到圣遗物分解按钮"); + return; + } + + // 点击确认 + using var ra6 = CaptureToRectArea(); + Bv.ClickBlackConfirmButton(ra6); + await Delay(400, ct); + + Simulation.SendInput.Keyboard.KeyPress(User32.VK.VK_ESCAPE); + + await _returnMainUiTask.Start(ct); } } \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/Common/Job/SwitchPartyTask.cs b/BetterGenshinImpact/GameTask/Common/Job/SwitchPartyTask.cs index 5906c982..977ae06a 100644 --- a/BetterGenshinImpact/GameTask/Common/Job/SwitchPartyTask.cs +++ b/BetterGenshinImpact/GameTask/Common/Job/SwitchPartyTask.cs @@ -62,6 +62,9 @@ public class SwitchPartyTask if (currTeamName == partyName) { Logger.LogInformation("切换队伍,当前队伍[{Name}]即为目标队伍,无需切换", partyName); + Simulation.SendInput.Keyboard.KeyPress(User32.VK.VK_ESCAPE); + await Delay(500, ct); + await _returnMainUiTask.Start(ct); return true; } @@ -156,4 +159,4 @@ public class SwitchPartyTask await Delay(500, ct); await _returnMainUiTask.Start(ct); } -} +} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/GameTaskManager.cs b/BetterGenshinImpact/GameTask/GameTaskManager.cs index b8588a9e..09f1d16a 100644 --- a/BetterGenshinImpact/GameTask/GameTaskManager.cs +++ b/BetterGenshinImpact/GameTask/GameTaskManager.cs @@ -125,7 +125,7 @@ internal class GameTaskManager ElementAssets.DestroyInstance(); QuickSereniteaPotAssets.DestroyInstance(); GameLoadingAssets.DestroyInstance(); - MapAssets.DestroyInstance(); + MapLazyAssets.DestroyInstance(); } /// diff --git a/BetterGenshinImpact/Helpers/Extensions/RectCutExtension.cs b/BetterGenshinImpact/Helpers/Extensions/RectCutExtension.cs new file mode 100644 index 00000000..2fd9ad6e --- /dev/null +++ b/BetterGenshinImpact/Helpers/Extensions/RectCutExtension.cs @@ -0,0 +1,51 @@ +using OpenCvSharp; + +namespace BetterGenshinImpact.Helpers.Extensions; + +/// +/// 按比列切割出对应比例区域的矩形 +/// +public static class RectCutExtension +{ + public static Rect CutLeft(this Rect rect, double ratio) + { + return new Rect(0, 0, (int)(rect.Width * ratio), rect.Height); + } + + public static Rect CutRight(this Rect rect, double ratio) + { + return new Rect(0 + (int)(rect.Width * (1 - ratio)), 0, (int)(rect.Width * ratio), rect.Height); + } + + public static Rect CutTop(this Rect rect, double ratio) + { + return new Rect(0, 0, rect.Width, (int)(rect.Height * ratio)); + } + + public static Rect CutBottom(this Rect rect, double ratio) + { + return new Rect(0, 0 + (int)(rect.Height * (1 - ratio)), rect.Width, (int)(rect.Height * ratio)); + } + + public static Rect CutLeftTop(this Rect rect, double ratioLeft, double ratioTop) + { + return new Rect(0, 0, (int)(rect.Width * ratioLeft), (int)(rect.Height * ratioTop)); + } + + public static Rect CutRightTop(this Rect rect, double ratioRight, double ratioTop) + { + return new Rect(0 + (int)(rect.Width * (1 - ratioRight)), 0, (int)(rect.Width * ratioRight), (int)(rect.Height * ratioTop)); + } + + public static Rect CutLeftBottom(this Rect rect, double ratioLeft, double ratioBottom) + { + return new Rect(0, 0 + (int)(rect.Height * (1 - ratioBottom)), (int)(rect.Width * ratioLeft), (int)(rect.Height * ratioBottom)); + } + + public static Rect CutRightBottom(this Rect rect, double ratioRight, double ratioBottom) + { + return new Rect(0 + (int)(rect.Width * (1 - ratioRight)), 0 + (int)(rect.Height * (1 - ratioBottom)), (int)(rect.Width * ratioRight), (int)(rect.Height * ratioBottom)); + } + + +} diff --git a/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml b/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml index e041fa30..c772b3a1 100644 --- a/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml +++ b/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml @@ -11,7 +11,7 @@ xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" Title="TaskSettingsPage" d:DataContext="{d:DesignInstance Type=pages:TaskSettingsPageViewModel}" - d:DesignHeight="850" + d:DesignHeight="1150" d:DesignWidth="750" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -74,7 +74,9 @@ Grid.Column="0" Foreground="{ui:ThemeResource TextFillColorTertiaryBrush}" TextWrapping="Wrap"> - 全自动打牌 - + 全自动打牌 - + 点击查看使用教程 @@ -118,7 +120,8 @@ SelectedItem="{Binding Config.AutoGeniusInvokationConfig.StrategyName, Mode=TwoWay}"> - + @@ -177,7 +180,9 @@ Grid.Column="0" Foreground="{ui:ThemeResource TextFillColorTertiaryBrush}" TextWrapping="Wrap"> - 装备「王树瑞佑」,通过循环重启游戏刷新并收集木材 - + 装备「王树瑞佑」,通过循环重启游戏刷新并收集木材 - + 点击查看使用教程 @@ -348,7 +353,9 @@ Grid.Column="0" Foreground="{ui:ThemeResource TextFillColorTertiaryBrush}" TextWrapping="Wrap"> - 自动执行选择的战斗策略 - + 自动执行选择的战斗策略 - + 点击查看使用教程 @@ -399,7 +406,8 @@ SelectedItem="{Binding Config.AutoFightConfig.StrategyName, Mode=TwoWay}"> - + @@ -509,7 +517,9 @@ Grid.Column="0" Foreground="{ui:ThemeResource TextFillColorTertiaryBrush}" TextWrapping="Wrap"> - 基于钟离的自动循环刷本 - + 基于钟离的自动循环刷本 - + 点击查看使用教程 @@ -560,11 +570,13 @@ SelectedItem="{Binding Config.AutoFightConfig.StrategyName, Mode=TwoWay}"> - + + @@ -577,22 +589,86 @@ + Text="{Binding Config.AutoDomainConfig.PartyName, Mode=TwoWay}" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -695,6 +771,34 @@ Margin="0,0,36,0" Text="{Binding Config.AutoDomainConfig.LeftRightMoveTimes, Mode=TwoWay}" /> + + + + + + + + + + + + + @@ -777,7 +881,9 @@ Grid.Column="0" Foreground="{ui:ThemeResource TextFillColorTertiaryBrush}" TextWrapping="Wrap"> - 自动走路跟踪剧情任务,不支持每日任务 - + 自动走路跟踪剧情任务,不支持每日任务 - + 点击查看使用教程 @@ -841,7 +947,9 @@ Grid.Column="0" Foreground="{ui:ThemeResource TextFillColorTertiaryBrush}" TextWrapping="Wrap"> - 进入演奏界面使用,下落模式必须选择垂落模式 - + 进入演奏界面使用,下落模式必须选择垂落模式 - + 点击查看使用教程 @@ -853,7 +961,6 @@ -