From ecce60d462cce795a1af2c9269940c16ab0ccd93 Mon Sep 17 00:00:00 2001 From: xan <149614526+xanunderscore@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:17:33 -0500 Subject: [PATCH 1/5] it typechecks --- RotationSolver.Basic/Configuration/Configs.cs | 7 ++ .../Configuration/OtherConfiguration.cs | 5 +- RotationSolver.Basic/Data/ActionID.cs | 24 +++- RotationSolver.Basic/Data/StatusID.cs | 24 +++- .../Rotations/CustomRotation_Ability.cs | 1 + .../Rotations/CustomRotation_Actions.cs | 116 ++++++++++++++---- .../Rotations/CustomRotation_GCD.cs | 10 +- .../UI/RotationConfigWindow_Config.cs | 8 ++ 8 files changed, 158 insertions(+), 37 deletions(-) diff --git a/RotationSolver.Basic/Configuration/Configs.cs b/RotationSolver.Basic/Configuration/Configs.cs index 395d4e029..34a62b062 100644 --- a/RotationSolver.Basic/Configuration/Configs.cs +++ b/RotationSolver.Basic/Configuration/Configs.cs @@ -357,6 +357,12 @@ public enum PluginConfigBool : byte [Default(false)] TargetAllForFriendly, [Default(false)] ShowCooldownWindow, + [Default(true)] UseLostActions, + [Default(true)] UseLostFlareStarOnBosses, + [Default(false)] UseLostFlareStarOnMobs, + [Default(true)] UseLostAssassinationOnMobs, + [Default(true)] LostReflectAutoRefresh, + [Default(true)] RecordCastingArea, [Default(true)] AutoOffAfterCombat, @@ -443,6 +449,7 @@ public enum PluginConfigFloat : byte [Default(24f, 0f, 90f), Unit(ConfigUnitType.Degree)] MoveTargetAngle, [Default(90f, 10f, 1800f), Unit(ConfigUnitType.Seconds)] BossTimeToKill, [Default(10f, 0f, 60f), Unit(ConfigUnitType.Seconds)] DyingTimeToKill, + [Default(15f, 0f, 1800f), Unit(ConfigUnitType.Seconds)] LostAssassinationTimeToKill, [Default(16f, 9.6f, 96f), Unit(ConfigUnitType.Pixels)] CooldownFontSize, diff --git a/RotationSolver.Basic/Configuration/OtherConfiguration.cs b/RotationSolver.Basic/Configuration/OtherConfiguration.cs index baa9773a6..dac050568 100644 --- a/RotationSolver.Basic/Configuration/OtherConfiguration.cs +++ b/RotationSolver.Basic/Configuration/OtherConfiguration.cs @@ -48,6 +48,9 @@ public class OtherConfiguration { (uint) ActionID.SteelCyclone, 2}, { (uint) ActionID.VariantSpiritDart, 1 }, { (uint) ActionID.VariantSpiritDart2, 1 }, + { (uint) ActionID.LostRampage, 1 }, + { (uint) ActionID.LostBurst, 1 }, + { (uint) ActionID.LostFlarestar, 1 } }; public static Dictionary ActionTTK = new() @@ -259,4 +262,4 @@ private static void InitOne(ref T value, string name, bool download = true) } } #pragma warning restore CA2211 -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member \ No newline at end of file +#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member diff --git a/RotationSolver.Basic/Data/ActionID.cs b/RotationSolver.Basic/Data/ActionID.cs index 8dd72c2b2..48c2b80a4 100644 --- a/RotationSolver.Basic/Data/ActionID.cs +++ b/RotationSolver.Basic/Data/ActionID.cs @@ -5208,6 +5208,21 @@ public enum ActionID : uint /// LostBurst = 23909, + /// + /// + /// + LostProtect = 20719, + + /// + /// + /// + LostShell = 20710, + + /// + /// + /// + LostReflect = 20711, + /// /// /// @@ -5216,12 +5231,17 @@ public enum ActionID : uint /// /// /// - LostProtect = 20719, + LostFontOfPower = 20717, /// /// /// - LostShell = 20710, + BannerOfHonoredSacrifice = 20721, + + /// + /// + /// + LostAssassination = 23914, /// /// diff --git a/RotationSolver.Basic/Data/StatusID.cs b/RotationSolver.Basic/Data/StatusID.cs index 6f12f3ee7..2d8899d70 100644 --- a/RotationSolver.Basic/Data/StatusID.cs +++ b/RotationSolver.Basic/Data/StatusID.cs @@ -1336,23 +1336,43 @@ public enum StatusID : ushort /// /// /// - LostSpellforge = 2338, + SpiritOfTheBeast = 2324, /// /// /// - MagicalAversion = 2370, + BannerOfHonoredSacrifice = 2327, + + /// + /// + /// + LostReflect = 2337, + + /// + /// + /// + LostSpellforge = 2338, /// /// /// LostSteelsting = 2339, + /// + /// + /// + LostFontOfPower = 2346, + /// /// /// PhysicalAversion = 2369, + /// + /// + /// + MagicalAversion = 2370, + /// /// /// diff --git a/RotationSolver.Basic/Rotations/CustomRotation_Ability.cs b/RotationSolver.Basic/Rotations/CustomRotation_Ability.cs index 75c040783..afbb56b45 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_Ability.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_Ability.cs @@ -406,6 +406,7 @@ protected virtual bool AttackAbility(out IAction act) if (VariantSpiritDart2.CanUse(out act, CanUseOption.MustUse)) return true; if (VariantRampart.CanUse(out act)) return true; if (VariantRampart2.CanUse(out act)) return true; + if (LostAssassination.CanUse(out act)) return true; return false; } } diff --git a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs index 7fe995a0c..dbf7fdb82 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs @@ -1,5 +1,6 @@ using ECommons.ExcelServices; using RotationSolver.Basic.Traits; +using RotationSolver.Basic.Configuration; namespace RotationSolver.Basic.Rotations; @@ -98,7 +99,7 @@ public override bool CanUse(out IAction act, CanUseOption option = CanUseOption. public static IBaseAction SecondWind { get; } = new RoleAction(ActionID.SecondWind, new JobRole[] { JobRole.RangedPhysical, JobRole.Melee }, ActionOption.Heal) { - ActionCheck = (b, m) => Player?.GetHealthRatio() < Service.Config.GetValue(DataCenter.Job, Configuration.JobConfigFloat.HealthSingleAbility) && InCombat, + ActionCheck = (b, m) => Player?.GetHealthRatio() < Service.Config.GetValue(DataCenter.Job, JobConfigFloat.HealthSingleAbility) && InCombat, }; /// @@ -390,8 +391,8 @@ public override bool CanUse(out IAction act, CanUseOption option = CanUseOption. public static IBaseAction LostSpellforge { get; } = new BaseAction(ActionID.LostSpellforge, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostSpellforge }, - ActionCheck = (b, m) => LostSpellforge.Target?.HasStatus(false, StatusID.MagicalAversion) ?? false, + TargetStatus = new StatusID[] { StatusID.LostSpellforge }, + // TargetStatusIsGlobal = true, ChoiceTarget = (targets, mustUse) => targets.FirstOrDefault(t => (Job)t.ClassJob.Id switch { Job.WAR @@ -419,8 +420,8 @@ or Job.RDM public static IBaseAction LostSteelsting { get; } = new BaseAction(ActionID.LostSteelsting, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostSteelsting }, - ActionCheck = (b, m) => LostSteelsting.Target?.HasStatus(false, StatusID.PhysicalAversion) ?? false, + TargetStatus = new StatusID[] { StatusID.LostSteelsting }, + // TargetStatusIsGlobal = true, ChoiceTarget = (targets, mustUse) => targets.FirstOrDefault(t => (Job)t.ClassJob.Id switch { Job.WHM @@ -444,21 +445,53 @@ or Job.RDM /// /// /// - public static IBaseAction LostRampage { get; } = new BaseAction(ActionID.LostRampage, - ActionOption.DutyAction | ActionOption.Friendly) - { - StatusProvide = new StatusID[] { StatusID.LostRampage }, - ActionCheck = (b, m) => LostRampage.Target?.HasStatus(false, StatusID.PhysicalAversion) ?? false, + public static IBaseAction LostRampage { get; } = new RoleAction( + ActionID.LostRampage, + new JobRole[] { JobRole.Melee, JobRole.Tank, JobRole.RangedPhysical }, + ActionOption.DutyAction + ) { + TargetStatus = new StatusID[] { StatusID.LostRampage }, + // TargetStatusIsGlobal = true, + FilterForHostiles = (targets) => targets.Where(tar => + ObjectHelper.CanInterrupt(tar) || + (tar.IsBossFromIcon() && tar.HasStatus(false, StatusID.PhysicalAversion))) }; /// /// /// - public static IBaseAction LostBurst { get; } = new BaseAction(ActionID.LostBurst, - ActionOption.DutyAction | ActionOption.Friendly) - { - StatusProvide = new StatusID[] { StatusID.LostBurst }, - ActionCheck = (b, m) => LostBurst.Target?.HasStatus(false, StatusID.MagicalAversion) ?? false, + public static IBaseAction LostBurst { get; } = new RoleAction( + ActionID.LostBurst, + new JobRole[] { JobRole.Healer, JobRole.RangedMagical }, + ActionOption.DutyAction + ) { + TargetStatus = new StatusID[] { StatusID.LostBurst }, + // TargetStatusIsGlobal = true, + FilterForHostiles = (targets) => targets.Where(tar => + ObjectHelper.CanInterrupt(tar) || + (tar.IsBossFromIcon() && tar.HasStatus(false, StatusID.MagicalAversion))), + }; + + /// + /// + /// + public static IBaseAction LostAssassination { get; } = new RoleAction( + ActionID.LostAssassination, + new JobRole[] { JobRole.Melee, JobRole.Tank, JobRole.RangedPhysical }, + ActionOption.DutyAction + ) { + ActionCheck = (tar, mustUse) => { + if (tar.IsBossFromIcon()) { + // use for Lost Font of Power on bosses + return Player.HasStatus(true, StatusID.SpiritOfTheBeast) && !tar.IsDying(); + } else if (Service.Config.GetValue(PluginConfigBool.UseLostAssassinationOnMobs)) { + // use to instakill tanky mobs + var ttk = Service.Config.GetValue(PluginConfigFloat.LostAssassinationTimeToKill); + return tar.FindEnemyPositional() == EnemyPositional.Rear && tar.GetTimeToKill(true) >= ttk; + } + + return false; + } }; /// @@ -467,7 +500,8 @@ or Job.RDM public static IBaseAction LostBravery { get; } = new BaseAction(ActionID.LostBravery, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostBravery }, + TargetStatus = new StatusID[] { StatusID.LostBravery }, + // TargetStatusIsGlobal = true, }; /// @@ -476,7 +510,8 @@ or Job.RDM public static IBaseAction LostProtect { get; } = new BaseAction(ActionID.LostProtect, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostProtect, StatusID.LostProtect2 }, + TargetStatus = new StatusID[] { StatusID.LostProtect, StatusID.LostProtect2 }, + // TargetStatusIsGlobal = true, }; /// @@ -485,7 +520,8 @@ or Job.RDM public static IBaseAction LostShell { get; } = new BaseAction(ActionID.LostShell, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostShell, StatusID.LostShell2 }, + TargetStatus = new StatusID[] { StatusID.LostShell, StatusID.LostShell2 }, + // TargetStatusIsGlobal = true, }; /// @@ -494,7 +530,8 @@ or Job.RDM public static IBaseAction LostProtect2 { get; } = new BaseAction(ActionID.LostProtect2, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostProtect2 }, + TargetStatus = new StatusID[] { StatusID.LostProtect2 }, + // TargetStatusIsGlobal = true, }; /// @@ -503,7 +540,8 @@ or Job.RDM public static IBaseAction LostShell2 { get; } = new BaseAction(ActionID.LostShell2, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostShell2 }, + TargetStatus = new StatusID[] { StatusID.LostShell2 }, + // TargetStatusIsGlobal = true, }; /// @@ -512,7 +550,8 @@ or Job.RDM public static IBaseAction LostBubble { get; } = new BaseAction(ActionID.LostBubble, ActionOption.DutyAction | ActionOption.Friendly) { - StatusProvide = new StatusID[] { StatusID.LostBubble }, + TargetStatus = new StatusID[] { StatusID.LostBubble }, + // TargetStatusIsGlobal = true, }; /// @@ -522,7 +561,8 @@ or Job.RDM ActionOption.DutyAction | ActionOption.Defense) { ChoiceTarget = TargetFilter.FindAttackedTarget, - StatusProvide = new StatusID[] { StatusID.LostStoneskin }, + TargetStatus = new StatusID[] { StatusID.LostStoneskin }, + // TargetStatusIsGlobal = true, }; /// @@ -540,7 +580,21 @@ or Job.RDM public static IBaseAction LostFlarestar { get; } = new BaseAction(ActionID.LostFlarestar, ActionOption.DutyAction) { - StatusProvide = new StatusID[] { StatusID.LostFlarestar }, + FilterForHostiles = (tars) => tars.Where(t => + Service.Config.GetValue(PluginConfigBool.UseLostFlareStarOnMobs) || + (t.IsBossFromIcon() && Service.Config.GetValue(PluginConfigBool.UseLostFlareStarOnBosses))), + TargetStatus = new StatusID[] { StatusID.LostFlarestar }, + // TargetStatusIsGlobal = true, + }; + + /// + /// + /// + public static IBaseAction LostReflect { get; } = new BaseAction(ActionID.LostReflect, ActionOption.DutyAction | ActionOption.Friendly) { + ChoiceTarget = (tars, mustUse) => tars.FirstOrDefault(b => + Service.Config.GetValue(PluginConfigBool.LostReflectAutoRefresh) && + b.HasStatus(true, StatusID.LostReflect) && + b.WillStatusEndGCD(1, 0, true, StatusID.LostReflect)) }; /// @@ -549,7 +603,21 @@ or Job.RDM public static IBaseAction LostSeraphStrike { get; } = new BaseAction(ActionID.LostSeraphStrike, ActionOption.DutyAction) { - StatusProvide = new StatusID[] { StatusID.LostSeraphStrike }, + TargetStatus = new StatusID[] { StatusID.LostSeraphStrike }, + }; + + /// + /// + /// + public static IBaseAction LostFontOfPower { get; } = new BaseAction(ActionID.LostFontOfPower, ActionOption.DutyAction) { + StatusProvide = new StatusID[] { StatusID.LostFontOfPower }, + }; + + /// + /// + /// + public static IBaseAction BannerOfHonoredSacrifice { get; } = new BaseAction(ActionID.BannerOfHonoredSacrifice, ActionOption.DutyAction) { + StatusProvide = new StatusID[] { StatusID.BannerOfHonoredSacrifice }, }; #endregion diff --git a/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs b/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs index 5446c746a..834732e77 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs @@ -183,22 +183,16 @@ private static bool EsunaAction(out IAction act, CanUseOption option = CanUseOpt protected virtual bool EmergencyGCD(out IAction act) { #region Bozja - if (LostSpellforge.CanUse(out act)) return true; - if (LostSteelsting.CanUse(out act)) return true; + if (LostFlarestar.CanUse(out act)) return true; if (LostRampage.CanUse(out act)) return true; if (LostBurst.CanUse(out act)) return true; - + if (LostReflect.CanUse(out act)) return true; if (LostBravery.CanUse(out act)) return true; if (LostBubble.CanUse(out act)) return true; if (LostShell2.CanUse(out act)) return true; if (LostShell.CanUse(out act)) return true; if (LostProtect2.CanUse(out act)) return true; if (LostProtect.CanUse(out act)) return true; - - //Add your own logic here. - //if (LostFlarestar.CanUse(out act)) return true; - //if (LostSeraphStrike.CanUse(out act)) return true; - #endregion #region PvP diff --git a/RotationSolver/UI/RotationConfigWindow_Config.cs b/RotationSolver/UI/RotationConfigWindow_Config.cs index 6484d00d0..b03be2607 100644 --- a/RotationSolver/UI/RotationConfigWindow_Config.cs +++ b/RotationSolver/UI/RotationConfigWindow_Config.cs @@ -834,6 +834,14 @@ private static void DrawAutoActionCondition() new CheckBoxSearchPlugin(PluginConfigBool.AutoSpeedOutOfCombat), }), + + new CheckBoxSearchPlugin(PluginConfigBool.UseLostActions, new ISearchable[] { + new CheckBoxSearchPlugin(PluginConfigBool.UseLostFlareStarOnBosses), + new CheckBoxSearchPlugin(PluginConfigBool.UseLostFlareStarOnMobs), + new CheckBoxSearchPlugin(PluginConfigBool.UseLostAssassinationOnMobs, + new DragFloatSearchPlugin(PluginConfigFloat.LostAssassinationTimeToKill, 0.5f)), + new CheckBoxSearchPlugin(PluginConfigBool.LostReflectAutoRefresh) + }), }; #endregion From 6e8bfce010b5dfe91b6da1ae00ca72678898e539 Mon Sep 17 00:00:00 2001 From: xan <149614526+xanunderscore@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:35:32 -0500 Subject: [PATCH 2/5] update config descriptions --- RotationSolver/Localization/ConfigTranslation.cs | 6 ++++++ RotationSolver/Localization/Strings.cs | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/RotationSolver/Localization/ConfigTranslation.cs b/RotationSolver/Localization/ConfigTranslation.cs index 64f18fec2..8f43f190b 100644 --- a/RotationSolver/Localization/ConfigTranslation.cs +++ b/RotationSolver/Localization/ConfigTranslation.cs @@ -118,6 +118,11 @@ internal static class ConfigTranslation PluginConfigBool.HealWhenNothingTodo => LocalizationManager.RightLang.ConfigWindow_Param_HealWhenNothingTodo, PluginConfigBool.UseResourcesAction => LocalizationManager.RightLang.ConfigWindow_Auto_UseResourcesAction, PluginConfigBool.OnlyHealSelfWhenNoHealer => LocalizationManager.RightLang.ConfigWindow_Auto_OnlyHealSelfWhenNoHealer, + PluginConfigBool.UseLostActions => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostActions, + PluginConfigBool.UseLostFlareStarOnBosses => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostFlareStarOnBosses, + PluginConfigBool.UseLostFlareStarOnMobs => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostFlareStarOnMobs, + PluginConfigBool.UseLostAssassinationOnMobs => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostAssassinationOnMobs, + PluginConfigBool.LostReflectAutoRefresh => LocalizationManager.RightLang.ConfigWindow_Auto_LostReflectAutoRefresh, // target PluginConfigBool.AddEnemyListToHostile => LocalizationManager.RightLang.ConfigWindow_Param_AddEnemyListToHostile, @@ -204,6 +209,7 @@ internal static class ConfigTranslation PluginConfigFloat.AutoHealTimeToKill => LocalizationManager.RightLang.ConfigWindow_Auto_AutoHealTimeToKill, PluginConfigFloat.ProvokeDelayMin => LocalizationManager.RightLang.ConfigWindow_Auto_ProvokeDelay, PluginConfigFloat.HealthForGuard => LocalizationManager.RightLang.ConfigWindow_Param_HealthForGuard, + PluginConfigFloat.LostAssassinationTimeToKill => LocalizationManager.RightLang.ConfigWindow_Auto_LostAssassinationTimeToKill, // target PluginConfigFloat.BossTimeToKill => LocalizationManager.RightLang.ConfigWindow_Param_BossTimeToKill, PluginConfigFloat.DyingTimeToKill => LocalizationManager.RightLang.ConfigWindow_Param_DyingTimeToKill, diff --git a/RotationSolver/Localization/Strings.cs b/RotationSolver/Localization/Strings.cs index 15b7436ef..00fa5569a 100644 --- a/RotationSolver/Localization/Strings.cs +++ b/RotationSolver/Localization/Strings.cs @@ -792,6 +792,12 @@ internal class Strings public string ConfigWindow_Auto_UseResourcesAction { get; set; } = "Use actions that use resources"; public string ConfigWindow_Auto_OnlyHealSelfWhenNoHealer { get; set; } = "Only Heal self When Not a healer"; + public string ConfigWindow_Auto_UseLostActions { get; set; } = "Use Lost Actions (Bozja)"; + public string ConfigWindow_Auto_UseLostFlareStarOnBosses { get; set; } = "Use Lost Flare Star on bosses"; + public string ConfigWindow_Auto_UseLostFlareStarOnMobs { get; set; } = "Use Lost Flare Star on mobs"; + public string ConfigWindow_Auto_UseLostAssassinationOnMobs { get; set; } = "Use Lost Assassination to kill non-boss targets"; + public string ConfigWindow_Auto_LostReflectAutoRefresh { get; set; } = "Automatically refresh Lost Reflect before it expires"; + public string ConfigWindow_Auto_LostAssassinationTimeToKill { get; set; } = "Expected TTK required to use Lost Assassination on target"; public string ConfigWindow_Auto_HealthForAutoDefense { get; set; } = "HP Ratio about defense single of Tanks"; public string ConfigWindow_Basic_SayHelloToUsers { get; set; } = "Say hello to the users of Rotation Solver."; @@ -838,4 +844,4 @@ internal class Strings public string ConfigWindow_Condition_DutyName { get; set; } = "Duty Name"; public string ConfigWindow_Condition_TargetWarning { get; set; } = "You'd better not use it. Because this target isn't the action's target. Try to pick it from action."; -} \ No newline at end of file +} From 2119a770db056320b97ac0204099faaaed5336f0 Mon Sep 17 00:00:00 2001 From: xan <149614526+xanunderscore@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:44:54 -0500 Subject: [PATCH 3/5] move conditional --- RotationSolver.Basic/Rotations/CustomRotation_Actions.cs | 5 ++--- RotationSolver.Basic/Rotations/CustomRotation_GCD.cs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs index dbf7fdb82..64fb4ef3d 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs @@ -592,9 +592,8 @@ or Job.RDM /// public static IBaseAction LostReflect { get; } = new BaseAction(ActionID.LostReflect, ActionOption.DutyAction | ActionOption.Friendly) { ChoiceTarget = (tars, mustUse) => tars.FirstOrDefault(b => - Service.Config.GetValue(PluginConfigBool.LostReflectAutoRefresh) && - b.HasStatus(true, StatusID.LostReflect) && - b.WillStatusEndGCD(1, 0, true, StatusID.LostReflect)) + b.HasStatus(true, StatusID.LostReflect) && + b.WillStatusEndGCD(1, 0, true, StatusID.LostReflect)) }; /// diff --git a/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs b/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs index 834732e77..83a5280f6 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs @@ -186,7 +186,7 @@ protected virtual bool EmergencyGCD(out IAction act) if (LostFlarestar.CanUse(out act)) return true; if (LostRampage.CanUse(out act)) return true; if (LostBurst.CanUse(out act)) return true; - if (LostReflect.CanUse(out act)) return true; + if (Service.Config.GetValue(PluginConfigBool.LostReflectAutoRefresh) && LostReflect.CanUse(out act)) return true; if (LostBravery.CanUse(out act)) return true; if (LostBubble.CanUse(out act)) return true; if (LostShell2.CanUse(out act)) return true; From 257eaadd6d71a14586901f843d76320f47460dbf Mon Sep 17 00:00:00 2001 From: xan <149614526+xanunderscore@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:51:24 -0500 Subject: [PATCH 4/5] remove flare star boss option as it is redundant --- RotationSolver.Basic/Configuration/Configs.cs | 1 - RotationSolver.Basic/Rotations/CustomRotation_Actions.cs | 4 +--- RotationSolver/Localization/ConfigTranslation.cs | 1 - RotationSolver/Localization/Strings.cs | 3 +-- RotationSolver/UI/RotationConfigWindow_Config.cs | 1 - 5 files changed, 2 insertions(+), 8 deletions(-) diff --git a/RotationSolver.Basic/Configuration/Configs.cs b/RotationSolver.Basic/Configuration/Configs.cs index 34a62b062..c227f0e5c 100644 --- a/RotationSolver.Basic/Configuration/Configs.cs +++ b/RotationSolver.Basic/Configuration/Configs.cs @@ -358,7 +358,6 @@ public enum PluginConfigBool : byte [Default(false)] ShowCooldownWindow, [Default(true)] UseLostActions, - [Default(true)] UseLostFlareStarOnBosses, [Default(false)] UseLostFlareStarOnMobs, [Default(true)] UseLostAssassinationOnMobs, [Default(true)] LostReflectAutoRefresh, diff --git a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs index 64fb4ef3d..2099dff2a 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs @@ -580,9 +580,7 @@ or Job.RDM public static IBaseAction LostFlarestar { get; } = new BaseAction(ActionID.LostFlarestar, ActionOption.DutyAction) { - FilterForHostiles = (tars) => tars.Where(t => - Service.Config.GetValue(PluginConfigBool.UseLostFlareStarOnMobs) || - (t.IsBossFromIcon() && Service.Config.GetValue(PluginConfigBool.UseLostFlareStarOnBosses))), + FilterForHostiles = (tars) => tars.Where(t => t.IsBossFromIcon() || Service.Config.GetValue(PluginConfigBool.UseLostFlareStarOnMobs)), TargetStatus = new StatusID[] { StatusID.LostFlarestar }, // TargetStatusIsGlobal = true, }; diff --git a/RotationSolver/Localization/ConfigTranslation.cs b/RotationSolver/Localization/ConfigTranslation.cs index 8f43f190b..910f08fbf 100644 --- a/RotationSolver/Localization/ConfigTranslation.cs +++ b/RotationSolver/Localization/ConfigTranslation.cs @@ -119,7 +119,6 @@ internal static class ConfigTranslation PluginConfigBool.UseResourcesAction => LocalizationManager.RightLang.ConfigWindow_Auto_UseResourcesAction, PluginConfigBool.OnlyHealSelfWhenNoHealer => LocalizationManager.RightLang.ConfigWindow_Auto_OnlyHealSelfWhenNoHealer, PluginConfigBool.UseLostActions => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostActions, - PluginConfigBool.UseLostFlareStarOnBosses => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostFlareStarOnBosses, PluginConfigBool.UseLostFlareStarOnMobs => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostFlareStarOnMobs, PluginConfigBool.UseLostAssassinationOnMobs => LocalizationManager.RightLang.ConfigWindow_Auto_UseLostAssassinationOnMobs, PluginConfigBool.LostReflectAutoRefresh => LocalizationManager.RightLang.ConfigWindow_Auto_LostReflectAutoRefresh, diff --git a/RotationSolver/Localization/Strings.cs b/RotationSolver/Localization/Strings.cs index 00fa5569a..5adb05034 100644 --- a/RotationSolver/Localization/Strings.cs +++ b/RotationSolver/Localization/Strings.cs @@ -793,8 +793,7 @@ internal class Strings public string ConfigWindow_Auto_UseResourcesAction { get; set; } = "Use actions that use resources"; public string ConfigWindow_Auto_OnlyHealSelfWhenNoHealer { get; set; } = "Only Heal self When Not a healer"; public string ConfigWindow_Auto_UseLostActions { get; set; } = "Use Lost Actions (Bozja)"; - public string ConfigWindow_Auto_UseLostFlareStarOnBosses { get; set; } = "Use Lost Flare Star on bosses"; - public string ConfigWindow_Auto_UseLostFlareStarOnMobs { get; set; } = "Use Lost Flare Star on mobs"; + public string ConfigWindow_Auto_UseLostFlareStarOnMobs { get; set; } = "Use Lost Flare Star on non-boss targets"; public string ConfigWindow_Auto_UseLostAssassinationOnMobs { get; set; } = "Use Lost Assassination to kill non-boss targets"; public string ConfigWindow_Auto_LostReflectAutoRefresh { get; set; } = "Automatically refresh Lost Reflect before it expires"; public string ConfigWindow_Auto_LostAssassinationTimeToKill { get; set; } = "Expected TTK required to use Lost Assassination on target"; diff --git a/RotationSolver/UI/RotationConfigWindow_Config.cs b/RotationSolver/UI/RotationConfigWindow_Config.cs index b03be2607..ed2369c2d 100644 --- a/RotationSolver/UI/RotationConfigWindow_Config.cs +++ b/RotationSolver/UI/RotationConfigWindow_Config.cs @@ -836,7 +836,6 @@ private static void DrawAutoActionCondition() }), new CheckBoxSearchPlugin(PluginConfigBool.UseLostActions, new ISearchable[] { - new CheckBoxSearchPlugin(PluginConfigBool.UseLostFlareStarOnBosses), new CheckBoxSearchPlugin(PluginConfigBool.UseLostFlareStarOnMobs), new CheckBoxSearchPlugin(PluginConfigBool.UseLostAssassinationOnMobs, new DragFloatSearchPlugin(PluginConfigFloat.LostAssassinationTimeToKill, 0.5f)), From d8894ab7ecbbc76ce37c9c372e7c87dc115818f8 Mon Sep 17 00:00:00 2001 From: xan <149614526+xanunderscore@users.noreply.github.com> Date: Mon, 25 Dec 2023 13:16:05 -0500 Subject: [PATCH 5/5] setting dot flag fixes target check --- RotationSolver.Basic/Rotations/CustomRotation_Actions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs index 2099dff2a..4eb45fe72 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs @@ -448,7 +448,7 @@ or Job.RDM public static IBaseAction LostRampage { get; } = new RoleAction( ActionID.LostRampage, new JobRole[] { JobRole.Melee, JobRole.Tank, JobRole.RangedPhysical }, - ActionOption.DutyAction + ActionOption.DutyAction | ActionOption.Eot ) { TargetStatus = new StatusID[] { StatusID.LostRampage }, // TargetStatusIsGlobal = true, @@ -463,7 +463,7 @@ or Job.RDM public static IBaseAction LostBurst { get; } = new RoleAction( ActionID.LostBurst, new JobRole[] { JobRole.Healer, JobRole.RangedMagical }, - ActionOption.DutyAction + ActionOption.DutyAction | ActionOption.Eot ) { TargetStatus = new StatusID[] { StatusID.LostBurst }, // TargetStatusIsGlobal = true, @@ -578,7 +578,7 @@ or Job.RDM /// /// public static IBaseAction LostFlarestar { get; } = new BaseAction(ActionID.LostFlarestar, - ActionOption.DutyAction) + ActionOption.DutyAction | ActionOption.Dot) { FilterForHostiles = (tars) => tars.Where(t => t.IsBossFromIcon() || Service.Config.GetValue(PluginConfigBool.UseLostFlareStarOnMobs)), TargetStatus = new StatusID[] { StatusID.LostFlarestar },