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)