diff --git a/RotationSolver/Actions/BaseAction/BaseAction_ActionInfo.cs b/RotationSolver/Actions/BaseAction/BaseAction_ActionInfo.cs
index bc482ca56..21790e372 100644
--- a/RotationSolver/Actions/BaseAction/BaseAction_ActionInfo.cs
+++ b/RotationSolver/Actions/BaseAction/BaseAction_ActionInfo.cs
@@ -15,56 +15,34 @@ internal partial class BaseAction
{
private float Range => ActionManager.GetActionRange(ID);
- ///
- /// 如果之前是这些ID,那么就不会执行。
- ///
- public ActionID[] OtherIDsNot { private get; set; } = null;
-
- ///
- /// 如果之前不是这些ID中的某个,那么就不会执行。
- ///
- public ActionID[] OtherIDsCombo { private get; set; } = null;
-
- ///
- /// 使用了这个技能会得到的Buff,如果有这些Buff中的一种,那么就不会执行,这个buff是自己提供的。
- ///
+ public ActionID[] ComboIdsNot { private get; set; } = null;
+
+ public ActionID[] ComboIds { private get; set; } = null;
+
public StatusID[] StatusProvide { get; set; } = null;
- ///
- /// 使用这个技能需要的前置Buff,有任何一个就好。
- ///
public virtual StatusID[] StatusNeed { get; set; } = null;
- ///
- /// 如果有一些别的需要判断的,可以写在这里。True表示可以使用这个技能。
- ///
public Func ActionCheck { get; set; } = null;
- ///
- /// 如果有一些别的需要判断的,可以写在这里。True表示可以使用这个技能。
- ///
- public Func ComboCheck { get; set; } = null;
+ public Func RotationCheck { get; set; } = null;
private bool WillCooldown
{
get
{
- //如果首个CoolDown不是GCD技能,而且没法释放。
if (!IsGeneralGCD && IsCoolDown)
{
- //会让GCD转的,充能一层的,看看来不来得及下个GCD
if (IsRealGCD)
{
if (!WillHaveOneChargeGCD()) return false;
}
else
{
- //不是青魔,不能连续使用
if ((ClassJobID)Service.ClientState.LocalPlayer.ClassJob.Id != ClassJobID.BlueMage
&& ChoiceTarget != TargetFilter.FindTargetForMoving
&& Watcher.LastAction == (ActionID)AdjustedID) return false;
- //冷却时间没超过一成且下一个Ability前不能转好
if (!WillHaveOneCharge(ActionUpdater.AbilityRemain, false)) return false;
}
}
@@ -73,79 +51,38 @@ private bool WillCooldown
}
}
- ///
- /// 判断是否需要使用这个技能
- ///
- /// 返回的技能
- /// 必须使用,不判断提供的Buff和是否已提供,不判断AOE技能的敌人数量是否达标.
- /// 如果有层数,放完所有层数,不判断是否为Combo
- /// 这个技能能不能用
public unsafe virtual bool ShouldUse(out IAction act, bool mustUse = false, bool emptyOrSkipCombo = false, bool skipDisable = false)
{
act = this;
- //玩家都没有。。。
if (Service.ClientState.LocalPlayer == null) return false;
var player = Service.ClientState.LocalPlayer;
- //用户不让用!
if (!skipDisable && !IsEnabled) return false;
- //技能状态不对,可能是没学会。
if (ConfigurationHelper.BadStatus.Contains(ActionManager.Instance()->GetActionStatus(ActionType.Spell, AdjustedID)))
return false;
- //等级不够
if (!EnoughLevel) return false;
- //MP不够
if (Service.ClientState.LocalPlayer.CurrentMp < MPNeed) return false;
- //没有前置Buff
if (StatusNeed != null)
{
if (!Service.ClientState.LocalPlayer.HasStatus(true, StatusNeed)) return false;
}
- //已有提供的Buff的任何一种
if (StatusProvide != null && !mustUse)
{
if (Service.ClientState.LocalPlayer.HasStatus(true, StatusProvide)) return false;
}
- //还冷却不下来呢,来不及。
if (!WillCooldown) return false;
if (IsGeneralGCD)
{
- if (!emptyOrSkipCombo)
- {
- //如果有输入上次的数据,那么上次不能是上述的ID。
- if (OtherIDsNot != null)
- {
- if (OtherIDsNot.Contains(ActionUpdater.LastComboAction)) return false;
- }
-
- //如果有Combo,有LastAction,而且上次不是连击,那就不触发。
- var comboActions = _action.ActionCombo?.Row != 0
- ? new ActionID[] { (ActionID)_action.ActionCombo.Row }
- : new ActionID[0];
- if (OtherIDsCombo != null) comboActions = comboActions.Union(OtherIDsCombo).ToArray();
+ if (!emptyOrSkipCombo && !CheckForCombo()) return false;
- if (comboActions.Length > 0)
- {
- if (comboActions.Contains(ActionUpdater.LastComboAction))
- {
- if (ActionUpdater.ComboTime < ActionUpdater.WeaponRemain) return false;
- }
- else
- {
- return false;
- }
- }
- }
-
- //如果是个法术需要咏唱,并且还在移动,也没有即刻相关的技能。
if (CastTime > 0 && MovingUpdater.IsMoving)
{
if (!player.HasStatus(true, CustomRotation.Swiftcast.StatusProvide))
@@ -156,22 +93,45 @@ public unsafe virtual bool ShouldUse(out IAction act, bool mustUse = false, bool
}
else
{
- //如果是能力技能,还没填满。
if (!emptyOrSkipCombo && RecastTimeRemain > ActionUpdater.WeaponRemain + ActionUpdater.WeaponTotal)
return false;
}
- //看看有没有目标,如果没有,就说明不符合条件。
if (!FindTarget(mustUse, out var target)) return false;
- //用于自定义的要求没达到
if (ActionCheck != null && !ActionCheck(target)) return false;
- if (!skipDisable && ComboCheck != null && !ComboCheck(target)) return false;
+ if (!skipDisable && RotationCheck != null && !RotationCheck(target)) return false;
Target = target;
return true;
}
+ private bool CheckForCombo()
+ {
+ if (ComboIdsNot != null)
+ {
+ if (ComboIdsNot.Contains(ActionUpdater.LastComboAction)) return false;
+ }
+
+ var comboActions = _action.ActionCombo?.Row != 0
+ ? new ActionID[] { (ActionID)_action.ActionCombo.Row }
+ : new ActionID[0];
+ if (ComboIds != null) comboActions = comboActions.Union(ComboIds).ToArray();
+
+ if (comboActions.Length > 0)
+ {
+ if (comboActions.Contains(ActionUpdater.LastComboAction))
+ {
+ if (ActionUpdater.ComboTime < ActionUpdater.WeaponRemain) return false;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
public unsafe bool Use()
{
var loc = new FFXIVClientStructs.FFXIV.Common.Math.Vector3() { X = _position.X, Y = _position.Y, Z = _position.Z };
diff --git a/RotationSolver/Actions/BaseAction/BaseAction_BasicInfo.cs b/RotationSolver/Actions/BaseAction/BaseAction_BasicInfo.cs
index 9b58cb6c2..8b411a805 100644
--- a/RotationSolver/Actions/BaseAction/BaseAction_BasicInfo.cs
+++ b/RotationSolver/Actions/BaseAction/BaseAction_BasicInfo.cs
@@ -16,10 +16,8 @@ internal partial class BaseAction : IBaseAction
public bool ShouldEndSpecial { private get; set; }
- public bool IsTimeline { get; } = false;
- ///
- /// 玩家当前等级是否大于等于技能可用等级
- ///
+ internal bool IsTimeline { get; } = false;
+
public bool EnoughLevel => Service.ClientState.LocalPlayer.Level >= _action.ClassJobLevel;
public string Name => _action.Name;
@@ -84,11 +82,6 @@ public bool IsEnabled
private byte CoolDownGroup { get; }
- ///
- /// 范围类技能至少需要多少个对象才释放
- ///
- public byte AOECount { private get; set; } = 3;
-
///
/// 真实咏唱时间
///
diff --git a/RotationSolver/Actions/BaseAction/BaseAction_Target.cs b/RotationSolver/Actions/BaseAction/BaseAction_Target.cs
index 4859c1707..34942e1ae 100644
--- a/RotationSolver/Actions/BaseAction/BaseAction_Target.cs
+++ b/RotationSolver/Actions/BaseAction/BaseAction_Target.cs
@@ -13,6 +13,8 @@ namespace RotationSolver.Actions.BaseAction;
internal partial class BaseAction
{
+ public byte AOECount { private get; set; } = 3;
+
public bool IsTargetDying
{
get
@@ -47,9 +49,6 @@ private get
internal Func, IEnumerable> FilterForTarget { private get; set; } = null;
- ///
- /// 给敌人造成的Debuff,如果有这些Debuff,那么不会执行,这个status是玩家赋予的。
- ///
public StatusID[] TargetStatus { get; set; } = null;
internal static bool TankDefenseSelf(BattleChara chara)
diff --git a/RotationSolver/Actions/IBaseAction.cs b/RotationSolver/Actions/IBaseAction.cs
index 16adb04fe..4650c2ff6 100644
--- a/RotationSolver/Actions/IBaseAction.cs
+++ b/RotationSolver/Actions/IBaseAction.cs
@@ -10,19 +10,66 @@ namespace RotationSolver.Actions
{
internal interface IBaseAction : IAction, IEnable
{
- Func ActionCheck { get; set; }
- Func ComboCheck { get; set; }
+ ///
+ /// If combo id is on this list, this aciton will not used.
+ ///
+ ActionID[] ComboIdsNot {set; }
+
+ ///
+ /// The combos that are not written on the action list.
+ ///
+ ActionID[] ComboIds { set; }
+
+ ///
+ /// If player has these statuses from player self, this aciton will not used.
+ ///
StatusID[] StatusProvide { get; set; }
+ ///
+ /// If player doesn't have these statuses from player self, this aciton will not used.
+ ///
StatusID[] StatusNeed { get; set; }
+ ///
+ /// Check for this action, but not for the rotation. It is some additional conditions for this action.
+ /// Input data is the target for this action.
+ ///
+ Func ActionCheck { get; set; }
+
+ ///
+ /// Check for rotation, you can add it for simplify the rotation file.
+ /// Input data is the target for this action.
+ Func RotationCheck { get; set; }
+
+ ///
+ /// Player's level is enough for this action's usage.
+ ///
bool EnoughLevel { get; }
+ ///
+ /// Should I use this action at this time. It will check a lot of things.
+ /// Level, Enabled, Action Status, MP, Player Status, Coll down, Combo, Moving (for casting), Charges, Target, etc.
+ ///
+ ///
+ /// AOE only need one target to use.
+ /// Moving action don't need to have enough distance to use.
+ /// Skip for and cheking.
+ /// Use all charges, no keeping.
+ /// Do not need to check the combo.
+ /// skip the diable for emergency use.
+ /// should I use.
bool ShouldUse(out IAction act, bool mustUse = false, bool emptyOrSkipCombo = false, bool skipDisable = false);
#region CoolDown
+
+ ///
+ /// Is cooling down.
+ ///
bool IsCoolDown { get; }
+ ///
+ /// The charges count.
+ ///
ushort CurrentCharges { get; }
ushort MaxCharges { get; }
bool ElapsedAfterGCD(uint gcdCount = 0, uint abilityCount = 0);
@@ -35,12 +82,28 @@ internal interface IBaseAction : IAction, IEnable
#endregion
#region Target
+
+ ///
+ /// If target has these statuses from player self, this aciton will not used.
+ ///
StatusID[] TargetStatus { get; set; }
BattleChara Target { get; }
+ ///
+ /// Is target a boss.
+ ///
bool IsTargetBoss { get; }
+
+ ///
+ /// Is target will die immediately.
+ ///
bool IsTargetDying { get; }
+
+ ///
+ /// If this is an aoe action, how many hostile target would want to attack on, when you use this action.
+ ///
+ byte AOECount { set; }
#endregion
}
}
diff --git a/RotationSolver/Interfaces.cd b/RotationSolver/Interfaces.cd
index 2c5fd3633..42037d0b2 100644
--- a/RotationSolver/Interfaces.cd
+++ b/RotationSolver/Interfaces.cd
@@ -1,30 +1,30 @@
-
+
AAAAAAAAAAAgAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAA=
ITexture.cs
-
+
AAAAAAAAAAAAAAgAAAAAAAQAAAAAAAAAAAAAAAAAAAA=
ITexture.cs
-
+
AAAAAAAAAAAAgABAAAAAAQAAAAAEAAAAAAAAAgAAAAA=
Actions\IAction.cs
-
+
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ AAAogAAAAAAABYAAAIAIADAAAACABIAAAAABAAAAgMA=
Actions\IBaseAction.cs
@@ -42,5 +42,19 @@
Rotations\CustomRotation\ICustomRotation.cs
+
+
+
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA=
+ Rotations\Basic\BLU_Base.cs
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAA=
+ Rotations\Basic\NIN_Base.cs
+
+
\ No newline at end of file
diff --git a/RotationSolver/Rotations/Basic/BLU_Base.cs b/RotationSolver/Rotations/Basic/BLU_Base.cs
index 55237b1ad..c81291b80 100644
--- a/RotationSolver/Rotations/Basic/BLU_Base.cs
+++ b/RotationSolver/Rotations/Basic/BLU_Base.cs
@@ -9,6 +9,10 @@
namespace RotationSolver.Rotations.Basic;
+internal interface IBLUAction : IBaseAction
+{
+ bool OnSlot { get; }
+}
internal abstract class BLU_Base : CustomRotation.CustomRotation
{
internal enum BLUID : byte
@@ -41,11 +45,6 @@ internal enum BLUActionType : byte
private protected sealed override IBaseAction Raise => AngelWhisper;
- public interface IBLUAction : IBaseAction
- {
- bool OnSlot { get; }
- }
-
public class BLUAction : BaseAction, IBLUAction
{
private BLUActionType Type;
diff --git a/RotationSolver/Rotations/Basic/DRG_Base.cs b/RotationSolver/Rotations/Basic/DRG_Base.cs
index e4d48edd8..c05230e5b 100644
--- a/RotationSolver/Rotations/Basic/DRG_Base.cs
+++ b/RotationSolver/Rotations/Basic/DRG_Base.cs
@@ -25,7 +25,7 @@ internal abstract class DRG_Base : CustomRotation.CustomRotation
///
public static IBaseAction VorpalThrust { get; } = new BaseAction(ActionID.VorpalThrust)
{
- OtherIDsCombo = new[] { ActionID.RaidenThrust }
+ ComboIds = new[] { ActionID.RaidenThrust }
};
///
@@ -38,7 +38,7 @@ internal abstract class DRG_Base : CustomRotation.CustomRotation
///
public static IBaseAction Disembowel { get; } = new BaseAction(ActionID.Disembowel)
{
- OtherIDsCombo = new[] { ActionID.RaidenThrust }
+ ComboIds = new[] { ActionID.RaidenThrust }
};
///
@@ -77,7 +77,7 @@ internal abstract class DRG_Base : CustomRotation.CustomRotation
///
public static IBaseAction SonicThrust { get; } = new BaseAction(ActionID.SonicThrust)
{
- OtherIDsCombo = new[] { ActionID.DraconianFury }
+ ComboIds = new[] { ActionID.DraconianFury }
};
///
diff --git a/RotationSolver/Rotations/Basic/MCH_Base.cs b/RotationSolver/Rotations/Basic/MCH_Base.cs
index c2f04e722..c464443bd 100644
--- a/RotationSolver/Rotations/Basic/MCH_Base.cs
+++ b/RotationSolver/Rotations/Basic/MCH_Base.cs
@@ -59,7 +59,7 @@ protected static bool OverheatedEndAfterGCD(uint gctCount = 0, uint abilityCount
///
public static IBaseAction SlugShot { get; } = new BaseAction(ActionID.SlugShot)
{
- OtherIDsCombo = new[] { ActionID.HeatedSplitShot },
+ ComboIds = new[] { ActionID.HeatedSplitShot },
};
///
@@ -67,7 +67,7 @@ protected static bool OverheatedEndAfterGCD(uint gctCount = 0, uint abilityCount
///
public static IBaseAction CleanShot { get; } = new BaseAction(ActionID.CleanShot)
{
- OtherIDsCombo = new[] { ActionID.HeatedSlugShot },
+ ComboIds = new[] { ActionID.HeatedSlugShot },
};
///
diff --git a/RotationSolver/Rotations/Basic/NIN_Base.cs b/RotationSolver/Rotations/Basic/NIN_Base.cs
index cc091bdad..6a2da1362 100644
--- a/RotationSolver/Rotations/Basic/NIN_Base.cs
+++ b/RotationSolver/Rotations/Basic/NIN_Base.cs
@@ -6,6 +6,12 @@
namespace RotationSolver.Rotations.Basic;
+internal interface INinAction : IBaseAction
+{
+ IBaseAction[] Ninjutsus { get; }
+}
+
+
internal abstract class NIN_Base : CustomRotation.CustomRotation
{
private static NINGauge JobGauge => Service.JobGauges.Get();
@@ -22,10 +28,6 @@ internal abstract class NIN_Base : CustomRotation.CustomRotation
public sealed override ClassJobID[] JobIDs => new ClassJobID[] { ClassJobID.Ninja, ClassJobID.Rogue };
- public interface INinAction : IBaseAction
- {
- IBaseAction[] Ninjutsus { get; }
- }
public class NinAction : BaseAction, INinAction
{
diff --git a/RotationSolver/Rotations/Basic/RDM_Base.cs b/RotationSolver/Rotations/Basic/RDM_Base.cs
index 7fa336d09..55035d501 100644
--- a/RotationSolver/Rotations/Basic/RDM_Base.cs
+++ b/RotationSolver/Rotations/Basic/RDM_Base.cs
@@ -202,7 +202,7 @@ internal abstract class RDM_Base : CustomRotation.CustomRotation
///
public static IBaseAction Scorch { get; } = new BaseAction(ActionID.Scorch)
{
- OtherIDsCombo = new[] { ActionID.Verholy },
+ ComboIds = new[] { ActionID.Verholy },
};
///
@@ -216,7 +216,7 @@ internal abstract class RDM_Base : CustomRotation.CustomRotation
public static IBaseAction Manafication { get; } = new BaseAction(ActionID.Manafication)
{
ActionCheck = b => WhiteMana <= 50 && BlackMana <= 50 && InCombat && ManaStacks == 0,
- OtherIDsNot = new[] { ActionID.Riposte, ActionID.Zwerchhau, ActionID.Scorch, ActionID.Verflare, ActionID.Verholy },
+ ComboIdsNot = new[] { ActionID.Riposte, ActionID.Zwerchhau, ActionID.Scorch, ActionID.Verflare, ActionID.Verholy },
};
private protected override bool HealSingleGCD(out IAction act)
diff --git a/RotationSolver/Rotations/Basic/SAM_Base.cs b/RotationSolver/Rotations/Basic/SAM_Base.cs
index 781b4dedc..c2814cad9 100644
--- a/RotationSolver/Rotations/Basic/SAM_Base.cs
+++ b/RotationSolver/Rotations/Basic/SAM_Base.cs
@@ -105,7 +105,7 @@ internal abstract class SAM_Base : CustomRotation.CustomRotation
///
public static IBaseAction Mangetsu { get; } = new BaseAction(ActionID.Mangetsu)
{
- OtherIDsCombo = new[]
+ ComboIds = new[]
{
ActionID.Fuga,ActionID.Fuko
}
@@ -115,7 +115,7 @@ internal abstract class SAM_Base : CustomRotation.CustomRotation
///
public static IBaseAction Oka { get; } = new BaseAction(ActionID.Oka)
{
- OtherIDsCombo = new[]
+ ComboIds = new[]
{
ActionID.Fuga,ActionID.Fuko
}
diff --git a/RotationSolver/Rotations/Healer/SCH/SCH_Default.cs b/RotationSolver/Rotations/Healer/SCH/SCH_Default.cs
index d68ead0f2..c0cb789cf 100644
--- a/RotationSolver/Rotations/Healer/SCH/SCH_Default.cs
+++ b/RotationSolver/Rotations/Healer/SCH/SCH_Default.cs
@@ -19,7 +19,7 @@ internal sealed class SCH_Default : SCH_Base
public SCH_Default()
{
//防止大仙女吞技能
- SummonSeraph.ComboCheck = b => WhisperingDawn.ElapsedAfterGCD(1) || FeyIllumination.ElapsedAfterGCD(1) || FeyBlessing.ElapsedAfterGCD(1);
+ SummonSeraph.RotationCheck = b => WhisperingDawn.ElapsedAfterGCD(1) || FeyIllumination.ElapsedAfterGCD(1) || FeyBlessing.ElapsedAfterGCD(1);
}
protected override bool CanHealSingleSpell => base.CanHealSingleSpell && (Configs.GetBool("GCDHeal") || TargetUpdater.PartyHealers.Count() < 2);
protected override bool CanHealAreaSpell => base.CanHealAreaSpell && (Configs.GetBool("GCDHeal") || TargetUpdater.PartyHealers.Count() < 2);
diff --git a/RotationSolver/Rotations/Melee/RPR/RPR_Default.cs b/RotationSolver/Rotations/Melee/RPR/RPR_Default.cs
index 768be224d..1e21608e8 100644
--- a/RotationSolver/Rotations/Melee/RPR/RPR_Default.cs
+++ b/RotationSolver/Rotations/Melee/RPR/RPR_Default.cs
@@ -21,14 +21,14 @@ private protected override IRotationConfigSet CreateConfiguration()
public RPR_Default()
{
//保留红条不第一时间打出去,保证暴食不空转 同时保证不延后大丰收
- BloodStalk.ComboCheck = b => !Player.HasStatus(true, StatusID.BloodsownCircle) && !Player.HasStatus(true, StatusID.ImmortalSacrifice) && (Gluttony.EnoughLevel && !Gluttony.WillHaveOneChargeGCD(4) || !Gluttony.EnoughLevel || Soul == 100);
- GrimSwathe.ComboCheck = BloodStalk.ComboCheck;
+ BloodStalk.RotationCheck = b => !Player.HasStatus(true, StatusID.BloodsownCircle) && !Player.HasStatus(true, StatusID.ImmortalSacrifice) && (Gluttony.EnoughLevel && !Gluttony.WillHaveOneChargeGCD(4) || !Gluttony.EnoughLevel || Soul == 100);
+ GrimSwathe.RotationCheck = BloodStalk.RotationCheck;
//必须有dot
- ArcaneCircle.ComboCheck = b => Target.HasStatus(true, StatusID.DeathsDesign);
+ ArcaneCircle.RotationCheck = b => Target.HasStatus(true, StatusID.DeathsDesign);
//必须进战
- HarvestMoon.ComboCheck = b => InCombat;
+ HarvestMoon.RotationCheck = b => InCombat;
}
public override SortedList DescriptionDict => new()
diff --git a/RotationSolver/Rotations/Melee/SAM/SAM_Default.cs b/RotationSolver/Rotations/Melee/SAM/SAM_Default.cs
index 5d1cc847e..b593770ad 100644
--- a/RotationSolver/Rotations/Melee/SAM/SAM_Default.cs
+++ b/RotationSolver/Rotations/Melee/SAM/SAM_Default.cs
@@ -28,15 +28,15 @@ private protected override IRotationConfigSet CreateConfiguration()
public SAM_Default()
{
//明镜里ban了最基础技能
- Hakaze.ComboCheck = b => !haveMeikyoShisui;
- Fuko.ComboCheck = b => !haveMeikyoShisui;
- Fuga.ComboCheck = b => !haveMeikyoShisui;
- Enpi.ComboCheck = b => !haveMeikyoShisui;
+ Hakaze.RotationCheck = b => !haveMeikyoShisui;
+ Fuko.RotationCheck = b => !haveMeikyoShisui;
+ Fuga.RotationCheck = b => !haveMeikyoShisui;
+ Enpi.RotationCheck = b => !haveMeikyoShisui;
//保证有buff加成
- Higanbana.ComboCheck = b => HaveMoon && HaveFlower;
- OgiNamikiri.ComboCheck = b => HaveMoon && HaveFlower;
- HissatsuSenei.ComboCheck = b => HaveMoon && HaveFlower;
- HissatsuGuren.ComboCheck = b => HaveMoon && HaveFlower;
+ Higanbana.RotationCheck = b => HaveMoon && HaveFlower;
+ OgiNamikiri.RotationCheck = b => HaveMoon && HaveFlower;
+ HissatsuSenei.RotationCheck = b => HaveMoon && HaveFlower;
+ HissatsuGuren.RotationCheck = b => HaveMoon && HaveFlower;
}
public override SortedList DescriptionDict => new()
diff --git a/RotationSolver/Rotations/RangedMagicial/RDM/RDM_Default.cs b/RotationSolver/Rotations/RangedMagicial/RDM/RDM_Default.cs
index 3ecbd36fd..5b67c2fc2 100644
--- a/RotationSolver/Rotations/RangedMagicial/RDM/RDM_Default.cs
+++ b/RotationSolver/Rotations/RangedMagicial/RDM/RDM_Default.cs
@@ -23,7 +23,7 @@ internal sealed class RDM_Default : RDM_Base
static RDM_Default()
{
- Acceleration.ComboCheck = b => InCombat;
+ Acceleration.RotationCheck = b => InCombat;
}
private protected override IRotationConfigSet CreateConfiguration()
diff --git a/RotationSolver/Rotations/RangedMagicial/SMN/SMN_Default.cs b/RotationSolver/Rotations/RangedMagicial/SMN/SMN_Default.cs
index 3925e3a6e..bb42d2859 100644
--- a/RotationSolver/Rotations/RangedMagicial/SMN/SMN_Default.cs
+++ b/RotationSolver/Rotations/RangedMagicial/SMN/SMN_Default.cs
@@ -24,8 +24,8 @@ private protected override IRotationConfigSet CreateConfiguration()
public SMN_Default()
{
- RuinIV.ComboCheck = b => !Player.HasStatus(true, StatusID.Swiftcast) && !InBahamut && !InPhoenix;
- SearingLight.ComboCheck = b => !Player.HasStatus(false, StatusID.SearingLight);
+ RuinIV.RotationCheck = b => !Player.HasStatus(true, StatusID.Swiftcast) && !InBahamut && !InPhoenix;
+ SearingLight.RotationCheck = b => !Player.HasStatus(false, StatusID.SearingLight);
}
protected override bool CanHealSingleSpell => false;
diff --git a/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs b/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs
index 2d27bf85c..4785b6827 100644
--- a/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs
+++ b/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs
@@ -25,7 +25,7 @@ internal sealed class WAR_Default : WAR_Base
static WAR_Default()
{
- InnerBeast.ComboCheck = b => !Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest);
+ InnerBeast.RotationCheck = b => !Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest);
}
private protected override bool DefenceAreaAbility(byte abilityRemain, out IAction act)