Example #1
0
        public Lucian()
        {
            Q = new Spell(SpellSlot.Q, 700);
            Q2 = new Spell(SpellSlot.Q, 1150).SetSkillshot(
                0.35f,
                65,
                float.MaxValue,
                false,
                SkillshotType.SkillshotLine);
            W = new Spell(SpellSlot.W, 1000).SetSkillshot(0.35f, 55, 1700, true, SkillshotType.SkillshotLine);
            E = new Spell(SpellSlot.E, 475);
            R = new Spell(SpellSlot.R, 1400).SetSkillshot(0.1f, 110, 2700, true, SkillshotType.SkillshotLine);
            Q.DamageType = Q2.DamageType = E.DamageType = R.DamageType = DamageType.Physical;
            W.DamageType = DamageType.Magical;
            Q2.MinHitChance = W.MinHitChance = R.MinHitChance = HitChance.High;

            Game.OnUpdate += OnUpdate;
            Obj_AI_Base.OnBuffAdd += (sender, args) =>
                {
                    if (!sender.IsMe || !args.Buff.Caster.IsMe)
                    {
                        return;
                    }
                    if (args.Buff.DisplayName == "LucianR")
                    {
                        haveR = true;
                    }
                };
            Obj_AI_Base.OnBuffRemove += (sender, args) =>
                {
                    if (!sender.IsMe || !args.Buff.Caster.IsMe)
                    {
                        return;
                    }
                    if (args.Buff.DisplayName == "LucianR")
                    {
                        haveR = false;
                    }
                };
            Obj_AI_Base.OnDoCast += (sender, args) =>
                {
                    if (!sender.IsMe || (args.Slot != SpellSlot.Q && args.Slot != SpellSlot.W))
                    {
                        return;
                    }
                    //Variables.Orbwalker.ResetSwingTimer();
                };
            Variables.Orbwalker.OnAction += (sender, args) =>
                {
                    if (args.Type != OrbwalkingType.AfterAttack
                        || Variables.Orbwalker.GetActiveMode() != OrbwalkingMode.Combo)
                    {
                        return;
                    }
                    var target = args.Target as Obj_AI_Hero;
                    if (target == null)
                    {
                        return;
                    }
                    if (E.IsReady())
                    {
                        const float Angle = 65 * ((float)Math.PI / 180);
                        var posTemp = Vector3.Subtract(target.ServerPosition, Player.ServerPosition).ToVector2();
                        var posDash =
                            Vector2.Add(
                                new Vector2(
                                    (float)(posTemp.X * Math.Cos(Angle) - posTemp.Y * Math.Sin(Angle)) / 4,
                                    (float)(posTemp.X * Math.Sin(Angle) + posTemp.Y * Math.Cos(Angle)) / 4),
                                Player.ServerPosition.ToVector2());
                        E.Cast(posDash);
                    }
                    else
                    {
                        if (Q.IsReady())
                        {
                            Q.CastOnUnit(target);
                        }
                        else if (W.IsReady())
                        {
                            W.Cast(target.ServerPosition);
                        }
                    }
                };
        }
Example #2
0
        public static void SmartCast(this LeagueSharp.SDK.Spell spell, Obj_AI_Base target = null, HitChance hitchance = HitChance.Medium,
                                     int minimunHits = 0)
        {
            if (target == null)
            {
                return;
            }
            if (!spell.CanCast(target))
            {
                return;
            }

            if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo) || Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Harass))
            {
                if (spell.IsSkillshot)
                {
                    if (spell.Collision)
                    {
                        if (Me.CountEnemyHeroesInRange(spell.Range) <= (minimunHits == 0 ? 2 : minimunHits))
                        {
                            spell.CastOnBestTarget(0f, true);
                            return;
                        }

                        if (Me.CountEnemyHeroesInRange(spell.Range) >= (minimunHits == 0 ? 2 : minimunHits))
                        {
                            spell.CastOnBestTarget(0f, true, 1);
                            return;
                        }
                    }
                    else
                    {
                        spell.CastIfHitchanceMinimum(target, hitchance);
                        return;
                    }
                }
                else
                {
                    spell.CastOnUnit(target);
                    return;
                }
            }

            if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.LaneClear) || Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.JungleClear))
            {
                if (spell.Collision)
                {
                    spell.CastIfHitchanceMinimum(target, HitChance.Low);
                    return;
                }
                else
                {
                    var minions =
                        GameObjects.EnemyMinions.Where(m => m.LSIsValidTarget())
                        .OrderBy(m => m.Distance(target))
                        .ThenBy(m => m.Health)
                        .ToList();

                    if (minions != null)
                    {
                        switch (spell.Type)
                        {
                        case SkillshotType.SkillshotLine:
                            var posLine = spell.GetLineFarmLocation(minions);
                            if (posLine.MinionsHit >= (minimunHits == 0 ? 1 : minimunHits))
                            {
                                spell.Cast(posLine.Position);
                                return;
                            }
                            break;

                        case SkillshotType.SkillshotCircle:
                            var posCircle = spell.GetCircularFarmLocation(minions);
                            if (posCircle.MinionsHit >= (minimunHits == 0 ? 1 : minimunHits))
                            {
                                spell.Cast(posCircle.Position);
                                return;
                            }
                            break;

                        case SkillshotType.SkillshotCone:
                            var posCone = spell.GetLineFarmLocation(minions, spell.Width);
                            if (posCone.MinionsHit >= (minimunHits == 0 ? 1 : minimunHits))
                            {
                                spell.Cast(posCone.Position);
                                return;
                            }
                            break;
                        }
                    }
                    spell.CastIfHitchanceMinimum(target, HitChance.Medium);
                }
            }
            else
            {
                spell.CastOnUnit(target);
            }

            if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.LastHit))
            {
                if (spell.IsSkillshot)
                {
                    spell.CastIfHitchanceMinimum(target, HitChance.Low);
                    return;
                }
                spell.CastOnUnit(target);
            }
        }