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); } } }; }
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); } }