public Zed() { Q = new SpellBase(SpellSlot.Q, SpellType.Linear, 925) { CastDelay = 250, Speed = 1700, Width = 50 }; Q.SetSourceFunction(() => MyHero); Q.SetRangeCheckSourceFunction(() => MyHero); W = new SpellBase(SpellSlot.W, SpellType.Linear, WRange) { Speed = 1750, Width = 60 }; E = new SpellBase(SpellSlot.E, SpellType.Self, 280); E.SetSourceFunction(() => MyHero); E.SetRangeCheckSourceFunction(() => MyHero); R = new SpellBase(SpellSlot.R, SpellType.Targeted, 625); IsDeadText = new Text("", new Font("Arial", 30F, FontStyle.Bold)) { Color = Color.Red, Position = new Vector2(100, 50) }; Obj_AI_Base.OnBuffGain += delegate(Obj_AI_Base sender, Obj_AI_BaseBuffGainEventArgs args) { var minion = sender as Obj_AI_Minion; if (minion != null && minion.IsAlly && minion.BaseSkinName == ShadowSkinName && args.Buff.Caster.IsMe) { switch (args.Buff.Name) { case "zedwshadowbuff": WShadow = minion; break; case "zedrshadowbuff": RShadow = minion; break; } } }; Obj_AI_Base.OnPlayAnimation += delegate(Obj_AI_Base sender, GameObjectPlayAnimationEventArgs args) { var minion = sender as Obj_AI_Minion; if (minion != null && minion.IsAlly && minion.BaseSkinName == ShadowSkinName) { if (args.Animation == "Death") { if (WShadow.IdEquals(minion)) { WShadow = null; } else if (RShadow.IdEquals(minion)) { RShadow = null; } } } }; GameObject.OnCreate += delegate(GameObject sender, EventArgs args) { if (sender.Name == IsDeadName && RTarget != null && RTarget.IsInRange(sender, 200)) { IsDeadObject = sender; } }; GameObject.OnDelete += delegate(GameObject sender, EventArgs args) { var minion = sender as Obj_AI_Minion; if (minion != null && minion.IsAlly && minion.BaseSkinName == ShadowSkinName) { if (WShadow.IdEquals(minion)) { WShadow = null; } else if (RShadow.IdEquals(minion)) { RShadow = null; } } else if (sender.IdEquals(IsDeadObject)) { IsDeadObject = null; } }; Obj_AI_Base.OnProcessSpellCast += delegate(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (sender.IsMe) { switch (args.Slot) { case SpellSlot.W: if (args.SData.Name == "ZedW") { W.LastCastTime = Core.GameTickCount; W.LastEndPosition = args.End; } break; case SpellSlot.R: if (args.SData.Name == "ZedR") { MarkedDamageReceived = 0; EnemyWillDie = false; } break; } } }; Evader.OnEvader += delegate(EvaderArgs args) { var w1Distance = W.IsReady && IsW1 && EvaderMenu.CheckBox("Evader.W1") ? MyHero.GetDistanceSqr(args.Sender) : 16000000; var w2Distance = W.IsReady && WShadowIsValid && EvaderMenu.CheckBox("Evader.W2") && !args.WillHitMyHero(WShadow.Position) ? WShadow.GetDistanceSqr(args.Sender) : 16000000; var rTarget = TargetSelector.GetTarget(R.Range, DamageType.Physical) ?? args.Sender; var r1Distance = R.IsReady && IsR1 && rTarget != null && R.InRange(rTarget) && EvaderMenu.CheckBox("Evader.R1") ? MyHero.GetDistanceSqr(args.Sender) : 16000000; var r2Distance = R.IsReady && RShadowIsValid && EvaderMenu.CheckBox("Evader.R2") && !args.WillHitMyHero(RShadow.Position) ? RShadow.GetDistanceSqr(args.Sender) : 16000000; var min = Math.Min(w1Distance, Math.Min(w2Distance, Math.Min(r1Distance, r2Distance))); if (min < 16000000) { if (Math.Abs(min - r2Distance) < float.Epsilon) { R.Cast(); } else if (Math.Abs(min - r1Distance) < float.Epsilon) { R.Cast(rTarget); } else if (Math.Abs(min - w2Distance) < float.Epsilon) { W.Cast(); } else if (Math.Abs(min - w1Distance) < float.Epsilon) { var wPos = MyHero.ServerPosition + ((args.Sender.ServerPosition - MyHero.ServerPosition).Normalized() * WRange) .To2D() .Perpendicular() .To3DWorld(); W.Cast(wPos); } } }; AttackableUnit.OnDamage += delegate(AttackableUnit sender, AttackableUnitDamageEventArgs args) { if (args.Source.IsMe) { var hero = args.Target as AIHeroClient; if (hero != null && TargetHaveR(hero)) { MarkedDamageReceived += args.Damage; } } }; MenuManager.AddSubMenu("Keys"); { Orbwalker.RegisterKeyBind( KeysMenu.AddValue("Combo2", new KeyBind("Combo without R", false, KeyBind.BindTypes.HoldActive, 'A')), Orbwalker.ActiveModes.Combo); Orbwalker.RegisterKeyBind( KeysMenu.AddValue("Harass2", new KeyBind("Harass WEQ", false, KeyBind.BindTypes.HoldActive, 'S')), Orbwalker.ActiveModes.Harass); } Q.AddConfigurableHitChancePercent(); MenuManager.AddSubMenu("Combo"); { ComboMenu.AddStringList("Mode", "R Combo Mode", new[] { "Line", "Triangle", "MousePos" }); ComboMenu.AddValue("Q", new CheckBox("Use Q")); ComboMenu.AddValue("W", new CheckBox("Use W")); ComboMenu.AddValue("E", new CheckBox("Use E")); ComboMenu.AddValue("R", new CheckBox("Use R")); ComboMenu.AddValue("Items", new CheckBox("Use offensive items")); ComboMenu.AddValue("SwapDead", new CheckBox("Use W2/R2 if target will die")); ComboMenu.AddValue("SwapGapclose", new CheckBox("Use W2/R2 to get close to target")); ComboMenu.AddValue("SwapHP", new Slider("Use W2/R2 if my % of health is less than {0}", 15)); ComboMenu.AddValue("Prevent", new CheckBox("Don't use spells before R")); if (EntityManager.Heroes.Enemies.Count > 0) { ComboMenu.AddValue("BlackList.R", new GroupLabel("Don't use R on:")); var enemiesAdded = new HashSet <string>(); foreach (var enemy in EntityManager.Heroes.Enemies) { if (!enemiesAdded.Contains(enemy.ChampionName)) { ComboMenu.AddValue("BlackList." + enemy.ChampionName, new CheckBox(enemy.ChampionName, false)); enemiesAdded.Add(enemy.ChampionName); } } } } MenuManager.AddSubMenu("Harass"); { HarassMenu.AddValue("Collision", new CheckBox("Check collision when casting Q (more damage)", false)); HarassMenu.AddValue("WE", new CheckBox("Only harass when combo WE will hit", false)); HarassMenu.AddValue("SwapGapclose", new CheckBox("Use W2 if target is killable")); HarassMenu.AddValue("ManaPercent", new Slider("Minimum Mana Percent", 20)); } MenuManager.AddSubMenu("Clear"); { ClearMenu.AddValue("LaneClear", new GroupLabel("LaneClear")); { ClearMenu.AddValue("LaneClear.Q", new Slider("Use Q if hit is greater than {0}", 3, 0, 10)); ClearMenu.AddValue("LaneClear.W", new Slider("Use W if hit is greater than {0}", 4, 0, 10)); ClearMenu.AddValue("LaneClear.E", new Slider("Use E if hit is greater than {0}", 3, 0, 10)); ClearMenu.AddValue("LaneClear.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("LastHit", new GroupLabel("LastHit")); { ClearMenu.AddStringList("LastHit.Q", "Use Q", new[] { "Never", "Smartly", "Always" }, 1); ClearMenu.AddStringList("LastHit.E", "Use E", new[] { "Never", "Smartly", "Always" }, 1); ClearMenu.AddValue("LastHit.ManaPercent", new Slider("Minimum Mana Percent", 50)); } ClearMenu.AddValue("JungleClear", new GroupLabel("JungleClear")); { ClearMenu.AddValue("JungleClear.Q", new CheckBox("Use Q")); ClearMenu.AddValue("JungleClear.W", new CheckBox("Use W")); ClearMenu.AddValue("JungleClear.E", new CheckBox("Use E")); ClearMenu.AddValue("JungleClear.ManaPercent", new Slider("Minimum Mana Percent", 20)); } } MenuManager.AddKillStealMenu(); { KillStealMenu.AddValue("Q", new CheckBox("Use Q")); KillStealMenu.AddValue("W", new CheckBox("Use W")); KillStealMenu.AddValue("E", new CheckBox("Use E")); } MenuManager.AddSubMenu("Automatic"); { AutomaticMenu.AddValue("E", new CheckBox("Use E", false)); AutomaticMenu.AddValue("SwapDead", new CheckBox("Use W2/R2 if target will die", false)); } MenuManager.AddSubMenu("Evader"); { EvaderMenu.AddValue("Evader.W1", new CheckBox("Use W1", false)); EvaderMenu.AddValue("Evader.W2", new CheckBox("Use W2")); EvaderMenu.AddValue("Evader.R1", new CheckBox("Use R1")); EvaderMenu.AddValue("Evader.R2", new CheckBox("Use R2")); } Evader.Initialize(); Evader.AddCrowdControlSpells(); Evader.AddDangerousSpells(); MenuManager.AddDrawingsMenu(); { Q.AddDrawings(); W.AddDrawings(); E.AddDrawings(false); R.AddDrawings(); CircleManager.Circles.Add(new Circle( DrawingsMenu.AddValue("W.Shadow", new CheckBox("Draw W shadow circle")), SharpDX.Color.Blue, () => 100, () => WShadowIsValid, () => WShadow) { Width = 1 }); CircleManager.Circles.Add(new Circle( DrawingsMenu.AddValue("R.Shadow", new CheckBox("Draw R shadow circle")), SharpDX.Color.Orange, () => 100, () => RShadowIsValid, () => RShadow) { Width = 1 }); DrawingsMenu.AddValue("IsDead", new CheckBox("Draw text if target will die")); DrawingsMenu.AddValue("Passive", new CheckBox("Draw text when passive is available")); } }