From 67438f0531912e25e1903d5bb02239880a7ffd17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Wed, 26 Apr 2023 11:07:56 +0800 Subject: [PATCH] fix: changed heal refine. --- RotationSolver/Updaters/TargetUpdater.cs | 15 ++++++++++++--- RotationSolver/Watcher.cs | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/RotationSolver/Updaters/TargetUpdater.cs b/RotationSolver/Updaters/TargetUpdater.cs index 0a9de7a98..a9638fdde 100644 --- a/RotationSolver/Updaters/TargetUpdater.cs +++ b/RotationSolver/Updaters/TargetUpdater.cs @@ -205,6 +205,7 @@ private static bool IsHostileCastingBase(BattleChara h, Func check #endregion #region Friends + private static Dictionary _lastHp = new Dictionary(); private unsafe static void UpdateFriends(IEnumerable allTargets) { DataCenter.PartyMembers = GetPartyMembers(allTargets); @@ -227,8 +228,9 @@ private unsafe static void UpdateFriends(IEnumerable allTargets) DataCenter.DyingPeople.Delay(DataCenter.WeakenPeople.Where(p => p.StatusList.Any(StatusHelper.IsDangerous))); DataCenter.PartyMembersHP = DataCenter.PartyMembers - .Where(p => p.DistanceToPlayer() <= 30) .Select(GetPartyMemberHPRatio).Where(r => r > 0); + _lastHp = DataCenter.PartyMembers.ToDictionary(p => p.ObjectId, p => p.CurrentHp); + if (DataCenter.PartyMembersHP.Any()) { DataCenter.PartyMembersAverHP = DataCenter.PartyMembersHP.Average(); @@ -250,9 +252,16 @@ private static float GetPartyMemberHPRatio(BattleChara member) return member.GetHealthRatio(); } - if(member.CurrentHp > 0 && member.CurrentHp <= hp.Item1) + var rightHp = member.CurrentHp; + if (rightHp > 0) { - return Math.Min(1, hp.Item2 / (float)member.MaxHp); + if (!_lastHp.TryGetValue(member.ObjectId, out var lastHp)) lastHp = rightHp; + if(rightHp - lastHp == hp) + { + Watcher.HealHP.Remove(member.ObjectId); + return member.GetHealingRatio(); + } + return Math.Min(1, hp + rightHp / (float)member.MaxHp); } return member.GetHealingRatio(); } diff --git a/RotationSolver/Watcher.cs b/RotationSolver/Watcher.cs index a9ae15060..8f27bb0e7 100644 --- a/RotationSolver/Watcher.cs +++ b/RotationSolver/Watcher.cs @@ -22,7 +22,7 @@ public class Watcher : IDisposable public static ICallGateSubscriber IpcSubscriber; public static DateTime HealTime { get; private set; } = DateTime.Now; - public static Dictionary HealHP { get; private set; } = new Dictionary(); + public static Dictionary HealHP { get; private set; } = new Dictionary(); public Watcher() { SignatureHelper.Initialise(this); @@ -100,7 +100,7 @@ private static void ActionFromSelf(uint sourceId, ActionEffectSet set, uint id) if (tar == null || action == null) return; HealHP = set.TargetEffects.Where(e => e[0].Type == ActionEffectType.Heal).ToDictionary(e => - e.Target.ObjectId, e =>((e.Target is BattleChara b ? b.CurrentHp : 0u), e[0].Value + (e.Target is BattleChara b1 ? b1.CurrentHp : 0u))); + e.Target.ObjectId, e =>e[0].Value); HealTime = DateTime.Now; //Record