public static TrinityPower GetInnasPower()
{
TrinityPower power = null;
// Destructibles
if (UseDestructiblePower)
return GetMonkDestroyPower();
if (CurrentTarget != null)
{
var mysticAllyTarget = TargetUtil.LowestHealthTarget(15f, Player.Position, Skills.Monk.ExplodingPalm.SNOPower);
// Epiphany
if (CanCastEpiphany())
return new TrinityPower(SNOPower.X1_Monk_Epiphany);
// Cyclone Strike
var cycloneRange = Runes.Monk.Implosion.IsActive ? 34 : 24;
if (CanCastCycloneStrike(cycloneRange, 50))
return new TrinityPower(SNOPower.Monk_CycloneStrike);
// Mystic Ally only during Cold
if (CanCast(SNOPower.X1_Monk_MysticAlly_v2) &&
(CacheData.Buffs.ConventionElement == Element.Cold ||
GetHasBuff(SNOPower.Pages_Buff_Infinite_Casting)) &&
TargetUtil.AnyMobsInRange(25f))
{
if (mysticAllyTarget != null)
return new TrinityPower(SNOPower.X1_Monk_MysticAlly_v2, 15f, mysticAllyTarget.ACDGuid);
return new TrinityPower(SNOPower.X1_Monk_MysticAlly_v2, 15f, CurrentTarget.ACDGuid);
}
// Get your Assimilation stacks right before COLD COE buff
if (CanCast(SNOPower.Monk_WayOfTheHundredFists) &&
IsInsideCoeTimeSpan(Element.Physical))
{
if (ShouldSpreadWotHF())
{
var changeTarget = GetNewWotHFTarget() ?? CurrentTarget;
if (changeTarget != null && !changeTarget.HasDebuff(SNOPower.Monk_WayOfTheHundredFists) &&
GetCurrentComboLevel() == 0)
return new TrinityPower(SNOPower.Monk_WayOfTheHundredFists, 9f, changeTarget.ACDGuid);
return new TrinityPower(SNOPower.Monk_WayOfTheHundredFists, 9f, CurrentTarget.ACDGuid);
}
}
// Dashing Strike
if (CanCastDashingStrike)
return new TrinityPower(SNOPower.X1_Monk_DashingStrike);
// Spread EP 4~7.5 seconds before Cold element (.5 seconds after Lightning starts until Lightning ends)
if (!Settings.Combat.Monk.DisableExplodingPalm)
{
if (IsInsideCoeTimeSpan(Element.Physical, 3500, 0))
{
// Make a mega-splosion
if (ShouldSpreadExplodingPalm())
ChangeTarget();
// Exploding Palm
if (CanCastExplodingPalm())
return new TrinityPower(SNOPower.Monk_ExplodingPalm, 10f, CurrentTarget.ACDGuid);
}
}
// Check if the current target is dying so we can make a bomb out of it
if (!CurrentTarget.HasDebuff(SNOPower.Monk_ExplodingPalm) && CurrentTarget.HitPointsPct <= 10 &&
CanCastExplodingPalm())
return new TrinityPower(SNOPower.Monk_ExplodingPalm, 10f, CurrentTarget.ACDGuid);
// if all else fails, just punch
if (mysticAllyTarget != null)
return new TrinityPower(SNOPower.Monk_WayOfTheHundredFists, 9f, mysticAllyTarget.ACDGuid);
return new TrinityPower(SNOPower.Monk_WayOfTheHundredFists, 9f, CurrentTarget.ACDGuid);
}
if (IsNull(null) && !Player.IsInTown && TargetUtil.AnyMobsInRange(60f))
power = DefaultPower;
return power;
}