diff --git a/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs b/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs index b971552..7833b95 100644 --- a/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs +++ b/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs @@ -84,6 +84,7 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) act = null; if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; + if (BishopAutoturretPvP.CanUse(out act, skipAoeCheck: true)) return true; // Use WildfirePvP if Overheated if (Player.HasStatus(true, StatusID.Overheated_3149) && WildfirePvP.CanUse(out act, skipAoeCheck: true, skipComboCheck: true, skipClippingCheck: true)) return true; @@ -98,30 +99,39 @@ protected override bool AttackAbility(IAction nextGCD, out IAction? act) protected override bool GeneralGCD(out IAction? act) { act = null; - // Early exits for Guard status or Sprint usage - if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (!Player.HasStatus(true, StatusID.Guard) && UseSprintPvP && !Player.HasStatus(true, StatusID.Sprint) && !InCombat && SprintPvP.CanUse(out act)) return true; + if (Player.HasStatus(true, StatusID.Guard)) return false; - if (!Player.HasStatus(true, StatusID.Overheated_3149) && BlastChargePvP.CanUse(out act, usedUp: true, skipAoeCheck: true)) return true; - // Specific action sequences based on Overheated status or other specific conditions - if (Player.HasStatus(true, StatusID.Overheated_3149)) + if (!Player.HasStatus(true, StatusID.Overheated_3149) && ScattergunPvP.CanUse(out act, skipAoeCheck: true) && HostileTarget.DistanceToPlayer() <= 10) return true; + + if (Player.HasStatus(true, StatusID.Analysis)) { - if (HeatBlastPvP.CanUse(out act)) return true; + if (Player.HasStatus(true, StatusID.AirAnchorPrimed) && !Player.HasStatus(true, StatusID.BioblasterPrimed, StatusID.ChainSawPrimed, StatusID.DrillPrimed, StatusID.Overheated_3149) && AirAnchorPvP.CanUse(out act, usedUp: true)) return true; + if (Player.HasStatus(true, StatusID.BioblasterPrimed) && !Player.HasStatus(true, StatusID.AirAnchorPrimed, StatusID.ChainSawPrimed, StatusID.DrillPrimed, StatusID.Overheated_3149) && BioblasterPvP.CanUse(out act, skipAoeCheck: true, usedUp: true)) return true; + if (Player.HasStatus(true, StatusID.ChainSawPrimed) && !Player.HasStatus(true, StatusID.BioblasterPrimed, StatusID.BioblasterPrimed, StatusID.DrillPrimed, StatusID.Overheated_3149) && ChainSawPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (Player.HasStatus(true, StatusID.DrillPrimed) && !Player.HasStatus(true, StatusID.BioblasterPrimed, StatusID.ChainSawPrimed, StatusID.AirAnchorPrimed, StatusID.Overheated_3149) && DrillPvP.CanUse(out act, usedUp: true)) return true; } - else + + if (AirAnchorPvP.Cooldown.CurrentCharges == 2 && Player.HasStatus(true, StatusID.AirAnchorPrimed) && !Player.HasStatus(true, StatusID.BioblasterPrimed, StatusID.ChainSawPrimed, StatusID.DrillPrimed, StatusID.Overheated_3149) && AirAnchorPvP.CanUse(out act)) return true; + if (BioblasterPvP.Cooldown.CurrentCharges == 2 && Player.HasStatus(true, StatusID.BioblasterPrimed) && !Player.HasStatus(true, StatusID.AirAnchorPrimed, StatusID.ChainSawPrimed, StatusID.DrillPrimed, StatusID.Overheated_3149) && BioblasterPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (ChainSawPvP.Cooldown.CurrentCharges == 2 && Player.HasStatus(true, StatusID.ChainSawPrimed) && !Player.HasStatus(true, StatusID.BioblasterPrimed, StatusID.BioblasterPrimed, StatusID.DrillPrimed, StatusID.Overheated_3149) && ChainSawPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (DrillPvP.Cooldown.CurrentCharges == 2 && Player.HasStatus(true, StatusID.DrillPrimed) && !Player.HasStatus(true, StatusID.BioblasterPrimed, StatusID.ChainSawPrimed, StatusID.AirAnchorPrimed, StatusID.Overheated_3149) && DrillPvP.CanUse(out act)) return true; + + if (Player.HasStatus(true, StatusID.Overheated_3149)) { - if (HostileTarget != null && !HostileTarget.HasStatus(true, StatusID.Guard)) + act = null; + { - if (HostileTarget.DistanceToPlayer() <= 12 && ScattergunPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (WildfirePvP.CanUse(out act)) return true; } - - // Priority to Drill, Bioblaster, AirAnchor if Analysis is active - if (Player.HasStatus(true, StatusID.Analysis)) + if (WildfirePvP.IsInCooldown) { - if (DrillPvP.CanUse(out act, skipAoeCheck: true) || (BioblasterPvP.CanUse(out act) && HostileTarget.DistanceToPlayer() <= 12) || AirAnchorPvP.CanUse(out act, skipAoeCheck: true)) return true; + if (BlastChargePvP.CanUse(out act, skipCastingCheck: true)) return true; } + return false; } + if (BlastChargePvP.CanUse(out act, skipCastingCheck: true)) return true; + return base.GeneralGCD(out act); } }