From 487e7945d80e45ae0a74c90a01d4beb798851f47 Mon Sep 17 00:00:00 2001 From: LTS-FFXIV <127939494+LTS-FFXIV@users.noreply.github.com> Date: Wed, 28 Aug 2024 23:24:00 -0500 Subject: [PATCH] various fixes inlcuding bard fix --- BasicRotations/Healer/SCH_Default.cs | 10 +++- BasicRotations/Healer/SGE_Default.cs | 84 +++++++++++++-------------- BasicRotations/Ranged/BRD_Default.cs | 46 ++++++--------- BasicRotations/RebornRotations.csproj | 2 +- 4 files changed, 68 insertions(+), 74 deletions(-) diff --git a/BasicRotations/Healer/SCH_Default.cs b/BasicRotations/Healer/SCH_Default.cs index 5fc3686..9d4f82c 100644 --- a/BasicRotations/Healer/SCH_Default.cs +++ b/BasicRotations/Healer/SCH_Default.cs @@ -95,7 +95,6 @@ protected override bool HealSingleAbility(IAction nextGCD, out IAction? act) { var haveLink = PartyMembers.Any(p => p.HasStatus(true, StatusID.FeyUnion_1223)); if (ManifestationPvE.CanUse(out act)) return true; - if (AetherpactPvE.CanUse(out act) && FairyGauge >= 70 && !haveLink) return true; if (ProtractionPvE.CanUse(out act)) return true; if (ExcogitationPvE.CanUse(out act)) return true; @@ -108,6 +107,8 @@ protected override bool HealSingleAbility(IAction nextGCD, out IAction? act) [RotationDesc(ActionID.FeyIlluminationPvE, ActionID.ExpedientPvE, ActionID.SummonSeraphPvE, ActionID.ConsolationPvE, ActionID.SacredSoilPvE)] protected override bool DefenseAreaAbility(IAction nextGCD, out IAction? act) { + if (DeploymentTacticsPvE.CanUse(out act)) return true; + if (SeraphismPvE.CanUse(out act)) return true; if (FeyIlluminationPvE_16538.CanUse(out act)) return true; @@ -184,7 +185,10 @@ protected override bool DefenseAreaGCD(out IAction? act) protected override bool GeneralGCD(out IAction? act) { + // Summon Eos if (SummonEosPvE.CanUse(out act)) return true; + + //Add dot if (BiolysisPvE.CanUse(out act) && AllHostileTargets.Where(p => p.DistanceToPlayer() < 5).Count() < 4) return true; if (BioIiPvE.CanUse(out act) && AllHostileTargets.Where(p => p.DistanceToPlayer() < 5).Count() < 4) return true; if (BioPvE.CanUse(out act) && AllHostileTargets.Where(p => p.DistanceToPlayer() < 5).Count() < 4) return true; @@ -193,15 +197,15 @@ protected override bool GeneralGCD(out IAction? act) if (ArtOfWarIiPvE.CanUse(out act)) return true; if (ArtOfWarPvE.CanUse(out act)) return true; - //Single cast + //Single target cast if (BroilIvPvP.CanUse(out act)) return true; if (BroilIiiPvE.CanUse(out act)) return true; if (BroilIiPvE.CanUse(out act)) return true; if (BroilPvE.CanUse(out act)) return true; + if (RuinPvE.CanUse(out act)) return true; //Single Instant for when moving. if (RuinIiPvE.CanUse(out act)) return true; - if (RuinPvE.CanUse(out act)) return true; //Add dot while moving. if (BiolysisPvE.CanUse(out act, skipStatusProvideCheck: true)) return true; diff --git a/BasicRotations/Healer/SGE_Default.cs b/BasicRotations/Healer/SGE_Default.cs index 9968884..74b8776 100644 --- a/BasicRotations/Healer/SGE_Default.cs +++ b/BasicRotations/Healer/SGE_Default.cs @@ -266,6 +266,43 @@ protected override bool DefenseSingleGCD(out IAction? act) return base.DefenseSingleGCD(out act); } + [RotationDesc(ActionID.PneumaPvE, ActionID.PrognosisPvE, ActionID.EukrasianPrognosisPvE, ActionID.EukrasianPrognosisIiPvE)] + protected override bool HealAreaGCD(out IAction? act) + { + if (PartyMembersAverHP < PneumaAOEPartyHeal || DyskrasiaPvE.CanUse(out _) && PartyMembers.GetJobCategory(JobRole.Tank).Any(t => t.GetHealthRatio() < PneumaAOETankHeal)) + { + if (PneumaPvE.CanUse(out act)) return true; + } + + if (Player.HasStatus(false, StatusID.EukrasianDiagnosis, StatusID.EukrasianPrognosis, StatusID.Galvanize)) + { + if (PrognosisPvE.CanUse(out act)) return true; + } + + if (EukrasianPrognosisIiPvE.CanUse(out _)) + { + if (EukrasiaPvE.CanUse(out act)) return true; + act = EukrasianPrognosisIiPvE; + return true; + } + + if (!EukrasianPrognosisIiPvE.EnoughLevel && EukrasianPrognosisPvE.CanUse(out _)) + { + if (EukrasiaPvE.CanUse(out act)) return true; + act = EukrasianPrognosisPvE; + return true; + } + + return base.HealAreaGCD(out act); + } + + [RotationDesc(ActionID.DiagnosisPvE)] + protected override bool HealSingleGCD(out IAction? act) + { + if (DiagnosisPvE.CanUse(out act)) return true; + return base.HealSingleGCD(out act); + } + protected override bool GeneralGCD(out IAction? act) { if (HostileTarget?.IsBossFromTTK() ?? false) @@ -294,16 +331,16 @@ protected override bool GeneralGCD(out IAction? act) } } - if (PhlegmaIiiPvE.CanUse(out act, usedUp: IsMoving, skipAoeCheck: true)) return true; - if (!PhlegmaIiiPvE.EnoughLevel && PhlegmaIiPvE.CanUse(out act, usedUp: IsMoving, skipAoeCheck: true)) return true; - if (!PhlegmaIiPvE.EnoughLevel && PhlegmaPvE.CanUse(out act, usedUp: IsMoving, skipAoeCheck: true)) return true; + if (PhlegmaIiiPvE.CanUse(out act, usedUp: IsMoving)) return true; + if (PhlegmaIiPvE.CanUse(out act, usedUp: IsMoving)) return true; + if (PhlegmaPvE.CanUse(out act, usedUp: IsMoving)) return true; if (PartyMembers.Any(b => b.GetHealthRatio() < PneumaSTPartyHeal && !b.IsDead) || PartyMembers.GetJobCategory(JobRole.Tank).Any(t => t.GetHealthRatio() < PneumaSTTankHeal && !t.IsDead)) { - if (PneumaPvE.CanUse(out act, skipAoeCheck: true)) return true; + if (PneumaPvE.CanUse(out act)) return true; } - if (IsMoving && ToxikonPvE.CanUse(out act, skipAoeCheck: true)) return true; + if (IsMoving && ToxikonPvE.CanUse(out act)) return true; if (EukrasianDyskrasiaPvE.CanUse(out _, skipCastingCheck: true)) { @@ -338,43 +375,6 @@ protected override bool GeneralGCD(out IAction? act) return base.GeneralGCD(out act); } - - [RotationDesc(ActionID.PneumaPvE, ActionID.PrognosisPvE, ActionID.EukrasianPrognosisPvE, ActionID.EukrasianPrognosisIiPvE)] - protected override bool HealAreaGCD(out IAction? act) - { - if (PartyMembersAverHP < PneumaAOEPartyHeal || DyskrasiaPvE.CanUse(out _) && PartyMembers.GetJobCategory(JobRole.Tank).Any(t => t.GetHealthRatio() < PneumaAOETankHeal)) - { - if (PneumaPvE.CanUse(out act, skipAoeCheck: true)) return true; - } - - if (Player.HasStatus(false, StatusID.EukrasianDiagnosis, StatusID.EukrasianPrognosis, StatusID.Galvanize)) - { - if (PrognosisPvE.CanUse(out act)) return true; - } - - if (EukrasianPrognosisIiPvE.CanUse(out _)) - { - if (EukrasiaPvE.CanUse(out act)) return true; - act = EukrasianPrognosisIiPvE; - return true; - } - - if (!EukrasianPrognosisIiPvE.EnoughLevel && EukrasianPrognosisPvE.CanUse(out _)) - { - if (EukrasiaPvE.CanUse(out act)) return true; - act = EukrasianPrognosisPvE; - return true; - } - - return base.HealAreaGCD(out act); - } - - [RotationDesc(ActionID.DiagnosisPvE)] - protected override bool HealSingleGCD(out IAction? act) - { - if (DiagnosisPvE.CanUse(out act)) return true; - return base.HealSingleGCD(out act); - } #endregion #region Extra Methods diff --git a/BasicRotations/Ranged/BRD_Default.cs b/BasicRotations/Ranged/BRD_Default.cs index 59daead..9c5d5e6 100644 --- a/BasicRotations/Ranged/BRD_Default.cs +++ b/BasicRotations/Ranged/BRD_Default.cs @@ -42,7 +42,7 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) { if ((EmpyrealArrowPvE.Cooldown.IsCoolingDown && !EmpyrealArrowPvE.Cooldown.WillHaveOneChargeGCD(1) || !EmpyrealArrowPvE.EnoughLevel) && Repertoire != 3) { - if (!Player.HasStatus(true, StatusID.StraightShotReady) && BarragePvE.CanUse(out act)) return true; + if (!Player.HasStatus(true, StatusID.HawksEye_3861) && BarragePvE.CanUse(out act)) return true; } } @@ -160,17 +160,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) if (BloodletterPvE.CanUse(out act, usedUp: true)) return true; } - // Allow full use of RagingStrikes - if (Player.HasStatus(true, StatusID.RagingStrikes)) - { - if (HeartbreakShotPvE.CanUse(out act, usedUp: true)) return true; - - if (RainOfDeathPvE.CanUse(out act, usedUp: true)) return true; - - if (BloodletterPvE.CanUse(out act, usedUp: true)) return true; - } - - //if (BloodletterLogic(out act)) return true; + if (BetterBloodletterLogic(out act)) return true; return base.AttackAbility(nextGCD, out act); } @@ -238,34 +228,34 @@ private bool CanUseApexArrow(out IAction act) return false; } - private bool BloodletterLogic(out IAction? act) + private bool BetterBloodletterLogic(out IAction? act) { - bool isBattleVoice = BattleVoicePvE.CanUse(out _); - bool isRadiantFinale = RadiantFinalePvE.CanUse(out _); - bool isRagingNow = Player.HasStatus(true, StatusID.RagingStrikes); - bool isRagingSoon = RagingStrikesPvE.Cooldown.WillHaveOneCharge(30); - bool isBloodTrait = EnhancedBloodletterTrait.EnoughLevel && BloodletterPvE.Cooldown.CurrentCharges < 3; - bool isNoBloodTrait = !EnhancedBloodletterTrait.EnoughLevel && BloodletterPvE.Cooldown.CurrentCharges < 2; - bool isEmpyrealArrowCD = EmpyrealArrowPvE.Cooldown.IsCoolingDown; - bool isEmpyrealSoon = !EmpyrealArrowPvE.Cooldown.WillHaveOneChargeGCD(); - bool isEmpyrealLevel = !EmpyrealArrowPvE.EnoughLevel; - bool isRepertoire = Repertoire != 3; + bool isRagingStrikesLevel = RagingStrikesPvE.EnoughLevel; + bool isBattleVoiceLevel = BattleVoicePvE.EnoughLevel; + bool isRadiantFinaleLevel = RadiantFinalePvE.EnoughLevel; if (HeartbreakShotPvE.CanUse(out act, usedUp: true)) { - if (isBattleVoice || isRadiantFinale || (isRagingSoon && (isBloodTrait || isNoBloodTrait))) return false; - if (isEmpyrealArrowCD || isEmpyrealSoon || isEmpyrealLevel || isRepertoire) return true; + if ((!isRagingStrikesLevel) + || (isRagingStrikesLevel && !isBattleVoiceLevel && Player.HasStatus(true, StatusID.RagingStrikes)) + || (isBattleVoiceLevel && !isRadiantFinaleLevel && Player.HasStatus(true, StatusID.RagingStrikes) && Player.HasStatus(true, StatusID.BattleVoice)) + || isRadiantFinaleLevel && Player.HasStatus(true, StatusID.RagingStrikes) && Player.HasStatus(true, StatusID.BattleVoice) && Player.HasStatus(true, StatusID.RadiantFinale)) return true; } if (RainOfDeathPvE.CanUse(out act, usedUp: true)) { - if (isEmpyrealArrowCD || isEmpyrealSoon || isEmpyrealLevel || isRepertoire) return true; + if ((!isRagingStrikesLevel) + || (isRagingStrikesLevel && !isBattleVoiceLevel && Player.HasStatus(true, StatusID.RagingStrikes)) + || (isBattleVoiceLevel && !isRadiantFinaleLevel && Player.HasStatus(true, StatusID.RagingStrikes) && Player.HasStatus(true, StatusID.BattleVoice)) + || isRadiantFinaleLevel && Player.HasStatus(true, StatusID.RagingStrikes) && Player.HasStatus(true, StatusID.BattleVoice) && Player.HasStatus(true, StatusID.RadiantFinale)) return true; } if (BloodletterPvE.CanUse(out act, usedUp: true)) { - if (isBattleVoice || isRadiantFinale || (isRagingSoon && (isBloodTrait || isNoBloodTrait))) return false; - if (isEmpyrealArrowCD || isEmpyrealSoon || isEmpyrealLevel || isRepertoire) return true; + if ((!isRagingStrikesLevel) + || (isRagingStrikesLevel && !isBattleVoiceLevel && Player.HasStatus(true, StatusID.RagingStrikes)) + || (isBattleVoiceLevel && !isRadiantFinaleLevel && Player.HasStatus(true, StatusID.RagingStrikes) && Player.HasStatus(true, StatusID.BattleVoice)) + || isRadiantFinaleLevel && Player.HasStatus(true, StatusID.RagingStrikes) && Player.HasStatus(true, StatusID.BattleVoice) && Player.HasStatus(true, StatusID.RadiantFinale)) return true; } return false; } diff --git a/BasicRotations/RebornRotations.csproj b/BasicRotations/RebornRotations.csproj index bb96bca..884ef5b 100644 --- a/BasicRotations/RebornRotations.csproj +++ b/BasicRotations/RebornRotations.csproj @@ -16,7 +16,7 @@ - +