diff --git a/BetterGenshinImpact/App.xaml.cs b/BetterGenshinImpact/App.xaml.cs index a6beabbb..699f0ff3 100644 --- a/BetterGenshinImpact/App.xaml.cs +++ b/BetterGenshinImpact/App.xaml.cs @@ -67,7 +67,9 @@ public partial class App : Application .WriteTo.File(logFile, outputTemplate: "[{Timestamp:HH:mm:ss.fff}] [{Level:u3}] {SourceContext}{NewLine}{Message}{NewLine}{Exception}{NewLine}", - rollingInterval: RollingInterval.Day) + rollingInterval: RollingInterval.Day, + retainedFileCountLimit: 31, + retainedFileTimeLimit: TimeSpan.FromDays(21)) .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}") .MinimumLevel.Debug() diff --git a/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs b/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs index bbb0581f..228fd69a 100644 --- a/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs +++ b/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs @@ -40,6 +40,8 @@ public class AutoFightTask : ISoloTask private readonly double _dpi = TaskContext.Instance().DpiScale; public static OtherConfig Config { get; set; } = TaskContext.Instance().Config.OtherConfig; + + public static bool FightStatusFlag { get; set; } = false; private class TaskFightFinishDetectConfig { @@ -287,6 +289,8 @@ public class AutoFightTask : ISoloTask { try { + FightStatusFlag = true; + while (!cts2.Token.IsCancellationRequested) { // 所有战斗角色都可以被取消 @@ -442,6 +446,7 @@ public class AutoFightTask : ISoloTask finally { Simulation.ReleaseAllKey(); + FightStatusFlag = false; } }, cts2.Token); diff --git a/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs b/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs index d703c3f6..e4fc4281 100644 --- a/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs +++ b/BetterGenshinImpact/GameTask/AutoFight/Model/Avatar.cs @@ -94,6 +94,7 @@ public class Avatar NameRect = nameRect; CombatAvatar = DefaultAutoFightConfig.CombatAvatarMap[name]; ManualSkillCd = manualSkillCd; + AutoFightTask.FightStatusFlag = false; } @@ -291,7 +292,7 @@ public class Avatar private void Offset60Fix(int i) { // 3次失败考虑是否偏移出现问题,修改偏移位置 - if (i <= 2) + if (i <= 2 || AutoFightTask.FightStatusFlag) { return; } @@ -300,18 +301,18 @@ public class Avatar { foreach (var avatar in CombatScenes.GetAvatars()) { - var rect1 = avatar.IndexRect; - rect1.Y += 14; + var originalRect = AutoFightAssets.Instance.AvatarIndexRectList[avatar.Index - 1]; + var rect1 = new Rect(originalRect.X, originalRect.Y, originalRect.Width, originalRect.Height); avatar.IndexRect = rect1; } - CombatScenes.IndexRectOffset60Fix = false; } else { foreach (var avatar in CombatScenes.GetAvatars()) { - var rect1 = avatar.IndexRect; + var originalRect = AutoFightAssets.Instance.AvatarIndexRectList[avatar.Index - 1]; + var rect1 = new Rect(originalRect.X, originalRect.Y, originalRect.Width, originalRect.Height); rect1.Y -= 14; avatar.IndexRect = rect1; } diff --git a/BetterGenshinImpact/GameTask/AutoFight/Model/CombatScenes.cs b/BetterGenshinImpact/GameTask/AutoFight/Model/CombatScenes.cs index c61f4ab0..856e53b8 100644 --- a/BetterGenshinImpact/GameTask/AutoFight/Model/CombatScenes.cs +++ b/BetterGenshinImpact/GameTask/AutoFight/Model/CombatScenes.cs @@ -96,15 +96,15 @@ public class CombatScenes : IDisposable Logger.LogInformation("当前处于联机状态,且在别人世界中,联机人数{Num}人", num); } - avatarSideIconRectList = AutoFightAssets.Instance.AvatarSideIconRectListMap[$"{p}_{num}"]; - avatarIndexRectList = AutoFightAssets.Instance.AvatarIndexRectListMap[$"{p}_{num}"]; + avatarSideIconRectList = new List(AutoFightAssets.Instance.AvatarSideIconRectListMap[$"{p}_{num}"]); + avatarIndexRectList = new List(AutoFightAssets.Instance.AvatarIndexRectListMap[$"{p}_{num}"]); ExpectedTeamAvatarNum = avatarSideIconRectList.Count; } else { - avatarSideIconRectList = AutoFightAssets.Instance.AvatarSideIconRectList; - avatarIndexRectList = AutoFightAssets.Instance.AvatarIndexRectList; + avatarSideIconRectList = new List(AutoFightAssets.Instance.AvatarSideIconRectList); + avatarIndexRectList = new List(AutoFightAssets.Instance.AvatarIndexRectList); } // 6.0 版本 队伍下的 草露 进度条 导致位置偏移 @@ -158,7 +158,7 @@ public class CombatScenes : IDisposable { // 角色序号 左上角 坐标偏移(+2, -5)后存在3个白色点,则认为存在 草露 进度条 // 存在 草露 进度条时候整体上移 14 个像素 - int whitePointCount = 0; + var whitePointCount = 0; foreach (var rectIndex in avatarIndexRectList) { int x = rectIndex.X + 2; @@ -170,47 +170,28 @@ public class CombatScenes : IDisposable } } - if (whitePointCount >= 3) + if (whitePointCount < 3) { - Logger.LogInformation("检测到右侧队伍上偏移,进行位置偏移"); - - for (int i = 0; i < avatarSideIconRectList.Count; i++) - { - var rect = avatarSideIconRectList[i]; - rect.Y -= 14; - avatarSideIconRectList[i] = rect; - } - - for (int i = 0; i < avatarIndexRectList.Count; i++) - { - var rect = avatarIndexRectList[i]; - rect.Y -= 14; - avatarIndexRectList[i] = rect; - } - - return true; - } - else if (whitePointCount <= 1) //发现有时候识别到一个白点 - { - Logger.LogInformation("检测到右侧队伍下偏移,进行位置偏移"); - for (int i = 0; i < avatarSideIconRectList.Count; i++) - { - var rect = avatarSideIconRectList[i]; - rect.Y += 14; - avatarSideIconRectList[i] = rect; - } - - for (int i = 0; i < avatarIndexRectList.Count; i++) - { - var rect = avatarIndexRectList[i]; - rect.Y += 14; - avatarIndexRectList[i] = rect; - } - return false; - } - - return false; + } + + Logger.LogInformation("检测到右侧队伍上偏移,进行位置偏移"); + + for (var i = 0; i < avatarSideIconRectList.Count; i++) + { + var rect = avatarSideIconRectList[i]; + rect.Y -= 14; + avatarSideIconRectList[i] = rect; + } + + for (var i = 0; i < avatarIndexRectList.Count; i++) + { + var rect = avatarIndexRectList[i]; + rect.Y -= 14; + avatarIndexRectList[i] = rect; + } + + return true; } diff --git a/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs b/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs index 467eef18..f8615d88 100644 --- a/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs +++ b/BetterGenshinImpact/GameTask/AutoPathing/PathExecutor.cs @@ -1101,7 +1101,7 @@ public class PathExecutor return null; } - var success = avatar.TrySwitch(); + var success = avatar.TrySwitch(5);//多切换一次,否则如果切人纠正要等下一个循环 if (success) { await Delay(100, ct);