From 44968fde313d949d2a6fac196d258a2a9a153994 Mon Sep 17 00:00:00 2001 From: IncognitoWater Date: Sun, 14 Jul 2024 03:52:26 +0200 Subject: [PATCH] Updated default MCH for PVP still some issues around turret for now --- .../PVPRotations/Ranged/MCH_Default.PvP.cs | 263 +++++++++--------- 1 file changed, 132 insertions(+), 131 deletions(-) diff --git a/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs b/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs index 1539ff9..01db33e 100644 --- a/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs +++ b/BasicRotations/PVPRotations/Ranged/MCH_Default.PvP.cs @@ -2,136 +2,137 @@ namespace DefaultRotations.Ranged; [Rotation("Default PVP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")] [SourceCode(Path = "main/DefaultRotations/PVPRotations/Ranged/MCH_Default.PvP.cs")] -[Api(1)] +[Api(2)] public sealed class MCH_DefaultPvP : MachinistRotation { - [RotationConfig(CombatType.PvP, Name = "Sprint")] - public bool UseSprintPvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Recuperate")] - public bool UseRecuperatePvP { get; set; } = false; - - [Range(1, 100, ConfigUnitType.Percent, 1)] - [RotationConfig(CombatType.PvP, Name = "RecuperateHP%%?")] - public int RCValue { get; set; } = 75; - - [RotationConfig(CombatType.PvP, Name = "Use Purify")] - public bool UsePurifyPvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on Stun")] - public bool Use1343PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on DeepFreeze")] - public bool Use3219PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on HalfAsleep")] - public bool Use3022PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on Sleep")] - public bool Use1348PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on Bind")] - public bool Use1345PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on Heavy")] - public bool Use1344PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Use Purify on Silence")] - public bool Use1347PvP { get; set; } = false; - - [RotationConfig(CombatType.PvP, Name = "Stop attacking while in Guard.")] - public bool GuardCancel { get; set; } = false; - - private bool TryPurify(out IAction? action) - { - action = null; - if (!UsePurifyPvP) return false; - - var purifyStatuses = new Dictionary - { - { 1343, Use1343PvP }, - { 3219, Use3219PvP }, - { 3022, Use3022PvP }, - { 1348, Use1348PvP }, - { 1345, Use1345PvP }, - { 1344, Use1344PvP }, - { 1347, Use1347PvP } - }; - - foreach (var status in purifyStatuses) - { - if (status.Value && Player.HasStatus(true, (StatusID)status.Key)) - { - return PurifyPvP.CanUse(out action); - } - } - - return false; - } - - protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) - { - act = null; - if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; - if (TryPurify(out act)) return true; - if (UseRecuperatePvP && Player.CurrentHp / Player.MaxHp * 100 < RCValue && RecuperatePvP.CanUse(out act)) return true; - - return base.EmergencyAbility(nextGCD, out act); - } - - 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)) return true; - - // Check if BioblasterPvP, AirAnchorPvP, or ChainSawPvP can be used - if (InCombat && !Player.HasStatus(true, StatusID.Analysis) && - (BioblasterPvP.CanUse(out act) && HostileTarget.DistanceToPlayer() <= 12 || AirAnchorPvP.CanUse(out act) || ChainSawPvP.CanUse(out act)) && - AnalysisPvP.CanUse(out act, usedUp: true)) return true; - - return base.AttackAbility(nextGCD, out act); - } - - protected override bool GeneralGCD(out IAction? act) - { - act = null; - if (Player.HasStatus(true, StatusID.Guard)) return false; - - 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 (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; - } - - 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)) - { - act = null; - - { - if (WildfirePvP.CanUse(out act)) return true; - } - if (WildfirePvP.IsInCooldown) - { - 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); - } -} + [RotationConfig(CombatType.PvP, Name = "Sprint")] + public bool UseSprintPvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Recuperate")] + public bool UseRecuperatePvP { get; set; } = false; + + [Range(1, 100, ConfigUnitType.Percent, 1)] + [RotationConfig(CombatType.PvP, Name = "RecuperateHP%%?")] + public int RCValue { get; set; } = 75; + + [RotationConfig(CombatType.PvP, Name = "Use Purify")] + public bool UsePurifyPvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on Stun")] + public bool Use1343PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on DeepFreeze")] + public bool Use3219PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on HalfAsleep")] + public bool Use3022PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on Sleep")] + public bool Use1348PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on Bind")] + public bool Use1345PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on Heavy")] + public bool Use1344PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Use Purify on Silence")] + public bool Use1347PvP { get; set; } = false; + + [RotationConfig(CombatType.PvP, Name = "Stop attacking while in Guard.")] + public bool GuardCancel { get; set; } = false; + + + private bool TryPurify(out IAction? action) + { + action = null; + if (!UsePurifyPvP) return false; + + var purifyStatuses = new Dictionary + { + { 1343, Use1343PvP }, + { 3219, Use3219PvP }, + { 3022, Use3022PvP }, + { 1348, Use1348PvP }, + { 1345, Use1345PvP }, + { 1344, Use1344PvP }, + { 1347, Use1347PvP } + }; + + foreach (var status in purifyStatuses) + { + if (status.Value && Player.HasStatus(true, (StatusID)status.Key)) + { + return PurifyPvP.CanUse(out action); + } + } + + return false; + } + + protected override bool EmergencyAbility(IAction nextGCD, out IAction? act) + { + act = null; + if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false; + if (TryPurify(out act)) return true; + if (UseRecuperatePvP && Player.CurrentHp / Player.MaxHp * 100 < RCValue && RecuperatePvP.CanUse(out act)) return true; + + return base.EmergencyAbility(nextGCD, out act); + } + + 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, true, true, true, true, true)) return true; + // Use WildfirePvP if Overheated + if (Player.HasStatus(true, StatusID.Overheated_3149) && WildfirePvP.CanUse(out act, skipAoeCheck: true, skipComboCheck: true)) return true; + + // Check if BioblasterPvP, AirAnchorPvP, or ChainSawPvP can be used + if (InCombat && !Player.HasStatus(true, StatusID.Analysis) && + (BioblasterPvP.CanUse(out act) && HostileTarget.DistanceToPlayer() <= 12 || AirAnchorPvP.CanUse(out act) || ChainSawPvP.CanUse(out act)) && + AnalysisPvP.CanUse(out act, usedUp: true)) return true; + + return base.AttackAbility(nextGCD, out act); + } + + protected override bool GeneralGCD(out IAction? act) + { + act = null; + if (Player.HasStatus(true, StatusID.Guard)) return false; + + 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 (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; + } + + 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)) + { + act = null; + + { + if (WildfirePvP.CanUse(out act)) return true; + } + if (WildfirePvP.IsInCooldown) + { + 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); + } +} \ No newline at end of file