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 @@
-
+