Skip to content
This repository has been archived by the owner on Nov 23, 2024. It is now read-only.

Commit

Permalink
Merge pull request #199 from FFXIV-CombatReborn/BRD-fixes
Browse files Browse the repository at this point in the history
various fixes including bard fix
  • Loading branch information
LTS-FFXIV authored Aug 29, 2024
2 parents 2075844 + 487e794 commit 56b137a
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 74 deletions.
10 changes: 7 additions & 3 deletions BasicRotations/Healer/SCH_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down
84 changes: 42 additions & 42 deletions BasicRotations/Healer/SGE_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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))
{
Expand Down Expand Up @@ -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
Expand Down
46 changes: 18 additions & 28 deletions BasicRotations/Ranged/BRD_Default.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion BasicRotations/RebornRotations.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<Compile Include="Duty\EmanationDefault" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="RotationSolverReborn.Basic" Version="7.0.5.38" />
<PackageReference Include="RotationSolverReborn.Basic" Version="7.0.5.39" />
</ItemGroup>
<ItemGroup>
<Reference Include="Dalamud">
Expand Down

0 comments on commit 56b137a

Please sign in to comment.