Beispiel #1
0
        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);
        }