From 86353061eccbf3ca23296ae0355983f8397b7c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <53346444+ArchiDog1998@users.noreply.github.com> Date: Sun, 25 Feb 2024 02:13:51 +0800 Subject: [PATCH] fix: add lb things. --- Resources/RotationSolverRecord.json | 2 +- .../Actions/ActionBasicInfo.cs | 2 + RotationSolver.Basic/Actions/BaseAction.cs | 2 + .../Rotations/CustomRotation_Actions.cs | 1 + .../Rotations/CustomRotation_GCD.cs | 8 +- .../Getters/RotationGetter.cs | 35 +- .../Properties/Resources.resx | 849 ++++++++++++++++++ RotationSolver/Commands/RSCommands_Actions.cs | 4 +- RotationSolver/Localization/Localization.json | 3 +- 9 files changed, 896 insertions(+), 10 deletions(-) diff --git a/Resources/RotationSolverRecord.json b/Resources/RotationSolverRecord.json index 23514e8b5..2992a46cb 100644 --- a/Resources/RotationSolverRecord.json +++ b/Resources/RotationSolverRecord.json @@ -1,5 +1,5 @@ { - "ClickingCount": 76809, + "ClickingCount": 77120, "SayingHelloCount": 66, "SaidUsers": [] } \ No newline at end of file diff --git a/RotationSolver.Basic/Actions/ActionBasicInfo.cs b/RotationSolver.Basic/Actions/ActionBasicInfo.cs index dda035000..4ef37d51b 100644 --- a/RotationSolver.Basic/Actions/ActionBasicInfo.cs +++ b/RotationSolver.Basic/Actions/ActionBasicInfo.cs @@ -85,6 +85,8 @@ internal readonly bool BasicCheck(bool skipStatusProvideCheck, bool skipCombo, b { if (!_action.Config.IsEnabled || !IsOnSlot) return false; + if (IsLimitBreak) return true; + //Disabled. if (DataCenter.DisabledActionSequencer?.Contains(ID) ?? false) return false; diff --git a/RotationSolver.Basic/Actions/BaseAction.cs b/RotationSolver.Basic/Actions/BaseAction.cs index f92190197..60629faf1 100644 --- a/RotationSolver.Basic/Actions/BaseAction.cs +++ b/RotationSolver.Basic/Actions/BaseAction.cs @@ -95,8 +95,10 @@ public bool CanUse(out IAction act, bool skipStatusProvideCheck = false, bool sk } if (!Info.BasicCheck(skipStatusProvideCheck, skipCombo, ignoreCastingCheck)) return false; + if (!Cooldown.CooldownCheck(isEmpty, onLastAbility, ignoreClippingCheck, gcdCountForAbility)) return false; + if (Setting.IsMeleeRange && IActionHelper.IsLastAction(IActionHelper.MovingActions)) return false; //No range actions after moving. if (Setting.IsFriendly && DataCenter.AverageTimeToKill < Config.TimeToKill) return false; diff --git a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs index d90df5231..ad7132cf6 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_Actions.cs @@ -130,6 +130,7 @@ static partial void ModifySprintPvP(ref ActionSetting setting) private protected virtual IBaseAction? LimitBreak1 => null; private protected virtual IBaseAction? LimitBreak2 => null; private protected virtual IBaseAction? LimitBreak3 => null; + private protected virtual IBaseAction? LimitBreakPvP => null; public virtual IAction[] AllActions => [ diff --git a/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs b/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs index aee1de0b1..b6257690d 100644 --- a/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs +++ b/RotationSolver.Basic/Rotations/CustomRotation_GCD.cs @@ -1,4 +1,6 @@ -namespace RotationSolver.Basic.Rotations; +using ECommons.DalamudServices; + +namespace RotationSolver.Basic.Rotations; partial class CustomRotation { @@ -121,7 +123,9 @@ private bool UseLimitBreak(out IAction? act) return LimitBreakLevel switch { - 1 => LimitBreak1?.CanUse(out act, skipAoeCheck: true) ?? false, + 1 => ((DataCenter.Territory?.IsPvpZone ?? false) + ? LimitBreakPvP?.CanUse(out act, skipAoeCheck: true) + : LimitBreak1?.CanUse(out act, skipAoeCheck: true)) ?? false, 2 => LimitBreak2?.CanUse(out act, skipAoeCheck: true) ?? false, 3 => LimitBreak3?.CanUse(out act, skipAoeCheck: true) ?? false, _ => false, diff --git a/RotationSolver.GameData/Getters/RotationGetter.cs b/RotationSolver.GameData/Getters/RotationGetter.cs index 9e388b5b2..50784cc57 100644 --- a/RotationSolver.GameData/Getters/RotationGetter.cs +++ b/RotationSolver.GameData/Getters/RotationGetter.cs @@ -1,5 +1,7 @@ -using Lumina.Excel.GeneratedSheets; +using Lumina.Data; +using Lumina.Excel.GeneratedSheets; using RotationSolver.GameData.Getters.Actions; +using System.Xml.Linq; namespace RotationSolver.GameData.Getters; @@ -48,10 +50,13 @@ public abstract partial class {{GetName()}} : CustomRotation {{GetLBInRotation(job.LimitBreak1.Value, 1)}} {{GetLBInRotation(job.LimitBreak2.Value, 2)}} {{GetLBInRotation(job.LimitBreak3.Value, 3)}} + {{GetLBInRotationPvP(gameData.GetExcelSheet()?.FirstOrDefault(i => i.ActionCategory.Row is 15 + && ((bool?)i.ClassJobCategory.Value?.GetType().GetRuntimeProperty(job.Abbreviation)?.GetValue(i.ClassJobCategory.Value) ?? false)))}} #endregion #region Traits + {{traitsCode.Table()}} {{Util.ArrayNames("AllTraits", "IBaseTrait", @@ -66,7 +71,7 @@ private string GetLBInRotation(Lumina.Excel.GeneratedSheets.Action? action, int if (action == null) return string.Empty; if (action.RowId == 0) return string.Empty; - var code = GetLB(action, out var name); + var code = GetLBPvE(action, out var name); return code + "\n" + $""" /// @@ -76,14 +81,36 @@ private string GetLBInRotation(Lumina.Excel.GeneratedSheets.Action? action, int private sealed protected override IBaseAction LimitBreak{index} => {name}; """; } - - private string GetLB(Lumina.Excel.GeneratedSheets.Action action, out string name) + private string GetLBPvE(Lumina.Excel.GeneratedSheets.Action action, out string name) { name = action.Name.RawString.ToPascalCase() + $"PvE"; var descName = action.GetDescName(); return action.ToCode(name, descName, GetDesc(action), false); } + private string GetLBInRotationPvP(Lumina.Excel.GeneratedSheets.Action? action) + { + if (action == null) return string.Empty; + if (action.RowId == 0) return string.Empty; + + var code = GetLBPvP(action, out var name); + + return code + "\n" + $""" + /// + /// {action.GetDescName()} + /// {GetDesc(action)} + /// + private sealed protected override IBaseAction LimitBreakPvP => {name}; + """; + } + + private string GetLBPvP(Lumina.Excel.GeneratedSheets.Action action, out string name) + { + name = action.Name.RawString.ToPascalCase() + $"PvP"; + var descName = action.GetDescName(); + + return action.ToCode(name, descName, GetDesc(action), false); + } private string GetDesc(Lumina.Excel.GeneratedSheets.Action item) { diff --git a/RotationSolver.SourceGenerators/Properties/Resources.resx b/RotationSolver.SourceGenerators/Properties/Resources.resx index a537e5407..b67af275e 100644 --- a/RotationSolver.SourceGenerators/Properties/Resources.resx +++ b/RotationSolver.SourceGenerators/Properties/Resources.resx @@ -42016,10 +42016,59 @@ private IBaseAction LastBastionPvE => _LastBastionPvECreator.Value; /// <para>Duration: 12s</para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => LastBastionPvE; +private readonly Lazy<IBaseAction> _PhalanxPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29069, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyPhalanxPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29069"><strong>Phalanx</strong></see> <i>PvP</i> (PLD) [29069] [Limit Break] +/// </summary> +static partial void ModifyPhalanxPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29069"><strong>Phalanx</strong></see> <i>PvP</i> (PLD) [29069] [Limit Break] +/// <para>Grants the effect of Hallowed Ground to self and Phalanx to nearby party members.</para> +/// <para>Hallowed Ground Effect: Renders you impervious to most attacks</para> +/// <para>Duration: 10s</para> +/// <para>Phalanx Effect: Reduces damage taken by 33%</para> +/// <para>Duration: 10s</para> +/// <para>Additional Effect: Grants Blade of Faith Ready</para> +/// <para>Duration: 10s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// <para></para> +/// <para>※Action changes to Blade of Faith upon execution.</para> +/// </summary> + +private IBaseAction PhalanxPvP => _PhalanxPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29069"><strong>Phalanx</strong></see> <i>PvP</i> (PLD) [29069] [Limit Break] +/// <para>Grants the effect of Hallowed Ground to self and Phalanx to nearby party members.</para> +/// <para>Hallowed Ground Effect: Renders you impervious to most attacks</para> +/// <para>Duration: 10s</para> +/// <para>Phalanx Effect: Reduces damage taken by 33%</para> +/// <para>Duration: 10s</para> +/// <para>Additional Effect: Grants Blade of Faith Ready</para> +/// <para>Duration: 10s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// <para></para> +/// <para>※Action changes to Blade of Faith upon execution.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => PhalanxPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50207"><strong>Divine Magic Mastery</strong></see> (PLD) [207] /// <para>Halves MP cost for all spells while preventing casting interruptions via damage taken. Grants the following effects after successfully completing a combo with Royal Authority:</para> @@ -43449,10 +43498,55 @@ private IBaseAction FinalHeavenPvE => _FinalHeavenPvECreator.Value; /// <para>Delivers an attack with a potency of 9,000.</para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => FinalHeavenPvE; +private readonly Lazy<IBaseAction> _MeteodrivePvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29485, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyMeteodrivePvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29485"><strong>Meteodrive</strong></see> <i>PvP</i> (MNK) [29485] [Limit Break] +/// </summary> +static partial void ModifyMeteodrivePvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29485"><strong>Meteodrive</strong></see> <i>PvP</i> (MNK) [29485] [Limit Break] +/// <para>Rushes target and delivers an attack with a potency of 12,000.</para> +/// <para>Additional Effect: Removes target's Guard</para> +/// <para>Additional Effect: Afflicts target with Meteodrive, rendering them unable to move</para> +/// <para>Duration: 3s</para> +/// <para>If target does not have an active Guard effect, deals additional damage with a potency of 12,000.</para> +/// <para>Effect cannot be applied to players riding machina or non-player combatants.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 75s</para> +/// <para>Cannot be executed while bound.</para> +/// </summary> + +private IBaseAction MeteodrivePvP => _MeteodrivePvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29485"><strong>Meteodrive</strong></see> <i>PvP</i> (MNK) [29485] [Limit Break] +/// <para>Rushes target and delivers an attack with a potency of 12,000.</para> +/// <para>Additional Effect: Removes target's Guard</para> +/// <para>Additional Effect: Afflicts target with Meteodrive, rendering them unable to move</para> +/// <para>Duration: 3s</para> +/// <para>If target does not have an active Guard effect, deals additional damage with a potency of 12,000.</para> +/// <para>Effect cannot be applied to players riding machina or non-player combatants.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 75s</para> +/// <para>Cannot be executed while bound.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => MeteodrivePvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50160"><strong>Deep Meditation</strong></see> (MNK) [160] /// <para>Grants an 80% chance that a chakra will open upon dealing critical damage with a weaponskill.</para> @@ -44711,10 +44805,61 @@ private IBaseAction LandWakerPvE => _LandWakerPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => LandWakerPvE; +private readonly Lazy<IBaseAction> _PrimalScreamPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29083, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyPrimalScreamPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29083"><strong>Primal Scream</strong></see> <i>PvP</i> (WAR) [29083] [Limit Break] +/// </summary> +static partial void ModifyPrimalScreamPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29083"><strong>Primal Scream</strong></see> <i>PvP</i> (WAR) [29083] [Limit Break] +/// <para>Let out a bloodcurdling cry in a cone before you, rendering enemies unable to use Guard.</para> +/// <para>Duration: 15s</para> +/// <para>Additional Effect: Grants Inner Release and Thrill of Battle</para> +/// <para>Inner Release Effect: Increases the potency of Primal Rend and Chaotic Cyclone, while also increasing movement speed by 25%, and granting immunity to Stun, Heavy, Bind, Silence, Half-asleep, Sleep, Deep Freeze, and knockback and draw-in effects</para> +/// <para>Duration: 15s</para> +/// <para>Cannot execute Guard while under the effect of Inner Release.</para> +/// <para>Thrill of Battle Effect: Increases maximum HP by 20% and restores the amount increased</para> +/// <para>Duration: 30s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Storm's Path Combo changes to Fell Cleave while under the effect of Inner Release.</para> +/// </summary> + +private IBaseAction PrimalScreamPvP => _PrimalScreamPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29083"><strong>Primal Scream</strong></see> <i>PvP</i> (WAR) [29083] [Limit Break] +/// <para>Let out a bloodcurdling cry in a cone before you, rendering enemies unable to use Guard.</para> +/// <para>Duration: 15s</para> +/// <para>Additional Effect: Grants Inner Release and Thrill of Battle</para> +/// <para>Inner Release Effect: Increases the potency of Primal Rend and Chaotic Cyclone, while also increasing movement speed by 25%, and granting immunity to Stun, Heavy, Bind, Silence, Half-asleep, Sleep, Deep Freeze, and knockback and draw-in effects</para> +/// <para>Duration: 15s</para> +/// <para>Cannot execute Guard while under the effect of Inner Release.</para> +/// <para>Thrill of Battle Effect: Increases maximum HP by 20% and restores the amount increased</para> +/// <para>Duration: 30s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Storm's Path Combo changes to Fell Cleave while under the effect of Inner Release.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => PrimalScreamPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50157"><strong>Enhanced Infuriate</strong></see> (WAR) [157] /// <para>Reduces Infuriate recast time by 5 seconds upon landing Inner Beast, Steel Cyclone, Fell Cleave, or Decimate on most targets.</para> @@ -45963,10 +46108,53 @@ private IBaseAction DragonsongDivePvE => _DragonsongDivePvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => DragonsongDivePvE; +private readonly Lazy<IBaseAction> _SkyHighPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29497, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifySkyHighPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29497"><strong>Sky High</strong></see> <i>PvP</i> (DRG) [29497] [Limit Break] +/// </summary> +static partial void ModifySkyHighPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29497"><strong>Sky High</strong></see> <i>PvP</i> (DRG) [29497] [Limit Break] +/// <para>Jump high into the air, preventing enemies from targeting you. Movement is still possible before landing.</para> +/// <para>Duration: 5s</para> +/// <para>Additional Effect: Removes Heavy, Bind, and Half-asleep</para> +/// <para>Executes Sky Shatter automatically when effect duration expires.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Action changes to Sky Shatter upon execution.</para> +/// </summary> + +private IBaseAction SkyHighPvP => _SkyHighPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29497"><strong>Sky High</strong></see> <i>PvP</i> (DRG) [29497] [Limit Break] +/// <para>Jump high into the air, preventing enemies from targeting you. Movement is still possible before landing.</para> +/// <para>Duration: 5s</para> +/// <para>Additional Effect: Removes Heavy, Bind, and Half-asleep</para> +/// <para>Executes Sky Shatter automatically when effect duration expires.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Action changes to Sky Shatter upon execution.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => SkyHighPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50162"><strong>Lance Mastery</strong></see> (DRG) [162] /// <para>Allows for immediate execution of Wheeling Thrust after landing Fang and Claw, or Fang and Claw after landing Wheeling Thrust, increasing potency by 100.</para> @@ -47201,10 +47389,49 @@ private IBaseAction SagittariusArrowPvE => _SagittariusArrowPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => SagittariusArrowPvE; +private readonly Lazy<IBaseAction> _FinalFantasiaPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29401, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyFinalFantasiaPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29401"><strong>Final Fantasia</strong></see> <i>PvP</i> (BRD) [29401] [Limit Break] +/// </summary> +static partial void ModifyFinalFantasiaPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29401"><strong>Final Fantasia</strong></see> <i>PvP</i> (BRD) [29401] [Limit Break] +/// <para>Reduces your weaponskill cast time and recast time by 10% while also increasing movement speed by 25%.</para> +/// <para>Additional Effect: Increases damage dealt by self and all party members within a radius of 30 yalms by 10% while also gradually filling the limit gauge</para> +/// <para>Duration: 30s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// <para>Can only be executed while in combat.</para> +/// </summary> + +private IBaseAction FinalFantasiaPvP => _FinalFantasiaPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29401"><strong>Final Fantasia</strong></see> <i>PvP</i> (BRD) [29401] [Limit Break] +/// <para>Reduces your weaponskill cast time and recast time by 10% while also increasing movement speed by 25%.</para> +/// <para>Additional Effect: Increases damage dealt by self and all party members within a radius of 30 yalms by 10% while also gradually filling the limit gauge</para> +/// <para>Duration: 30s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// <para>Can only be executed while in combat.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => FinalFantasiaPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50017"><strong>Heavier Shot</strong></see> (ARC BRD) [17] /// <para>Adds to Heavy Shot a 20% chance that you will become Straight Shot Ready.</para> @@ -48421,10 +48648,55 @@ private IBaseAction PulseOfLifePvE => _PulseOfLifePvECreator.Value; /// <para>Restores 100% of own HP and the HP of all nearby party members, including ones KO'd.</para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => PulseOfLifePvE; +private readonly Lazy<IBaseAction> _AfflatusPurgationPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29230, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyAfflatusPurgationPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29230"><strong>Afflatus Purgation</strong></see> <i>PvP</i> (WHM) [29230] [Limit Break] +/// </summary> +static partial void ModifyAfflatusPurgationPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29230"><strong>Afflatus Purgation</strong></see> <i>PvP</i> (WHM) [29230] [Limit Break] +/// <para>Deals unaspected damage with a potency of 18,000 to all enemies in a straight line before you.</para> +/// <para>Additional Effect: Stun</para> +/// <para>Duration: 2s</para> +/// <para>Additional Effect: Grants Temperance</para> +/// <para>Temperance Effect: Increases damage dealt and healing potency by 10%, and grants Regen to self and nearby party members within 30 yalms</para> +/// <para>Cure Potency: 3,000</para> +/// <para>Duration: 15s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 60s</para> +/// </summary> + +private IBaseAction AfflatusPurgationPvP => _AfflatusPurgationPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29230"><strong>Afflatus Purgation</strong></see> <i>PvP</i> (WHM) [29230] [Limit Break] +/// <para>Deals unaspected damage with a potency of 18,000 to all enemies in a straight line before you.</para> +/// <para>Additional Effect: Stun</para> +/// <para>Duration: 2s</para> +/// <para>Additional Effect: Grants Temperance</para> +/// <para>Temperance Effect: Increases damage dealt and healing potency by 10%, and grants Regen to self and nearby party members within 30 yalms</para> +/// <para>Cure Potency: 3,000</para> +/// <para>Duration: 15s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 60s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => AfflatusPurgationPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50023"><strong>Maim and Mend</strong></see> (CNJ WHM) [23] /// <para>Increases base action damage and HP restoration by 10%.</para> @@ -49849,10 +50121,57 @@ private IBaseAction MeteorPvE => _MeteorPvECreator.Value; /// <para>Deals unaspected damage with a potency of 6,150 to all enemies near point of impact.</para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => MeteorPvE; +private readonly Lazy<IBaseAction> _SoulResonancePvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29662, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifySoulResonancePvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29662"><strong>Soul Resonance</strong></see> <i>PvP</i> (BLM) [29662] [Limit Break] +/// </summary> +static partial void ModifySoulResonancePvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29662"><strong>Soul Resonance</strong></see> <i>PvP</i> (BLM) [29662] [Limit Break] +/// <para>Grants 6 stacks of Soul Resonance, upgrading Fire to Flare and Blizzard to Freeze.</para> +/// <para>Duration: 30s</para> +/// <para>Additional Effect: Grants Polyglot and Apocatastasis</para> +/// <para>Polyglot Effect: Action changes to Foul</para> +/// <para>Duration: 60s</para> +/// <para>Apocatastasis Effect: Reduces damage taken by 10%</para> +/// <para>Duration: 15s</para> +/// <para>Additional Effect: Reduces the recast time of Superflare by 15 seconds</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 60s</para> +/// </summary> + +private IBaseAction SoulResonancePvP => _SoulResonancePvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29662"><strong>Soul Resonance</strong></see> <i>PvP</i> (BLM) [29662] [Limit Break] +/// <para>Grants 6 stacks of Soul Resonance, upgrading Fire to Flare and Blizzard to Freeze.</para> +/// <para>Duration: 30s</para> +/// <para>Additional Effect: Grants Polyglot and Apocatastasis</para> +/// <para>Polyglot Effect: Action changes to Foul</para> +/// <para>Duration: 60s</para> +/// <para>Apocatastasis Effect: Reduces damage taken by 10%</para> +/// <para>Duration: 15s</para> +/// <para>Additional Effect: Reduces the recast time of Superflare by 15 seconds</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 60s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => SoulResonancePvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50029"><strong>Maim and Mend</strong></see> (THM BLM) [29] /// <para>Increases base action damage and HP restoration by 10%.</para> @@ -52399,10 +52718,53 @@ private IBaseAction TeraflarePvE => _TeraflarePvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => TeraflarePvE; +private readonly Lazy<IBaseAction> _SummonBahamutPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29673, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifySummonBahamutPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29673"><strong>Summon Bahamut</strong></see> <i>PvP</i> (SMN) [29673] [Limit Break] +/// </summary> +static partial void ModifySummonBahamutPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29673"><strong>Summon Bahamut</strong></see> <i>PvP</i> (SMN) [29673] [Limit Break] +/// <para>Enters Dreadwyrm Trance and summons Demi-Bahamut to fight at a designated location.</para> +/// <para>Duration: 20s</para> +/// <para>Demi-Bahamut will execute Megaflare upon being summoned, then execute Wyrmwave automatically, prioritizing targets with the lowest HP within 30 yalms.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Action changes to Enkindle Bahamut upon execution.</para> +/// <para>※Ruin III changes to Astral Impulse while under the effect of Dreadwyrm Trance.</para> +/// </summary> + +private IBaseAction SummonBahamutPvP => _SummonBahamutPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29673"><strong>Summon Bahamut</strong></see> <i>PvP</i> (SMN) [29673] [Limit Break] +/// <para>Enters Dreadwyrm Trance and summons Demi-Bahamut to fight at a designated location.</para> +/// <para>Duration: 20s</para> +/// <para>Demi-Bahamut will execute Megaflare upon being summoned, then execute Wyrmwave automatically, prioritizing targets with the lowest HP within 30 yalms.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Action changes to Enkindle Bahamut upon execution.</para> +/// <para>※Ruin III changes to Astral Impulse while under the effect of Dreadwyrm Trance.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => SummonBahamutPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50066"><strong>Maim and Mend</strong></see> (ACN SMN SCH) [66] /// <para>Increases base action damage and HP restoration by 10%. Also increases base damage and HP restoration of your pet by 10%.</para> @@ -54062,10 +54424,57 @@ private IBaseAction AngelFeathersPvE => _AngelFeathersPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => AngelFeathersPvE; +private readonly Lazy<IBaseAction> _SummonSeraphPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29237, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifySummonSeraphPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29237"><strong>Summon Seraph</strong></see> <i>PvP</i> (SCH) [29237] [Limit Break] +/// </summary> +static partial void ModifySummonSeraphPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29237"><strong>Summon Seraph</strong></see> <i>PvP</i> (SCH) [29237] [Limit Break] +/// <para>Summons Seraph to fight at a designated location.</para> +/// <para>Seraph will execute Seraph Flight immediately after being summoned.</para> +/// <para>Automatically casts Seraphic Veil on party members who suffer damage.</para> +/// <para>Additional Effect: Grants Recitation</para> +/// <para>Recitation Effect: Increases the potency of Galvanize, Biolysis, and Biolytic effects</para> +/// <para>Duration: 15s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Action changes to Consolation upon execution.</para> +/// </summary> + +private IBaseAction SummonSeraphPvP => _SummonSeraphPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29237"><strong>Summon Seraph</strong></see> <i>PvP</i> (SCH) [29237] [Limit Break] +/// <para>Summons Seraph to fight at a designated location.</para> +/// <para>Seraph will execute Seraph Flight immediately after being summoned.</para> +/// <para>Automatically casts Seraphic Veil on party members who suffer damage.</para> +/// <para>Additional Effect: Grants Recitation</para> +/// <para>Recitation Effect: Increases the potency of Galvanize, Biolysis, and Biolytic effects</para> +/// <para>Duration: 15s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// <para></para> +/// <para>※Action changes to Consolation upon execution.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => SummonSeraphPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50066"><strong>Maim and Mend</strong></see> (ACN SMN SCH) [66] /// <para>Increases base action damage and HP restoration by 10%. Also increases base damage and HP restoration of your pet by 10%.</para> @@ -56063,10 +56472,57 @@ private IBaseAction ChimatsuriPvE => _ChimatsuriPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => ChimatsuriPvE; +private readonly Lazy<IBaseAction> _SeitonTenchuPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29515, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifySeitonTenchuPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29515"><strong>Seiton Tenchu</strong></see> <i>PvP</i> (NIN) [29515] [Limit Break] +/// </summary> +static partial void ModifySeitonTenchuPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29515"><strong>Seiton Tenchu</strong></see> <i>PvP</i> (NIN) [29515] [Limit Break] +/// <para>Rushes target and delivers an attack with a potency of 12,000, incapacitating foes whose HP is below 50%.</para> +/// <para>Additional Effect: Afflicts target with Death Link</para> +/// <para>Duration: 4s</para> +/// <para>Defeating an enemy with this action, or one under the effect of Death Link, will grant Unsealed Seiton Tenchu, allowing a second execution of this action.</para> +/// <para>Duration: 8s</para> +/// <para>Effect duration is reduced by 1s each time it is applied to a target with a minimum duration of 4s.</para> +/// <para>Effect cannot be applied to players riding machina or non-player combatants.</para> +/// <para>Can only be executed when the limit gauge is full or while under the effect of Unsealed Seiton Tenchu.</para> +/// <para>Gauge Charge Time: 105s</para> +/// <para>Cannot be executed while bound.</para> +/// </summary> + +private IBaseAction SeitonTenchuPvP => _SeitonTenchuPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29515"><strong>Seiton Tenchu</strong></see> <i>PvP</i> (NIN) [29515] [Limit Break] +/// <para>Rushes target and delivers an attack with a potency of 12,000, incapacitating foes whose HP is below 50%.</para> +/// <para>Additional Effect: Afflicts target with Death Link</para> +/// <para>Duration: 4s</para> +/// <para>Defeating an enemy with this action, or one under the effect of Death Link, will grant Unsealed Seiton Tenchu, allowing a second execution of this action.</para> +/// <para>Duration: 8s</para> +/// <para>Effect duration is reduced by 1s each time it is applied to a target with a minimum duration of 4s.</para> +/// <para>Effect cannot be applied to players riding machina or non-player combatants.</para> +/// <para>Can only be executed when the limit gauge is full or while under the effect of Unsealed Seiton Tenchu.</para> +/// <para>Gauge Charge Time: 105s</para> +/// <para>Cannot be executed while bound.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => SeitonTenchuPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50090"><strong>All Fours</strong></see> (ROG NIN) [90] /// <para>Reduces damage taken when falling.</para> @@ -57462,10 +57918,43 @@ private IBaseAction SatelliteBeamPvE => _SatelliteBeamPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => SatelliteBeamPvE; +private readonly Lazy<IBaseAction> _MarksmansSpitePvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29415, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyMarksmansSpitePvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29415"><strong>Marksman's Spite</strong></see> <i>PvP</i> (MCH) [29415] [Limit Break] +/// </summary> +static partial void ModifyMarksmansSpitePvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29415"><strong>Marksman's Spite</strong></see> <i>PvP</i> (MCH) [29415] [Limit Break] +/// <para>Delivers a ranged attack with a potency of 36,000.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// </summary> + +private IBaseAction MarksmansSpitePvP => _MarksmansSpitePvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29415"><strong>Marksman's Spite</strong></see> <i>PvP</i> (MCH) [29415] [Limit Break] +/// <para>Delivers a ranged attack with a potency of 36,000.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => MarksmansSpitePvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50117"><strong>Increased Action Damage</strong></see> (MCH) [117] /// <para>Increases base action damage and autoturret damage by 10%.</para> @@ -58693,10 +59182,61 @@ private IBaseAction DarkForcePvE => _DarkForcePvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => DarkForcePvE; +private readonly Lazy<IBaseAction> _EventidePvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29097, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyEventidePvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29097"><strong>Eventide</strong></see> <i>PvP</i> (DRK) [29097] [Limit Break] +/// </summary> +static partial void ModifyEventidePvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29097"><strong>Eventide</strong></see> <i>PvP</i> (DRK) [29097] [Limit Break] +/// <para>Delivers an attack with a potency of 6,000 to all enemies in a straight line before and behind you.</para> +/// <para>Potency increases up to 24,000 as HP nears maximum.</para> +/// <para>HP is reduced to 1 upon execution.</para> +/// <para>Additional Effect: Grants Undead Redemption</para> +/// <para>Undead Redemption Effect: Most attacks cannot reduce your HP to less than 1, and you absorb 100% of weaponskill damage dealt as HP</para> +/// <para>Duration: 10s</para> +/// <para>Additional Effect: Grants Blackblood</para> +/// <para>Duration: 10s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 105s</para> +/// <para></para> +/// <para>※Souleater Combo changes to Bloodspiller while under the effect of Blackblood.</para> +/// </summary> + +private IBaseAction EventidePvP => _EventidePvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29097"><strong>Eventide</strong></see> <i>PvP</i> (DRK) [29097] [Limit Break] +/// <para>Delivers an attack with a potency of 6,000 to all enemies in a straight line before and behind you.</para> +/// <para>Potency increases up to 24,000 as HP nears maximum.</para> +/// <para>HP is reduced to 1 upon execution.</para> +/// <para>Additional Effect: Grants Undead Redemption</para> +/// <para>Undead Redemption Effect: Most attacks cannot reduce your HP to less than 1, and you absorb 100% of weaponskill damage dealt as HP</para> +/// <para>Duration: 10s</para> +/// <para>Additional Effect: Grants Blackblood</para> +/// <para>Duration: 10s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 105s</para> +/// <para></para> +/// <para>※Souleater Combo changes to Bloodspiller while under the effect of Blackblood.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => EventidePvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50158"><strong>Blackblood</strong></see> (DRK) [158] /// <para>Allows for Blood Gauge accumulation upon the landing of certain actions.</para> @@ -60367,10 +60907,49 @@ private IBaseAction AstralStasisPvE => _AstralStasisPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => AstralStasisPvE; +private readonly Lazy<IBaseAction> _CelestialRiverPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29255, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyCelestialRiverPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29255"><strong>Celestial River</strong></see> <i>PvP</i> (AST) [29255] [Limit Break] +/// </summary> +static partial void ModifyCelestialRiverPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29255"><strong>Celestial River</strong></see> <i>PvP</i> (AST) [29255] [Limit Break] +/// <para>Reduces damage dealt by nearby enemies by 30%. Effect is reduced by 10% every 5 seconds.</para> +/// <para>Duration: 15s</para> +/// <para>Additional Effect: Increases damage dealt by self and nearby party members by 30%. Effect is reduced by 10% every 5s.</para> +/// <para>Duration: 15s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 105s</para> +/// </summary> + +private IBaseAction CelestialRiverPvP => _CelestialRiverPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29255"><strong>Celestial River</strong></see> <i>PvP</i> (AST) [29255] [Limit Break] +/// <para>Reduces damage dealt by nearby enemies by 30%. Effect is reduced by 10% every 5 seconds.</para> +/// <para>Duration: 15s</para> +/// <para>Additional Effect: Increases damage dealt by self and nearby party members by 30%. Effect is reduced by 10% every 5s.</para> +/// <para>Duration: 15s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 105s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => CelestialRiverPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50122"><strong>Maim and Mend</strong></see> (AST) [122] /// <para>Increases base action damage and HP restoration by 10%.</para> @@ -61839,10 +62418,51 @@ private IBaseAction DoomOfTheLivingPvE => _DoomOfTheLivingPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => DoomOfTheLivingPvE; +private readonly Lazy<IBaseAction> _ZantetsukenPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29537, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyZantetsukenPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29537"><strong>Zantetsuken</strong></see> <i>PvP</i> (SAM) [29537] [Limit Break] +/// </summary> +static partial void ModifyZantetsukenPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29537"><strong>Zantetsuken</strong></see> <i>PvP</i> (SAM) [29537] [Limit Break] +/// <para>Swiftly charges forward, dealing damage to target and all enemies nearby it with a potency of 24,000.</para> +/// <para>If target is afflicted with Kuzushi, deals damage equal to 100% of their maximum HP.</para> +/// <para>Ignores the effects of Guard when dealing damage.</para> +/// <para>The additional effect of Kuzushi cannot be applied to players riding machina and non-player combatants.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// <para>Cannot be executed while bound.</para> +/// </summary> + +private IBaseAction ZantetsukenPvP => _ZantetsukenPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29537"><strong>Zantetsuken</strong></see> <i>PvP</i> (SAM) [29537] [Limit Break] +/// <para>Swiftly charges forward, dealing damage to target and all enemies nearby it with a potency of 24,000.</para> +/// <para>If target is afflicted with Kuzushi, deals damage equal to 100% of their maximum HP.</para> +/// <para>Ignores the effects of Guard when dealing damage.</para> +/// <para>The additional effect of Kuzushi cannot be applied to players riding machina and non-player combatants.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// <para>Cannot be executed while bound.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => ZantetsukenPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50208"><strong>Kenki Mastery II</strong></see> (SAM) [208] /// <para>Increases Kenki Gauge when landing all weaponskills excluding Iaijutsu.</para> @@ -63556,10 +64176,53 @@ private IBaseAction VermilionScourgePvE => _VermilionScourgePvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => VermilionScourgePvE; +private readonly Lazy<IBaseAction> _SouthernCrossPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29704, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifySouthernCrossPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29704"><strong>Southern Cross</strong></see> <i>PvP</i> (RDM) [29704] [Limit Break] +/// </summary> +static partial void ModifySouthernCrossPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29704"><strong>Southern Cross</strong></see> <i>PvP</i> (RDM) [29704] [Limit Break] +/// <para>Emblazons a grand cross on the ground beneath a party member or enemy, restoring HP of party members within range while damaging enemies.</para> +/// <para>Cure Potency: 8,000</para> +/// <para>Damage Potency: 8,000</para> +/// <para>White Shift Effect: Cure potency is increased by 50%</para> +/// <para>Black Shift Effect: Damage potency is increased by 50%</para> +/// <para>Targets standing at the cross's center will receive the effects of this action twice.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// </summary> + +private IBaseAction SouthernCrossPvP => _SouthernCrossPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29704"><strong>Southern Cross</strong></see> <i>PvP</i> (RDM) [29704] [Limit Break] +/// <para>Emblazons a grand cross on the ground beneath a party member or enemy, restoring HP of party members within range while damaging enemies.</para> +/// <para>Cure Potency: 8,000</para> +/// <para>Damage Potency: 8,000</para> +/// <para>White Shift Effect: Cure potency is increased by 50%</para> +/// <para>Black Shift Effect: Damage potency is increased by 50%</para> +/// <para>Targets standing at the cross's center will receive the effects of this action twice.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => SouthernCrossPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50195"><strong>Enhanced Jolt</strong></see> (RDM) [195] /// <para>Upgrades Jolt to Jolt II. Also increases the potency of Verthunder and Veraero to 360, and the potency of Verfire and Verstone to 300.</para> @@ -66984,9 +67647,11 @@ public abstract partial class BlueMageRotation : CustomRotation + #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50219"><strong>Learning</strong></see> (BLU) [219] /// <para>Infrequently grants the ability to discern the secrets of enemy actions wielded in battle and make them your own.</para> @@ -68886,10 +69551,59 @@ private IBaseAction GunmetalSoulPvE => _GunmetalSoulPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => GunmetalSoulPvE; +private readonly Lazy<IBaseAction> _RelentlessRushPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29130, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyRelentlessRushPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29130"><strong>Relentless Rush</strong></see> <i>PvP</i> (GNB) [29130] [Limit Break] +/// </summary> +static partial void ModifyRelentlessRushPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29130"><strong>Relentless Rush</strong></see> <i>PvP</i> (GNB) [29130] [Limit Break] +/// <para>Unleashes a flurry of blade strikes on nearby enemies, dealing damage over time with a potency of 4,000 and reducing damage taken by 25% until effect expires.</para> +/// <para>Duration: 4s</para> +/// <para>Activates Terminal Trigger when effect duration expires.</para> +/// <para>Additional Effect: Afflicts target with Relentless Shrapnel, reducing damage dealt by 4% while increasing damage taken by 4% per stack</para> +/// <para>Duration: 5s</para> +/// <para>Maximum Stacks: 5</para> +/// <para>Can be executed while moving.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 60s</para> +/// <para></para> +/// <para>※Action changes to Terminal Trigger upon execution.</para> +/// </summary> + +private IBaseAction RelentlessRushPvP => _RelentlessRushPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29130"><strong>Relentless Rush</strong></see> <i>PvP</i> (GNB) [29130] [Limit Break] +/// <para>Unleashes a flurry of blade strikes on nearby enemies, dealing damage over time with a potency of 4,000 and reducing damage taken by 25% until effect expires.</para> +/// <para>Duration: 4s</para> +/// <para>Activates Terminal Trigger when effect duration expires.</para> +/// <para>Additional Effect: Afflicts target with Relentless Shrapnel, reducing damage dealt by 4% while increasing damage taken by 4% per stack</para> +/// <para>Duration: 5s</para> +/// <para>Maximum Stacks: 5</para> +/// <para>Can be executed while moving.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 60s</para> +/// <para></para> +/// <para>※Action changes to Terminal Trigger upon execution.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => RelentlessRushPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50257"><strong>Cartridge Charge</strong></see> (GNB) [257] /// <para>Stores a Cartridge in your Powder Gauge after successfully completing a combo with Solid Barrel.</para> @@ -70666,10 +71380,47 @@ private IBaseAction CrimsonLotusPvE => _CrimsonLotusPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => CrimsonLotusPvE; +private readonly Lazy<IBaseAction> _ContradancePvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29432, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyContradancePvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29432"><strong>Contradance</strong></see> <i>PvP</i> (DNC) [29432] [Limit Break] +/// </summary> +static partial void ModifyContradancePvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29432"><strong>Contradance</strong></see> <i>PvP</i> (DNC) [29432] [Limit Break] +/// <para>Charms nearby enemies.</para> +/// <para>Duration: 2s</para> +/// <para>Damage you deal to charmed enemies will extend the effect duration by 2s. This effect can only be extended once.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// </summary> + +private IBaseAction ContradancePvP => _ContradancePvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29432"><strong>Contradance</strong></see> <i>PvP</i> (DNC) [29432] [Limit Break] +/// <para>Charms nearby enemies.</para> +/// <para>Duration: 2s</para> +/// <para>Damage you deal to charmed enemies will extend the effect duration by 2s. This effect can only be extended once.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 90s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => ContradancePvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50251"><strong>Increased Action Damage</strong></see> (DNC) [251] /// <para>Increases base action damage by 10%.</para> @@ -72210,10 +72961,61 @@ private IBaseAction TheEndPvE => _TheEndPvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => TheEndPvE; +private readonly Lazy<IBaseAction> _TenebraeLemurumPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29553, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyTenebraeLemurumPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29553"><strong>Tenebrae Lemurum</strong></see> <i>PvP</i> (RPR) [29553] [Limit Break] +/// </summary> +static partial void ModifyTenebraeLemurumPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29553"><strong>Tenebrae Lemurum</strong></see> <i>PvP</i> (RPR) [29553] [Limit Break] +/// <para>Offers your flesh as a vessel to your avatar, gaining 5 stacks of Enshrouded.</para> +/// <para>Duration: 20s</para> +/// <para>Additional Effect: Afflicts nearby enemies with Hysteria</para> +/// <para>Hysteria Effect: Afflicted enemies are unable to act of their own free will</para> +/// <para>Duration: 2s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 75s</para> +/// <para>Has no effect on players riding machina or non-player combatants.</para> +/// <para></para> +/// <para>※Action changes to Communio while under the effect of Enshrouded.</para> +/// <para>※Grim Swathe changes to Lemure's Slice while under the effect of Enshrouded.</para> +/// <para>※Infernal Slice Combo changes to Void Reaping while under the effect of Enshrouded.</para> +/// </summary> + +private IBaseAction TenebraeLemurumPvP => _TenebraeLemurumPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29553"><strong>Tenebrae Lemurum</strong></see> <i>PvP</i> (RPR) [29553] [Limit Break] +/// <para>Offers your flesh as a vessel to your avatar, gaining 5 stacks of Enshrouded.</para> +/// <para>Duration: 20s</para> +/// <para>Additional Effect: Afflicts nearby enemies with Hysteria</para> +/// <para>Hysteria Effect: Afflicted enemies are unable to act of their own free will</para> +/// <para>Duration: 2s</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 75s</para> +/// <para>Has no effect on players riding machina or non-player combatants.</para> +/// <para></para> +/// <para>※Action changes to Communio while under the effect of Enshrouded.</para> +/// <para>※Grim Swathe changes to Lemure's Slice while under the effect of Enshrouded.</para> +/// <para>※Infernal Slice Combo changes to Void Reaping while under the effect of Enshrouded.</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => TenebraeLemurumPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50379"><strong>Soul Gauge</strong></see> (RPR) [379] /// <para>Allows for Soul Gauge accumulation upon the landing of certain actions, or defeating enemies under the effect of Death's Design.</para> @@ -73579,10 +74381,57 @@ private IBaseAction TechneMakrePvE => _TechneMakrePvECreator.Value; /// <para></para> /// </summary> private sealed protected override IBaseAction LimitBreak3 => TechneMakrePvE; +private readonly Lazy<IBaseAction> _MesotesPvPCreator = new(() => +{ + IBaseAction action = new BaseAction((ActionID)29266, false); + CustomRotation.LoadActionSetting(ref action); + + var setting = action.Setting; + ModifyMesotesPvP(ref setting); + action.Setting = setting; + + return action; +}); + +/// <summary> +/// Modify <see href="https://garlandtools.org/db/#action/29266"><strong>Mesotes</strong></see> <i>PvP</i> (SGE) [29266] [Limit Break] +/// </summary> +static partial void ModifyMesotesPvP(ref ActionSetting setting); + +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29266"><strong>Mesotes</strong></see> <i>PvP</i> (SGE) [29266] [Limit Break] +/// <para>Erects a magicked barrier at a select location, granting party members the effect of Mesotes and afflicting enemies with the effect of Lype when standing inside.</para> +/// <para>Duration: 15s</para> +/// <para>Mesotes Effect: Negates all damage from enemies who are not under the effect of Lype</para> +/// <para>Duration: 5s</para> +/// <para>Lype Effect: Damage over time</para> +/// <para>Potency: 8,000</para> +/// <para>Duration: 5s</para> +/// <para>The barrier can be relocated once before its effect expires, but the effect duration will not be reset.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// </summary> + +private IBaseAction MesotesPvP => _MesotesPvPCreator.Value; +/// <summary> +/// <see href="https://garlandtools.org/db/#action/29266"><strong>Mesotes</strong></see> <i>PvP</i> (SGE) [29266] [Limit Break] +/// <para>Erects a magicked barrier at a select location, granting party members the effect of Mesotes and afflicting enemies with the effect of Lype when standing inside.</para> +/// <para>Duration: 15s</para> +/// <para>Mesotes Effect: Negates all damage from enemies who are not under the effect of Lype</para> +/// <para>Duration: 5s</para> +/// <para>Lype Effect: Damage over time</para> +/// <para>Potency: 8,000</para> +/// <para>Duration: 5s</para> +/// <para>The barrier can be relocated once before its effect expires, but the effect duration will not be reset.</para> +/// <para>Can only be executed when the limit gauge is full.</para> +/// <para>Gauge Charge Time: 120s</para> +/// </summary> +private sealed protected override IBaseAction LimitBreakPvP => MesotesPvP; #endregion #region Traits + /// <summary> /// <see href="https://garlandtools.org/db/#action/50368"><strong>Maim and Mend</strong></see> (SGE) [368] /// <para>Increases base action damage and HP restoration by 10%.</para> diff --git a/RotationSolver/Commands/RSCommands_Actions.cs b/RotationSolver/Commands/RSCommands_Actions.cs index 2e994f01f..e901d3b01 100644 --- a/RotationSolver/Commands/RSCommands_Actions.cs +++ b/RotationSolver/Commands/RSCommands_Actions.cs @@ -53,12 +53,12 @@ public static void DoAction() if (nextAction is BaseAction act1 && act1.Info.IsPvP && !act1.Setting.IsFriendly && act1.TargetInfo.IsSingleTarget - && act1.Target?.Target is PlayerCharacter p/* && p != Player.Object*/) + && act1.Target?.Target is PlayerCharacter p && p != Player.Object) { var hash = SocialUpdater.EncryptString(p); //Don't attack authors and contributors!! - if (!act1.Setting.IsFriendly && (RotationUpdater.AuthorHashes.ContainsKey(hash) + if ((RotationUpdater.AuthorHashes.ContainsKey(hash) || DownloadHelper.ContributorsHash.Contains(hash))) { Svc.Chat.PrintError($"Please don't attack RS developers with RS by {act1}!"); diff --git a/RotationSolver/Localization/Localization.json b/RotationSolver/Localization/Localization.json index 6ecfdca68..6c3d53656 100644 --- a/RotationSolver/Localization/Localization.json +++ b/RotationSolver/Localization/Localization.json @@ -254,5 +254,6 @@ "RotationSolver.Data.UiString.SpecialCommandType_Raise": "Raise", "DownloadRotationsName": "Auto Download Rotations", "AutoLoadCustomRotationsName": "Auto load rotations", - "RotationSolver.Data.UiString.ConfigWindow_Rotations_Library": "The folder contains rotation libs or the download url about rotation lib." + "RotationSolver.Data.UiString.ConfigWindow_Rotations_Library": "The folder contains rotation libs or the download url about rotation lib.", + "RotationSolver.Data.UiString.SpecialCommandType_LimitBreak": "Limit Break" } \ No newline at end of file