protected override bool ShouldSevenSidedStrike(out TrinityActor target) { target = null; var skill = Skills.Monk.SevenSidedStrike; var nearbyUnitsWithEP = WeightedUnits.Any(u => u.Distance < 20f && HasEP(u)); //var nearbyUnitsWithGungdoEP = CurrentTarget.HasDebuff((SNOPower)455436); if (!skill.CanCast()) { return(false); } if (!TargetUtil.AnyMobsInRange(45f) && !CurrentTarget.IsTreasureGoblin) { return(false); } if (!nearbyUnitsWithEP && !Legendary.Madstone.IsEquipped) { return(false); } //if (!nearbyUnitsWithGungdoEP) // return false; target = TargetUtil.GetBestClusterUnit() ?? CurrentTarget; return(target != null); }
public TrinityPower GetOffensivePower() { TrinityActor target; TrinityPower power = null; Vector3 position; if (ShouldDashingStrike(out position)) { return(DashingStrike(position)); } if (ShouldCycloneStrike()) { return(CycloneStrike()); } if (ShouldSevenSidedStrike(out target)) { return(SevenSidedStrike(target)); } if (!WeightedUnits.Any(u => u.Distance < 20f && HasEP(u))) { return(GetExplodingPalmPrimary()); } return(GetPrimary()); }
protected bool IsReasonToUse(SkillSettings settings, Skill skill) { var routine = Core.Routines.CurrentRoutine; if (settings.Reasons.HasFlag(UseReasons.Elites) && TargetUtil.AnyElitesInRange(40f)) { return(true); } if (settings.Reasons.HasFlag(UseReasons.Trash) && TargetUtil.ClusterExists(routine.TrashRange, routine.TrashRange, routine.ClusterSize)) { return(true); } if (settings.Reasons.HasFlag(UseReasons.Surrounded) && TargetUtil.NumMobsInRange(25f) >= Math.Max(ClusterSize, 5)) { return(true); } if (settings.Reasons.HasFlag(UseReasons.Avoiding) && IsCurrentlyAvoiding) { return(true); } if (settings.Reasons.HasFlag(UseReasons.Blocked) && PlayerMover.IsBlocked) { return(true); } if (settings.Reasons.HasFlag(UseReasons.DumpResource) && Player.PrimaryResourcePct < 0.8f) { return(true); } if (settings.Reasons.HasFlag(UseReasons.Goblins) && WeightedUnits.Any(u => u.IsTreasureGoblin)) { return(true); } if (settings.Reasons.HasFlag(UseReasons.HealthEmergency) && Player.CurrentHealthPct < TrinityCombat.Routines.Current.EmergencyHealthPct) { return(true); } if (settings.Reasons.HasFlag(UseReasons.Buff) && settings.BuffCondition != null && settings.BuffCondition()) { return(true); } return(false); }
protected virtual bool ShouldSweepingWind() { if (!Skills.Monk.SweepingWind.CanCast()) { return(false); } var buffCooldownRemanining = Core.Cooldowns.GetBuffCooldownRemaining(SNOPower.Monk_SweepingWind); if (buffCooldownRemanining.TotalMilliseconds > 750) { return(false); } if (!WeightedUnits.Any(u => u.Distance < 100f)) { return(false); } return(true); }
protected virtual bool ShouldSevenSidedStrike(out TrinityActor target) { target = null; if (!Skills.Monk.SevenSidedStrike.CanCast()) { return(false); } if (!TargetUtil.AnyMobsInRange(45f)) { return(false); } if (Player.PrimaryResource < PrimaryEnergyReserve) { return(false); } if (Skills.Monk.ExplodingPalm.IsActive && !WeightedUnits.Any(u => u.IsUnit && u.Distance < 35f && u.HasDebuff(SNOPower.Monk_ExplodingPalm))) { return(false); } var isElitesInRange = TargetUtil.AnyElitesInRange(15, 1); var isSpamRelatedItems = Legendary.Madstone.IsEquipped || Sets.UlianasStratagem.IsMaxBonusActive; var isLowHealth = Player.CurrentHealthPct < 0.55f; var isLargerCluster = TargetUtil.ClusterExists(20f, 20f, LargeClusterSize); if (isElitesInRange || isSpamRelatedItems || isLowHealth || isLargerCluster) { target = TargetUtil.GetBestClusterUnit(); return(target != null); } return(false); }