From 408e372481d3df9bdf45b66af4c5b84feabc00a4 Mon Sep 17 00:00:00 2001 From: huiyadanli Date: Sat, 25 Nov 2023 22:30:18 +0800 Subject: [PATCH] auto wood --- .../BetterGenshinImpact.csproj | 12 ++ .../Exception/DuelEndException.cs | 8 - .../Exception/NormalEndException.cs | 8 + .../GeniusInvokationControl.cs | 10 +- .../AutoGeniusInvokation/Model/Duel.cs | 4 +- .../1920x1080/TheBoonOfTheElderTree.png | Bin 0 -> 1810 bytes .../Assets/1920x1080/character_guide.png | Bin 0 -> 8233 bytes .../AutoWood/Assets/1920x1080/confirm.png | Bin 0 -> 3875 bytes .../AutoWood/Assets/1920x1080/enter_game.png | Bin 0 -> 3618 bytes .../AutoWood/Assets/AutoWoodAssets.cs | 55 ++++++ .../GameTask/AutoWood/AutoWoodTask.cs | 166 ++++++++++++++++++ .../GameTask/AutoWood/Utils/NewRetry.cs | 57 ++++++ .../GameTask/AutoWood/WoodTaskParam.cs | 21 +++ .../GameTask/Common/TaskControl.cs | 31 ++++ .../GameTask/Model/IndependentTaskEnum.cs | 3 +- .../GameTask/TaskTriggerDispatcher.cs | 11 +- .../View/Pages/TaskSettingsPage.xaml | 28 ++- .../Pages/TaskSettingsPageViewModel.cs | 70 ++++++-- 18 files changed, 434 insertions(+), 50 deletions(-) delete mode 100644 BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/DuelEndException.cs create mode 100644 BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/NormalEndException.cs create mode 100644 BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/TheBoonOfTheElderTree.png create mode 100644 BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/character_guide.png create mode 100644 BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/confirm.png create mode 100644 BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/enter_game.png create mode 100644 BetterGenshinImpact/GameTask/AutoWood/Assets/AutoWoodAssets.cs create mode 100644 BetterGenshinImpact/GameTask/AutoWood/AutoWoodTask.cs create mode 100644 BetterGenshinImpact/GameTask/AutoWood/Utils/NewRetry.cs create mode 100644 BetterGenshinImpact/GameTask/AutoWood/WoodTaskParam.cs diff --git a/BetterGenshinImpact/BetterGenshinImpact.csproj b/BetterGenshinImpact/BetterGenshinImpact.csproj index 877631a1..bc058648 100644 --- a/BetterGenshinImpact/BetterGenshinImpact.csproj +++ b/BetterGenshinImpact/BetterGenshinImpact.csproj @@ -271,6 +271,18 @@ Always + + Always + + + Always + + + Always + + + Always + Always diff --git a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/DuelEndException.cs b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/DuelEndException.cs deleted file mode 100644 index 67357681..00000000 --- a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/DuelEndException.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception; - -public class DuelEndException: System.Exception -{ - public DuelEndException(string message) : base(message) - { - } -} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/NormalEndException.cs b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/NormalEndException.cs new file mode 100644 index 00000000..f20f55bb --- /dev/null +++ b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Exception/NormalEndException.cs @@ -0,0 +1,8 @@ +namespace BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception; + +public class NormalEndException: System.Exception +{ + public NormalEndException(string message) : base(message) + { + } +} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs index 582aed90..66435630 100644 --- a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs +++ b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs @@ -494,7 +494,7 @@ public class GeniusInvokationControl if (IsDuelEnd()) { - throw new DuelEndException("对战已结束,停止自动打牌!"); + throw new NormalEndException("对战已结束,停止自动打牌!"); } //MyLogger.Debug("识别骰子数量不正确,第{}次重试中...", retryCount); @@ -903,7 +903,7 @@ public class GeniusInvokationControl } else if (IsDuelEnd()) { - throw new DuelEndException("对战已结束,停止自动打牌!"); + throw new NormalEndException("对战已结束,停止自动打牌!"); } retryCount++; @@ -946,7 +946,7 @@ public class GeniusInvokationControl } else if (IsDuelEnd()) { - throw new DuelEndException("对战已结束,停止自动打牌!"); + throw new NormalEndException("对战已结束,停止自动打牌!"); } else { @@ -976,7 +976,7 @@ public class GeniusInvokationControl /// 角色被打败后要切换角色 /// /// - /// + /// public void DoWhenCharacterDefeated(Duel duel) { _logger.LogInformation("当前出战角色被打败,需要选择新的出战角色"); @@ -990,7 +990,7 @@ public class GeniusInvokationControl var orderList = duel.GetCharacterSwitchOrder(); if (orderList.Count == 0) { - throw new DuelEndException("后续行动策略中,已经没有可切换且存活的角色了,结束自动打牌(建议添加更多行动)"); + throw new NormalEndException("后续行动策略中,已经没有可切换且存活的角色了,结束自动打牌(建议添加更多行动)"); } foreach (var j in orderList) diff --git a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs index b538b651..6261392f 100644 --- a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs +++ b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs @@ -265,7 +265,7 @@ public class Duel if (ActionCommandQueue.Count == 0) { - throw new DuelEndException("策略中所有指令已经执行完毕,结束自动打牌"); + throw new NormalEndException("策略中所有指令已经执行完毕,结束自动打牌"); } } @@ -283,7 +283,7 @@ public class Duel { _logger.LogInformation(ex.Message); } - catch (DuelEndException ex) + catch (NormalEndException ex) { _logger.LogInformation(ex.Message); _logger.LogInformation("对局结束"); diff --git a/BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/TheBoonOfTheElderTree.png b/BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/TheBoonOfTheElderTree.png new file mode 100644 index 0000000000000000000000000000000000000000..893c154d0ead1d9cf8deed9e61844f86e22a6b6b GIT binary patch literal 1810 zcmV+t2krQYP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2B%3xK~zXfO_k|W zlW7)5^C!*JOik5v^@n!4#?oOGgMx@#E1QkV(nt_Uh(I7gAnbzdC?GZngdLKQkOT~b zO;!~Y1OYd+r$3*$33k_fIF;nBm1~A z@tlvVHS=65oh7Dhfzk&J)Zf>VRMk(-^d7MdizGaFj;e8$jOI1cn^#dkTqmPtou^h8 zpSB0sUhY8AP^}@Su8aKIhYSzhr?|C`2*Vr~3un1hG)JVo_P+c|>&hX+9f(h9UN}=qbRJapr^MQeWQspx@pel z%@CIFAzbevqF|P=dmh?WzLIS};O@kGdN;rDc=ZsCb)T;F&$K-M%+>075+5x2Ql&Ml zl3Kq)vPf=JJtwYwk%}%C3ibUyPH86z7DBS05t=(qsBVTcc^;oIw7^5h>KEFUK4O1+ zNX5)Y46ctj-~En#_bYd8@5vc>MN<1RH(Hj6t9{NbkzTJ_B(`Fn=(2gDO6O4cXHF2H zaS)W{;?&(Kk-1Td?6jm)mdugT`GVdTUw9~YZr}OMhi&I8lY778+WRkh=K+aB@3=Lv zOQKNY-s3{WoJbak5u(fHxaJe7y`l*bIen>uMdn{LL*2{)74DCujP8?Reoy!Mp(Oe$ z?K&jGvd((Koo1Ykb`5v`-mvYxzev%YkQFQs7q?sjA--NKkj6@o#x8hMxj3I|Au%C@c}B`-_9+$F(5v_8Y z*q$A<=54||c8GkkMbo&8MvH?+tAm@}YiI}NxlrQfYS}Y>DxKtV$s~%d>Ugy2H!&1w zY0`z07x!0cvi(Ue>7&H1444em|qre4bG@m_mDooksY zi-$Ws^C%0gQg~dj`M6-T5oxq@zQ}>XC($LM)Q;hwX_kZG#X_L^NEo28;U_2ZWWEd4 z;09IBmsGi4aj|2A1k)?xyI)Xgok!I@Pl$*v7{{f!ne)Y7EJPI9h$xgquD)~vGDh&r z7!}5R90`wPL0L9}wDO!~JJ5};5!<~UWdAP;%CgE1w8;*XRh4Zgq{vBN zjuWL$Bst#wIDs;6Qi|F*D~ZBHaQ2=>-g_5;)XW&>UnzqqEUnS#?^hp*B$ZbdAgKbs zNrEI%P?i^IVV0fKUP-RYm)!eZrOr*L%r8_gLcN_c1>=O|N>@a1Ts1&!-b2QEG$=Yt z!k8Xak!Ec6*}X0F7VwI^Z3|S(f$$=SLaAycQq#zf$z8siI-NTyB0<`BghPHa#_`)G zPNY2Hahr}MOA7A6L=;)k-&3hMjio)2XM<@J)l{I&8pJ<+l;Ct(Pa+6Qe}YyO$oUptx%?xlf&Zip`{oj?b@1}_PtE`lbpQYW07*qoM6N<$f_Noy A%m4rY literal 0 HcmV?d00001 diff --git a/BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/character_guide.png b/BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/character_guide.png new file mode 100644 index 0000000000000000000000000000000000000000..78220fdc2dfd0864eb6091e706aab3f08f829f6b GIT binary patch literal 8233 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 literal 0 HcmV?d00001 diff --git a/BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/enter_game.png b/BetterGenshinImpact/GameTask/AutoWood/Assets/1920x1080/enter_game.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd63f86f645528f64afed4cc4a9640f04a8dedf GIT binary patch literal 3618 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 oNAj+n|I +/// 自动伐木 +/// +public class AutoWoodTask +{ + private readonly AutoWoodAssets _assets = new(); + + private bool _first = true; + + private readonly ClickOffset _clickOffset; + + public AutoWoodTask() + { + var captureArea = TaskContext.Instance().SystemInfo.CaptureAreaRect; + var assetScale = TaskContext.Instance().SystemInfo.AssetScale; + _clickOffset = new ClickOffset(captureArea.X, captureArea.Y, assetScale); + } + + public void Start(WoodTaskParam taskParam) + { + try + { + Logger.LogInformation("→ {Text} 设置伐木总次数:{Cnt}", "自动伐木,启动!", taskParam.WoodRoundNum); + SystemControl.ActivateWindow(); + for (var i = 0; i < taskParam.WoodRoundNum; i++) + { + Logger.LogInformation("第{Cnt}次伐木", i + 1); + if (taskParam.Cts.IsCancellationRequested) + { + break; + } + + Felling(taskParam); + VisionContext.Instance().DrawContent.ClearAll(); + Sleep(500, taskParam.Cts); + } + } + catch (NormalEndException e) + { + Logger.LogInformation(e.Message); + } + catch (Exception e) + { + Logger.LogInformation(e.Message); + MessageBox.Show("自动伐木时异常:" + e.Source + "\r\n--" + Environment.NewLine + e.StackTrace + "\r\n---" + Environment.NewLine + e.Message); + } + finally + { + VisionContext.Instance().DrawContent.ClearAll(); + TaskSettingsPageViewModel.SetSwitchAutoWoodButtonText(false); + Logger.LogInformation("← {Text}", "退出自动伐木"); + taskParam.Dispatcher.StartTimer(); + } + } + + private void Felling(WoodTaskParam taskParam) + { + // 1. 按 z 触发「王树瑞佑」 + PressZ(taskParam); + + // 2. 按下 ESC 打开菜单 并退出游戏 + PressEsc(taskParam); + + // 3. 等待进入游戏 + EnterGame(taskParam); + } + + + private void PressZ(WoodTaskParam taskParam) + { + if (_first) + { + var content = CaptureToContent(taskParam.Dispatcher.GameCapture); + var ra = content.CaptureRectArea.Find(_assets.TheBoonOfTheElderTreeRo); + if (ra.IsEmpty()) + { + throw new NormalEndException("请先装备小道具「王树瑞佑」!"); + } + else + { + Simulation.SendInput.Keyboard.KeyPress(VirtualKeyCode.VK_Z); + _first = false; + } + } + else + { + NewRetry.Do(() => + { + Sleep(1, taskParam.Cts); + var content = CaptureToContent(taskParam.Dispatcher.GameCapture); + var ra = content.CaptureRectArea.Find(_assets.TheBoonOfTheElderTreeRo); + if (ra.IsEmpty()) + { + throw new RetryException("未找到「王树瑞佑」"); + } + + Simulation.SendInput.Keyboard.KeyPress(VirtualKeyCode.VK_Z); + }, TimeSpan.FromSeconds(1), 120); + } + + Sleep(300, taskParam.Cts); + } + + private void PressEsc(WoodTaskParam taskParam) + { + Simulation.SendInput.Keyboard.KeyPress(VirtualKeyCode.ESCAPE); + Sleep(800, taskParam.Cts); + // 确认在菜单界面 + NewRetry.Do(() => + { + Sleep(1, taskParam.Cts); + var content = CaptureToContent(taskParam.Dispatcher.GameCapture); + var ra = content.CaptureRectArea.Find(_assets.CharacterGuideRo); + if (ra.IsEmpty()) + { + throw new RetryException("未检测到弹出菜单"); + } + + Simulation.SendInput.Keyboard.KeyPress(VirtualKeyCode.VK_Z); + }, TimeSpan.FromSeconds(1), 3); + + // 点击退出 + var captureArea = TaskContext.Instance().SystemInfo.CaptureAreaRect; + _clickOffset.Click(50, captureArea.Height - 50); + + Sleep(500, taskParam.Cts); + + // 点击确认 + var content = CaptureToContent(taskParam.Dispatcher.GameCapture); + content.CaptureRectArea.Find(_assets.ConfirmRo, ra => { ra.ClickCenter(); }); + } + + private void EnterGame(WoodTaskParam taskParam) + { + NewRetry.Do(() => + { + Sleep(1, taskParam.Cts); + var content = CaptureToContent(taskParam.Dispatcher.GameCapture); + var ra = content.CaptureRectArea.Find(_assets.EnterGameRo); + if (ra.IsEmpty()) + { + throw new RetryException("未检测进入游戏字样"); + } + else + { + Simulation.SendInput.Mouse.LeftButtonClick(); + Sleep(5000, taskParam.Cts); + } + }, TimeSpan.FromSeconds(1), 50); + } +} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/AutoWood/Utils/NewRetry.cs b/BetterGenshinImpact/GameTask/AutoWood/Utils/NewRetry.cs new file mode 100644 index 00000000..1f78a713 --- /dev/null +++ b/BetterGenshinImpact/GameTask/AutoWood/Utils/NewRetry.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception; + +namespace BetterGenshinImpact.GameTask.AutoWood.Utils +{ + /// + /// https://stackoverflow.com/questions/1563191/cleanest-way-to-write-retry-logic + /// + public static class NewRetry + { + public static void Do( + Action action, + TimeSpan retryInterval, + int maxAttemptCount = 3) + { + Do(() => + { + action(); + return null; + }, retryInterval, maxAttemptCount); + } + + public static T Do( + Func action, + TimeSpan retryInterval, + int maxAttemptCount = 3) + { + var exceptions = new List(); + + for (int attempted = 0; attempted < maxAttemptCount; attempted++) + { + try + { + if (attempted > 0) + { + Thread.Sleep(retryInterval); + } + + return action(); + } + catch (RetryException ex) + { + exceptions.Add(ex); + } + } + + if (exceptions.Count > 0) + { + throw exceptions.Last(); + } + throw new AggregateException(exceptions); + } + } +} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/AutoWood/WoodTaskParam.cs b/BetterGenshinImpact/GameTask/AutoWood/WoodTaskParam.cs new file mode 100644 index 00000000..277acb14 --- /dev/null +++ b/BetterGenshinImpact/GameTask/AutoWood/WoodTaskParam.cs @@ -0,0 +1,21 @@ +using System; +using System.Threading; +using BetterGenshinImpact.GameTask.Model; + +namespace BetterGenshinImpact.GameTask.AutoWood; + +public class WoodTaskParam : BaseTaskParam +{ + public int WoodRoundNum { get; set; } + public TaskTriggerDispatcher Dispatcher { get; set; } + + public WoodTaskParam(CancellationTokenSource cts, TaskTriggerDispatcher dispatcher, int woodRoundNum) : base(cts) + { + Dispatcher = dispatcher; + WoodRoundNum = woodRoundNum; + if (woodRoundNum == 0) + { + WoodRoundNum = 9999; + } + } +} \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/Common/TaskControl.cs b/BetterGenshinImpact/GameTask/Common/TaskControl.cs index fa4c959b..d6425706 100644 --- a/BetterGenshinImpact/GameTask/Common/TaskControl.cs +++ b/BetterGenshinImpact/GameTask/Common/TaskControl.cs @@ -26,6 +26,31 @@ public class TaskControl Thread.Sleep(millisecondsTimeout); } + public static void Sleep(int millisecondsTimeout, CancellationTokenSource cts) + { + if (cts.IsCancellationRequested) + { + throw new NormalEndException("取消自动伐木任务"); + } + Retry.Do(() => + { + if (cts.IsCancellationRequested) + { + throw new NormalEndException("取消自动伐木任务"); + } + if (!SystemControl.IsGenshinImpactActiveByProcess()) + { + Logger.LogInformation("当前获取焦点的窗口不是原神,暂停"); + throw new RetryException("当前获取焦点的窗口不是原神"); + } + }, TimeSpan.FromSeconds(1), 100); + Thread.Sleep(millisecondsTimeout); + if (cts.IsCancellationRequested) + { + throw new NormalEndException("取消自动伐木任务"); + } + } + public static Bitmap CaptureGameBitmap(IGameCapture? gameCapture) { var bitmap = gameCapture?.Capture(); @@ -47,4 +72,10 @@ public class TaskControl return bitmap; } + + public static CaptureContent CaptureToContent(IGameCapture? gameCapture) + { + var bitmap = CaptureGameBitmap(gameCapture); + return new CaptureContent(bitmap, 0, 0, null); + } } \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/Model/IndependentTaskEnum.cs b/BetterGenshinImpact/GameTask/Model/IndependentTaskEnum.cs index 60494dc5..0e4ba081 100644 --- a/BetterGenshinImpact/GameTask/Model/IndependentTaskEnum.cs +++ b/BetterGenshinImpact/GameTask/Model/IndependentTaskEnum.cs @@ -9,5 +9,6 @@ namespace BetterGenshinImpact.GameTask.Model; public enum IndependentTaskEnum { - AutoGeniusInvokation + AutoGeniusInvokation, + AutoWood, } \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/TaskTriggerDispatcher.cs b/BetterGenshinImpact/GameTask/TaskTriggerDispatcher.cs index 442e598c..e5e3e0bd 100644 --- a/BetterGenshinImpact/GameTask/TaskTriggerDispatcher.cs +++ b/BetterGenshinImpact/GameTask/TaskTriggerDispatcher.cs @@ -10,7 +10,9 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; +using System.Threading.Tasks; using System.Windows; +using BetterGenshinImpact.GameTask.AutoWood; using Vanara.PInvoke; namespace BetterGenshinImpact.GameTask @@ -130,7 +132,7 @@ namespace BetterGenshinImpact.GameTask { if (!_timer.Enabled) { - throw new Exception("请先启动BetterGI"); + throw new Exception("请先在启动页启动BetterGI,如果已经启动请重启"); } StopTimer(); @@ -141,6 +143,13 @@ namespace BetterGenshinImpact.GameTask { AutoGeniusInvokationTask.Start((GeniusInvokationTaskParam)param); } + else if (taskType == IndependentTaskEnum.AutoWood) + { + Task.Run(() => + { + new AutoWoodTask().Start((WoodTaskParam)param); + }); + } } public void Dispose() => Stop(); diff --git a/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml b/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml index c8a77194..c92d6a37 100644 --- a/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml +++ b/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml @@ -180,7 +180,7 @@ -