public static IEnumerable <Obj_AI_Base> GetCollision(float spellwidth, BaseUltSpell spell)
 {
     return((from unit in EntityManager.Heroes.Enemies.Where(h => Player.Instance.Distance(h) < 2000)
             let pred =
                 Prediction.Position.PredictLinearMissile(
                     unit,
                     2000,
                     (int)spell.Radius,
                     (int)spell.Delay,
                     spell.Speed,
                     -1)
                 let endpos = Player.Instance.ServerPosition.Extend(GetFountainPos(), 2000)
                              let projectOn = pred.UnitPosition.To2D().ProjectOn(Player.Instance.ServerPosition.To2D(), endpos)
                                              where projectOn.SegmentPoint.Distance(endpos) < spellwidth + unit.BoundingRadius
                                              select unit).Cast <Obj_AI_Base>().ToList());
 }
        public static double GetBaseUltSpellDamage(BaseUltSpell spell, AIHeroClient target)
        {
            var level = Player.Instance.Spellbook.GetSpell(spell.Slot).Level - 1;

            switch (spell.Name)
            {
            case "Ashe":
            {
                var damage = new float[] { 250, 425, 600 }[level] +1 * Player.Instance.FlatMagicDamageMod;
                return(Player.Instance.CalculateDamageOnUnit(target, DamageType.Magical, damage));
            }

            case "Draven":
            {
                var damage = new float[] { 175, 275, 375 }[level] +1.1f * Player.Instance.FlatPhysicalDamageMod;
                return(Player.Instance.CalculateDamageOnUnit(target, DamageType.Physical, damage) * 0.7);
            }

            case "Ezreal":
            {
                var damage = new float[] { 350, 500, 650 }[level] +0.9f * Player.Instance.FlatMagicDamageMod
                + 1 * Player.Instance.FlatPhysicalDamageMod;
                return(Player.Instance.CalculateDamageOnUnit(target, DamageType.Magical, damage) * 0.7);
            }

            case "Jinx":
            {
                var damage = new float[] { 250, 350, 450 }[level]
                +new float[] { 25, 30, 35 }[level] / 100 * (target.MaxHealth - target.Health)
                + 1 * Player.Instance.FlatPhysicalDamageMod;

                /*Chat.Print("Flat Damage: " + new float[] { 250, 350, 450 }[level]);
                 * Chat.Print("Bonus Damage: " + new float[] { 25, 30, 35 }[level] / 100 * (target.MaxHealth - target.Health));
                 * Chat.Print("Damage On Unit: " + Player.Instance.CalculateDamageOnUnit(target, DamageType.Physical, damage));
                 * Chat.Print("Unit Health: " + target.Health);*/
                return(Player.Instance.CalculateDamageOnUnit(target, DamageType.Physical, damage));
            }
            }

            return(0);
        }