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

Commit

Permalink
fix: add clipping check for medicine.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Aug 1, 2023
1 parent 376e4d8 commit 98446bc
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 30 deletions.
5 changes: 3 additions & 2 deletions RotationSolver.Basic/Actions/BaseItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,9 @@ public unsafe BaseItem(Item item, uint a4 = 65535)
/// Can Use this item.
/// </summary>
/// <param name="item"></param>
/// <param name="clippingCheck"></param>
/// <returns></returns>
public virtual unsafe bool CanUse(out IAction item)
public virtual unsafe bool CanUse(out IAction item, bool clippingCheck)
{
item = this;
if (_item == null) return false;
Expand All @@ -174,7 +175,7 @@ public virtual unsafe bool CanUse(out IAction item)
{
if (DataCenter.NextAbilityToNextGCD > AnimationLockTime + DataCenter.Ping) return false;

if (remain > DataCenter.ActionRemain) return false;
if (clippingCheck && remain > DataCenter.ActionRemain) return false;
}

if (ItemCheck != null && !ItemCheck()) return false;
Expand Down
4 changes: 2 additions & 2 deletions RotationSolver.Basic/Actions/HealPotionItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ public HealPotionItem(Item item, uint a4 = 65535) : base(item, a4)
_maxHp = data[1];
}

public override bool CanUse(out IAction item)
public override bool CanUse(out IAction item, bool clippingCheck)
{
item = null;
if (!Player.Available) return false;
var job = (Job)Player.Object.ClassJob.Id;
if (Player.Object.GetHealthRatio() > job.GetHealthSingleAbilityHot()) return false;
if (Player.Object.MaxHp - Player.Object.CurrentHp < MaxHealHp) return false;
return base.CanUse(out item);
return base.CanUse(out item, clippingCheck);
}
}
3 changes: 2 additions & 1 deletion RotationSolver.Basic/Actions/IBaseItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public interface IBaseItem : IAction
/// The item can be used.
/// </summary>
/// <param name="item"></param>
/// <param name="clippingCheck"></param>
/// <returns></returns>
bool CanUse(out IAction item);
bool CanUse(out IAction item, bool clippingCheck);
}
2 changes: 1 addition & 1 deletion RotationSolver.Basic/Rotations/CustomRotation_Ability.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ private bool Ability(IAction nextGCD, out IAction act, bool helpDefenseAOE, bool
CanUseOption.MustUse | CanUseOption.EmptyOrSkipCombo)) return true;
BaseAction.SkipDisable = false;

if (act is IBaseItem i && i.CanUse(out _)) return true;
if (act is IBaseItem i && i.CanUse(out _, true)) return true;

if (!Service.Config.GetValue(SettingsCommand.UseAbility)
|| Player.TotalCastTime > 0)
Expand Down
45 changes: 23 additions & 22 deletions RotationSolver.Basic/Rotations/CustomRotation_Medicine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,53 +82,54 @@ public abstract partial class CustomRotation
public static IBaseItem TinctureOfMind8 { get; }
= new MedicineItem(39731, MedicineType.Mind);

static bool UseStrength(out IAction act)
static bool UseStrength(out IAction act, bool clippingCheck)
{
if (TinctureOfStrength8.CanUse(out act)) return true;
if (TinctureOfStrength7.CanUse(out act)) return true;
if (TinctureOfStrength6.CanUse(out act)) return true;
if (TinctureOfStrength8.CanUse(out act, clippingCheck)) return true;
if (TinctureOfStrength7.CanUse(out act, clippingCheck)) return true;
if (TinctureOfStrength6.CanUse(out act, clippingCheck)) return true;
return false;
}

static bool UseDexterity(out IAction act)
static bool UseDexterity(out IAction act, bool clippingCheck)
{
if (TinctureOfDexterity8.CanUse(out act)) return true;
if (TinctureOfDexterity7.CanUse(out act)) return true;
if (TinctureOfDexterity6.CanUse(out act)) return true;
if (TinctureOfDexterity8.CanUse(out act, clippingCheck)) return true;
if (TinctureOfDexterity7.CanUse(out act, clippingCheck)) return true;
if (TinctureOfDexterity6.CanUse(out act, clippingCheck)) return true;
return false;
}
static bool UseIntelligence(out IAction act)
static bool UseIntelligence(out IAction act, bool clippingCheck)
{
if (TinctureOfIntelligence8.CanUse(out act)) return true;
if (TinctureOfIntelligence7.CanUse(out act)) return true;
if (TinctureOfIntelligence6.CanUse(out act)) return true;
if (TinctureOfIntelligence8.CanUse(out act, clippingCheck)) return true;
if (TinctureOfIntelligence7.CanUse(out act, clippingCheck)) return true;
if (TinctureOfIntelligence6.CanUse(out act, clippingCheck)) return true;
return false;
}
static bool UseMind(out IAction act)
static bool UseMind(out IAction act, bool clippingCheck)
{
if (TinctureOfMind8.CanUse(out act)) return true;
if (TinctureOfMind7.CanUse(out act)) return true;
if (TinctureOfMind6.CanUse(out act)) return true;
if (TinctureOfMind8.CanUse(out act, clippingCheck)) return true;
if (TinctureOfMind7.CanUse(out act, clippingCheck)) return true;
if (TinctureOfMind6.CanUse(out act, clippingCheck)) return true;
return false;
}

/// <summary>
/// Use the burst medicines.
/// </summary>
/// <param name="act"></param>
/// <param name="clippingCheck"></param>
/// <returns></returns>
protected bool UseBurstMedicine(out IAction act)
protected bool UseBurstMedicine(out IAction act, bool clippingCheck = true)
{
act = null;

if (!(Target?.IsDummy() ?? false) && !DataCenter.InHighEndDuty) return false;

return MedicineType switch
{
MedicineType.Strength => UseStrength(out act),
MedicineType.Dexterity => UseDexterity(out act),
MedicineType.Intelligence => UseIntelligence(out act),
MedicineType.Mind => UseMind(out act),
MedicineType.Strength => UseStrength(out act, clippingCheck),
MedicineType.Dexterity => UseDexterity(out act, clippingCheck),
MedicineType.Intelligence => UseIntelligence(out act, clippingCheck),
MedicineType.Mind => UseMind(out act, clippingCheck),
_ => false,
};
}
Expand All @@ -147,7 +148,7 @@ protected bool UseBurstMedicine(out IAction act)
private bool UseHealPotion(out IAction act)
{
var acts = from a in Potions
where a.CanUse(out _)
where a.CanUse(out _, true)
orderby a.MaxHealHp
select a;

Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/UI/ControlWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ internal static (Vector2, Vector2) DrawIAction(IAction action, float width, floa
}
else if (action is IBaseItem item)
{
canDoIt = item.CanUse(out _);
canDoIt = item.CanUse(out _, true);
}
if(canDoIt) action.Use();
}
Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/UI/ImGuiHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ public unsafe static void Display(this IBaseItem item, bool IsActive)
ImGui.Text("Status HQ: " + ActionManager.Instance()->GetActionStatus(ActionType.Item, item.ID + 1000000).ToString());
var remain = ActionManager.Instance()->GetRecastTime(ActionType.Item, item.ID) - ActionManager.Instance()->GetRecastTimeElapsed(ActionType.Item, item.ID);
ImGui.Text("remain: " + remain.ToString());
ImGui.Text("CanUse: " + item.CanUse(out _).ToString());
ImGui.Text("CanUse: " + item.CanUse(out _, true).ToString());

if(item is HealPotionItem healPotionItem)
{
Expand Down

0 comments on commit 98446bc

Please sign in to comment.