public override bool Trigger(Character target, float distSqr) { int topDamage = -1; ActiveSkill topSkill = null; // forced skill name to use if (skill != null) { foreach (Skill skk in skills) { ActiveSkill sk = (ActiveSkill)skk; if (sk.GetName().Equals(skill, StringComparison.InvariantCultureIgnoreCase)) { if (sk.CanUse() && RangeCheck(sk, distSqr)) { topSkill = sk; } break; } } } // 1. get the most damage skill and cast if it is available else { foreach (Skill skk in skills) { ActiveSkill sk = (ActiveSkill)skk; if (sk.CanUse() && RangeCheck(sk, distSqr) && sk.GetTotalDamageOutput() > topDamage) { topDamage = sk.GetTotalDamageOutput(); topSkill = sk; } } } if (topSkill != null) { bool rangeCheck = true; // range check is already perfomed by this AI if (onlyIfWithinRange) { rangeCheck = false; } ai.StartAction(ai.CastSkill(target, topSkill, distSqr, !rangeCheck, true, boostShootRange), topSkill.GetSkillActiveDuration() * 2, false, shootWhileMoving); return(true); } return(false); }