this is how i have the skills set
private void RegisterMainAbilities()
{
Register("Leap Slam", ret => BestTarget.Distance > 20 || NumberOfMobsNear(BestTarget, 10, 2));
Register("Sweep", ret => NumberOfMobsNear(BestTarget, 10, 1));
Register("Cyclone");
Register("Detonate Dead", ret => NumberOfMobsNear(BestTarget, 15, 1, true));
Register("Lightning Arrow", ret => NumberOfMobsNear(BestTarget, 30, 1));
Register("Rain of Arrows", ret => NumberOfMobsNear(BestTarget, 10, 1));
Register("Split Arrow", ret => NumberOfMobsNear(BestTarget, 10, 1));
Register("Arc", ret => NumberOfMobsNear(BestTarget, 10, 1));
Register("Firestorm", ret => NumberOfMobsNear(BestTarget, 10, 2));
Register("Ice Nova", ret => NumberOfMobsNear(LokiPoe.Me, 10, 2));
Register("Shock Nova", ret => NumberOfMobsNear(LokiPoe.Me, 10, 2));
// Dump all our frenzy charges on flicker strike if we can.
Register("Flicker Strike", ret => HasAura(LokiPoe.Me, "frenzy_charge", MaxFrenzyCharges));
Register("Burning Arrow");
Register("Explosive Arrow");
Register("Ice Shot");
Register("Poison Arrow");
Register("Arctic Breath");
Register("Fireball");
Register("Freezing Pulse");
Register("Ice Spear");
Register("Spark");
Register("Frenzy");
Register("Arc");
Register("Spectral Throw", ret => NumberOfMobsNear(BestTarget, 10, 2));
Register("Ethereal Knives");
Register("Power Siphon"); // TODO: nfi how to handle this one
//Register("Incinerate"); // TODO: channeled spells are a bit... weird. Not sure how to handle them.
//Register("Frost Wall"); // TODO: this one is more of an "oh shit" kind of thing. Not sure how to proceed with it.
// And from here down, are melee abilities.
// So we need to ensure we're in range.
CombatComposite.AddChild(CreateMoveIntoRange(10));
Register("Puncture", ret => !BestTarget.HasAura("puncture")); // TODO: Check for the aura at this ability so we're not puncturing the same mob multiple times.
Register("Discharge"); // TODO: need to check all power charges to get the most out of this.
Register("Viper Strike"); // TODO: find the aura for this so we can check against 4 stacks, and the duration.
Register("Dominating Blow", ret => NumDominatedMonsters == 0); // TODO: Check if we have a minion turned or not
Register("Reave");
Register("Cleave", ret => NumberOfMobsNear(LokiPoe.Me, 15, 2));
Register("Glacial Hammer", ret => NumberOfMobsNear(BestTarget, 12, 2));
Register("Ground Slam", ret => NumberOfMobsNear(BestTarget, 20, 1));
Register("Heavy Strike");
Register("Infernal Blow");
Register("Lightning Strike");
Register("Shield Charge");
Register("Double Strike");
Register("Dual Strike");
Register("Elemental Hit");
Register("Flicker Strike");
Register("Whirling Blades");
Register("Cyclone");
// Fall back to AOE-based attacks, if it's all we have
Register("Cyclone");
// And fall back to the default if we can...
Register("Cyclone");
}
}