Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
fix: fixed the get ratio calculation.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Apr 27, 2023
1 parent d9fe1b7 commit bed059b
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 7 deletions.
2 changes: 2 additions & 0 deletions RotationSolver.Basic/DataCenter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,8 @@ public static float RatioOfMembersIn2minsBurst
}

#region HP
public static Dictionary<uint, float> RefinedHP { get; set; } = new Dictionary<uint, float>();

public static IEnumerable<float> PartyMembersHP { get; set; }
public static float PartyMembersMinHP { get; set; }
public static float PartyMembersAverHP { get; set; }
Expand Down
1 change: 1 addition & 0 deletions RotationSolver.Basic/Helpers/ObjectHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public static bool IsDying(this BattleChara b)
public static float GetHealthRatio(this BattleChara b)
{
if (b == null) return 0;
if(DataCenter.RefinedHP.TryGetValue(b.ObjectId, out var hp)) return hp;
return (float)b.CurrentHp / b.MaxHp;
}

Expand Down
2 changes: 1 addition & 1 deletion RotationSolver.Basic/Helpers/StatusHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ internal record Burst2MinsInfo( StatusID status, bool isOnHostile, byte level, p
public static bool NeedHealing(this BattleChara p) => p.WillStatusEndGCD(2, 0, false, NoNeedHealingStatus);

/// <summary>
/// Will any of <paramref name="statusIDs"/> be end after <paramref name="gcdCount"/> gcds add <paramref name="offset" times/> ?
/// Will any of <paramref name="statusIDs"/> be end after <paramref name="gcdCount"/> gcds add <paramref name="offset"/> seconds?
/// </summary>
/// <param name="obj"></param>
/// <param name="gcdCount"></param>
Expand Down
1 change: 1 addition & 0 deletions RotationSolver.Basic/Helpers/TargetFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ private static T FindMoveTargetScreenCenter<T>(IEnumerable<T> charas) where T :
/// 发现被攻击的目标
/// </summary>
/// <param name="charas"></param>
/// <param name="mustUse"></param>
/// <returns></returns>
public static BattleChara FindAttackedTarget(IEnumerable<BattleChara> charas, bool mustUse)
{
Expand Down
14 changes: 8 additions & 6 deletions RotationSolver/Updaters/TargetUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,9 @@ private unsafe static void UpdateFriends(IEnumerable<BattleChara> allTargets)
DataCenter.WeakenPeople.Delay(DataCenter.PartyMembers.Where(p => p.StatusList.Any(StatusHelper.CanDispel)));
DataCenter.DyingPeople.Delay(DataCenter.WeakenPeople.Where(p => p.StatusList.Any(StatusHelper.IsDangerous)));

DataCenter.PartyMembersHP = DataCenter.PartyMembers
.Select(GetPartyMemberHPRatio).Where(r => r > 0);
DataCenter.RefinedHP = DataCenter.PartyMembers
.ToDictionary(p => p.ObjectId, GetPartyMemberHPRatio);
DataCenter.PartyMembersHP = DataCenter.RefinedHP.Values.Where(r => r > 0);

if (DataCenter.PartyMembersHP.Any())
{
Expand All @@ -249,10 +250,12 @@ private unsafe static void UpdateFriends(IEnumerable<BattleChara> allTargets)

private static float GetPartyMemberHPRatio(BattleChara member)
{
if (member == null) return 0;

if ((DateTime.Now - Watcher.HealTime).TotalSeconds > 1
|| !Watcher.HealHP.TryGetValue(member.ObjectId, out var hp))
{
return member.GetHealthRatio();
return (float)member.CurrentHp / member.MaxHp;
}

var rightHp = member.CurrentHp;
Expand All @@ -263,14 +266,13 @@ private static float GetPartyMemberHPRatio(BattleChara member)
if (rightHp - lastHp == hp)
{
Watcher.HealHP.Remove(member.ObjectId);
return member.GetHealthRatio();
return (float)member.CurrentHp / member.MaxHp;
}
return Math.Min(1, (hp + rightHp) / (float)member.MaxHp);
}
return member.GetHealthRatio();
return (float)member.CurrentHp / member.MaxHp;
}


private static IEnumerable<BattleChara> GetPartyMembers(IEnumerable<BattleChara> allTargets)
{
var party = Service.PartyList.Select(p => p.GameObject).OfType<BattleChara>().Where(b => b.DistanceToPlayer() <= 30);
Expand Down

0 comments on commit bed059b

Please sign in to comment.