diff --git a/RotationSolver.Default/Healer/WHM_Default.cs b/RotationSolver.Default/Healer/WHM_Default.cs index d1cf3c5f8..3e85d63d2 100644 --- a/RotationSolver.Default/Healer/WHM_Default.cs +++ b/RotationSolver.Default/Healer/WHM_Default.cs @@ -15,12 +15,7 @@ protected override IRotationConfigSet CreateConfiguration() public static IBaseAction RegenDefense { get; } = new BaseAction(ActionID.Regen, true, isEot: true, isTimeline: true) { ChoiceTarget = TargetFilter.FindAttackedTarget, - TargetStatus = new[] - { - StatusID.Regen1, - StatusID.Regen2, - StatusID.Regen3, - } + TargetStatus = Regen.TargetStatus, }; protected override bool GeneralGCD(out IAction act) diff --git a/RotationSolver.Default/RotationSolver.Default.csproj b/RotationSolver.Default/RotationSolver.Default.csproj index 9cfba3873..5b6a7cf44 100644 --- a/RotationSolver.Default/RotationSolver.Default.csproj +++ b/RotationSolver.Default/RotationSolver.Default.csproj @@ -3,11 +3,11 @@ net7.0-windows enable - x64 - $(AppData)\XIVLauncher\addon\Hooks\dev\ - AnyCPU - ArchiTed - 0.9.0 + x64 + $(AppData)\XIVLauncher\addon\Hooks\dev\ + AnyCPU + ArchiTed + 0.9.0 @@ -41,18 +41,16 @@ $(DalamudLibPath)Newtonsoft.Json.dll False - - - - - - - - - - - + + + + + + + + + diff --git a/RotationSolver.Old/Melee/MNK_Old.cs b/RotationSolver.Old/Melee/MNK_Old.cs new file mode 100644 index 000000000..fbc07878d --- /dev/null +++ b/RotationSolver.Old/Melee/MNK_Old.cs @@ -0,0 +1,148 @@ +namespace RotationSolver.Old.Melee; + +[RotationDesc(ActionID.RiddleofFire)] +internal sealed class MNK_Old : MNK_Base +{ + public override string GameVersion => "6.0"; + + public override string RotationName => "Old"; + + protected override IRotationConfigSet CreateConfiguration() + { + return base.CreateConfiguration().SetBool("AutoFormShift", true, "Auto use FormShift"); + } + + private bool OpoOpoForm(out IAction act) + { + if (ArmoftheDestroyer.CanUse(out act)) return true; + if (DragonKick.CanUse(out act)) return true; + if (Bootshine.CanUse(out act)) return true; + return false; + } + + private bool RaptorForm(out IAction act) + { + if (FourpointFury.CanUse(out act)) return true; + + if (Player.WillStatusEndGCD(3, 0, true, StatusID.DisciplinedFist) && TwinSnakes.CanUse(out act)) return true; + + if (TrueStrike.CanUse(out act)) return true; + return false; + } + + private bool CoerlForm(out IAction act) + { + if (Rockbreaker.CanUse(out act)) return true; + if (Demolish.CanUse(out act)) return true; + if (SnapPunch.CanUse(out act)) return true; + return false; + } + + private bool LunarNadi(out IAction act) + { + if (OpoOpoForm(out act)) return true; + return false; + } + + private bool SolarNadi(out IAction act) + { + if (!BeastChakras.Contains(BeastChakra.RAPTOR)) + { + if (RaptorForm(out act)) return true; + } + else if (!BeastChakras.Contains(BeastChakra.OPOOPO)) + { + if (OpoOpoForm(out act)) return true; + } + else + { + if (CoerlForm(out act)) return true; + } + + return false; + } + + protected override bool GeneralGCD(out IAction act) + { + //满了的话,放三个大招 + if (!BeastChakras.Contains(BeastChakra.NONE)) + { + if (HasSolar && HasLunar) + { + if (PhantomRush.CanUse(out act, mustUse: true)) return true; + if (TornadoKick.CanUse(out act, mustUse: true)) return true; + } + if (BeastChakras.Contains(BeastChakra.RAPTOR)) + { + if (RisingPhoenix.CanUse(out act, mustUse: true)) return true; + if (FlintStrike.CanUse(out act, mustUse: true)) return true; + } + else + { + if (ElixirField.CanUse(out act, mustUse: true)) return true; + } + } + //有震脚就阴阳 + else if (Player.HasStatus(true, StatusID.PerfectBalance)) + { + if (HasSolar && LunarNadi(out act)) return true; + if (SolarNadi(out act)) return true; + } + + if (Player.HasStatus(true, StatusID.CoerlForm)) + { + if (CoerlForm(out act)) return true; + } + else if (Player.HasStatus(true, StatusID.RaptorForm)) + { + if (RaptorForm(out act)) return true; + } + if (OpoOpoForm(out act)) return true; + + if (SpecialType == SpecialCommandType.MoveForward && MoveForwardAbility(1, out act)) return true; + if (Chakra < 5 && Meditation.CanUse(out act)) return true; + if (Configs.GetBool("AutoFormShift") && FormShift.CanUse(out act)) return true; + + return false; + } + + protected override bool AttackAbility(byte abilitiesRemaining, out IAction act) + { + if (InBurst) + { + if (RiddleofFire.CanUse(out act)) return true; + if (Brotherhood.CanUse(out act)) return true; + } + + //震脚 + if (BeastChakras.Contains(BeastChakra.NONE)) + { + //有阳斗气 + if (HasSolar) + { + //两种Buff都在6s以上 + var dis = Player.WillStatusEndGCD(3, 0, true, StatusID.DisciplinedFist); + + Demolish.CanUse(out _); + var demo = Demolish.Target.WillStatusEndGCD(3, 0, true, StatusID.Demolish); + + if (!dis && (!demo || !PerfectBalance.IsCoolingDown)) + { + if (PerfectBalance.CanUse(out act, emptyOrSkipCombo: true)) return true; + } + } + else + { + if (PerfectBalance.CanUse(out act, emptyOrSkipCombo: true)) return true; + } + } + + if (RiddleofWind.CanUse(out act)) return true; + + if (HowlingFist.CanUse(out act)) return true; + if (SteelPeak.CanUse(out act)) return true; + if (HowlingFist.CanUse(out act, mustUse: true)) return true; + + return false; + } +} diff --git a/RotationSolver.Old/RotationSolver.Old.csproj b/RotationSolver.Old/RotationSolver.Old.csproj new file mode 100644 index 000000000..3f40e9ca3 --- /dev/null +++ b/RotationSolver.Old/RotationSolver.Old.csproj @@ -0,0 +1,60 @@ + + + + net7.0-windows + enable + x64 + $(AppData)\XIVLauncher\addon\Hooks\dev\ + AnyCPU + ArchiTed + + + + + + + $(DalamudLibPath)Dalamud.dll + False + + + $(DalamudLibPath)ImGui.NET.dll + False + + + $(DalamudLibPath)ImGuiScene.dll + False + + + $(DalamudLibPath)Lumina.dll + False + + + $(DalamudLibPath)Lumina.Excel.dll + False + + + $(DalamudLibPath)FFXIVClientStructs.dll + False + + + $(DalamudLibPath)Newtonsoft.Json.dll + False + + + + + + + + + + + + + + + + + + + diff --git a/RotationSolver.sln b/RotationSolver.sln index d655a7ff5..bd6c158c0 100644 --- a/RotationSolver.sln +++ b/RotationSolver.sln @@ -14,6 +14,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RotationSolver.Basic", "Rot EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RotationSolver", "RotationSolver\RotationSolver.csproj", "{99EA3D95-33DC-424F-A9E6-FE6064F11592}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RotationSolver.Old", "RotationSolver.Old\RotationSolver.Old.csproj", "{0F07FDE9-7189-43E9-8651-F1963D829DDA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -32,6 +34,10 @@ Global {99EA3D95-33DC-424F-A9E6-FE6064F11592}.Debug|Any CPU.Build.0 = Debug|Any CPU {99EA3D95-33DC-424F-A9E6-FE6064F11592}.Release|Any CPU.ActiveCfg = Release|Any CPU {99EA3D95-33DC-424F-A9E6-FE6064F11592}.Release|Any CPU.Build.0 = Release|Any CPU + {0F07FDE9-7189-43E9-8651-F1963D829DDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F07FDE9-7189-43E9-8651-F1963D829DDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F07FDE9-7189-43E9-8651-F1963D829DDA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F07FDE9-7189-43E9-8651-F1963D829DDA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RotationSolver/Commands/RSCommands_Actions.cs b/RotationSolver/Commands/RSCommands_Actions.cs index fce1ec4c7..bf3ec89ed 100644 --- a/RotationSolver/Commands/RSCommands_Actions.cs +++ b/RotationSolver/Commands/RSCommands_Actions.cs @@ -59,7 +59,7 @@ internal static unsafe void DoAnAction(bool isGCD) } internal static void ResetSpecial() => DoSpecialCommandType(SpecialCommandType.EndSpecial, false); - internal static void CancelState() + private static void CancelState() { if (StateType != StateCommandType.Cancel) DoStateCommandType(StateCommandType.Cancel); } diff --git a/RotationSolver/RotationHelper.cs b/RotationSolver/RotationHelper.cs index 1555e7d4f..a086ace94 100644 --- a/RotationSolver/RotationHelper.cs +++ b/RotationSolver/RotationHelper.cs @@ -11,6 +11,7 @@ internal static class RotationHelper static readonly string[] _allowedAssembly = new string[] { DefaultAssembly, + "RotationSolver.Old", }; public static bool IsDefault(this ICustomRotation rotation) diff --git a/RotationSolver/RotationSolverPlugin.cs b/RotationSolver/RotationSolverPlugin.cs index 73ee944d5..1b8fb545b 100644 --- a/RotationSolver/RotationSolverPlugin.cs +++ b/RotationSolver/RotationSolverPlugin.cs @@ -33,7 +33,7 @@ public unsafe RotationSolverPlugin(DalamudPluginInterface pluginInterface) File.ReadAllText(Service.Interface.ConfigFile.FullName)) ?? new PluginConfiguration(); } - catch() + catch { Service.Config = new PluginConfiguration(); } diff --git a/RotationSolver/Updaters/SocialUpdater.cs b/RotationSolver/Updaters/SocialUpdater.cs index 266f1ba70..b22459fe2 100644 --- a/RotationSolver/Updaters/SocialUpdater.cs +++ b/RotationSolver/Updaters/SocialUpdater.cs @@ -59,8 +59,6 @@ internal static void Enable() static async void DutyState_DutyCompleted(object sender, ushort e) { - RSCommands.CancelState(); - if (DataCenter.PartyMembers.Count() < 2) return; await Task.Delay(new Random().Next(4000, 6000));