diff --git a/BetterGenshinImpact/BetterGenshinImpact.csproj b/BetterGenshinImpact/BetterGenshinImpact.csproj
index 25dd7dc7..5cde23ce 100644
--- a/BetterGenshinImpact/BetterGenshinImpact.csproj
+++ b/BetterGenshinImpact/BetterGenshinImpact.csproj
@@ -136,6 +136,7 @@
+
diff --git a/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs b/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs
index bf5b5651..8e144fb1 100644
--- a/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs
+++ b/BetterGenshinImpact/GameTask/AutoTrackPath/TpTask.cs
@@ -16,6 +16,7 @@ using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using BetterGenshinImpact.GameTask.Common.Exceptions;
using Vanara.PInvoke;
using static BetterGenshinImpact.GameTask.Common.TaskControl;
@@ -106,6 +107,13 @@ public class TpTask(CancellationTokenSource cts)
{
return await TpOnce(tpX, tpY, force);
}
+ catch (TpPointNotActivate)
+ {
+ // 传送点未激活或不存在 按ESC回到大地图界面
+ Simulation.SendInput.Keyboard.KeyPress(User32.VK.VK_ESCAPE);
+ await Delay(300, cts);
+ throw;
+ }
catch (Exception e)
{
Logger.LogError(e, "传送失败,重试 {I} 次", i + 1);
@@ -363,33 +371,35 @@ public class TpTask(CancellationTokenSource cts)
// 1.判断是否在地图界面
if (Bv.IsInBigMapUi(imageRegion))
{
- // 2. 判断是否有传送按钮
- var hasTeleportButton = CheckTeleportButton(imageRegion);
-
- if (!hasTeleportButton)
+ // 2. 存在地图关闭按钮,说明已经点出界面
+ var mapCloseRa1 = imageRegion.Find(_assets.MapCloseButtonRo);
+ if (!mapCloseRa1.IsEmpty())
{
- // 存在地图关闭按钮,说明未选中传送点,直接返回
- var mapCloseRa = imageRegion.Find(_assets.MapCloseButtonRo);
- if (!mapCloseRa.IsEmpty())
+ // 3.此时不存在传送图标,一定不是传送点
+ if (!CheckTeleportButton(imageRegion))
{
- return;
+ throw new TpPointNotActivate("传送点未激活或不存在");
}
-
- // 存在地图选择按钮,说明未选中传送点,直接返回
- var mapChooseRa = imageRegion.Find(_assets.MapChooseRo);
- if (!mapChooseRa.IsEmpty())
- {
- return;
- }
-
- // 3. 循环判断选项列表是否有传送点
+ }
+ else
+ {
+ // 3. 循环判断选项列表是否有传送点(未激活点位也在里面)
var hasMapChooseIcon = CheckMapChooseIcon(imageRegion);
if (hasMapChooseIcon)
{
var time = TaskContext.Instance().Config.QuickTeleportConfig.WaitTeleportPanelDelay;
time = time < 100 ? 100 : time;
await Delay(time, cts);
- CheckTeleportButton(CaptureToRectArea());
+ if (!CheckTeleportButton(CaptureToRectArea()))
+ {
+ // 没传送确认图标说明点开的是未激活传送锚点
+ throw new TpPointNotActivate("传送点未激活或不存在");
+ }
+ }
+ else
+ {
+ // 没有传送点说明不是传送点
+ throw new TpPointNotActivate("传送点未激活或不存在");
}
}
}
diff --git a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs
index 62322e67..4e7cd8ae 100644
--- a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs
+++ b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapAssets.cs
@@ -36,6 +36,6 @@ public class MapAssets : BaseAssets
public MapAssets()
{
var json = File.ReadAllText(Global.Absolute(@"GameTask\AutoTrackPath\Assets\tp.json"));
- TpPositions = JsonSerializer.Deserialize>(json, ConfigService.JsonOptions) ?? throw new Exception("tp.json deserialize failed");
+ TpPositions = JsonSerializer.Deserialize>(json, ConfigService.JsonOptions) ?? throw new System.Exception("tp.json deserialize failed");
}
}
diff --git a/BetterGenshinImpact/GameTask/Common/Exception/NormalEndException.cs b/BetterGenshinImpact/GameTask/Common/Exceptions/NormalEndException.cs
similarity index 100%
rename from BetterGenshinImpact/GameTask/Common/Exception/NormalEndException.cs
rename to BetterGenshinImpact/GameTask/Common/Exceptions/NormalEndException.cs
diff --git a/BetterGenshinImpact/GameTask/Common/Exception/RetryException.cs b/BetterGenshinImpact/GameTask/Common/Exceptions/RetryException.cs
similarity index 100%
rename from BetterGenshinImpact/GameTask/Common/Exception/RetryException.cs
rename to BetterGenshinImpact/GameTask/Common/Exceptions/RetryException.cs
diff --git a/BetterGenshinImpact/GameTask/Common/Exceptions/TpPointNotActivate.cs b/BetterGenshinImpact/GameTask/Common/Exceptions/TpPointNotActivate.cs
new file mode 100644
index 00000000..e71f89ed
--- /dev/null
+++ b/BetterGenshinImpact/GameTask/Common/Exceptions/TpPointNotActivate.cs
@@ -0,0 +1,5 @@
+namespace BetterGenshinImpact.GameTask.Common.Exceptions;
+
+public class TpPointNotActivate(string message) : System.Exception(message)
+{
+}
diff --git a/BetterGenshinImpact/GameTask/Common/NewRetry.cs b/BetterGenshinImpact/GameTask/Common/NewRetry.cs
index 113c61f3..dd0088c4 100644
--- a/BetterGenshinImpact/GameTask/Common/NewRetry.cs
+++ b/BetterGenshinImpact/GameTask/Common/NewRetry.cs
@@ -22,7 +22,7 @@ public static class NewRetry
public static T Do(Func action, TimeSpan retryInterval, int maxAttemptCount = 3)
{
- List exceptions = [];
+ List exceptions = [];
for (int attempted = 0; attempted < maxAttemptCount; attempted++)
{
diff --git a/BetterGenshinImpact/GameTask/Common/TaskControl.cs b/BetterGenshinImpact/GameTask/Common/TaskControl.cs
index 635af949..63af1e68 100644
--- a/BetterGenshinImpact/GameTask/Common/TaskControl.cs
+++ b/BetterGenshinImpact/GameTask/Common/TaskControl.cs
@@ -131,7 +131,7 @@ public class TaskControl
Sleep(30);
}
- throw new Exception("尝试多次后,截图失败!");
+ throw new System.Exception("尝试多次后,截图失败!");
}
else
{