#region using System; using System.Drawing; using System.Linq; using DetuksSharp; using LeagueSharp; using LeagueSharp.Common; using SharpDX.Direct3D9; using Font = SharpDX.Direct3D9.Font; #endregion namespace Marksman.Champions { internal class Ezreal : Champion { public static Spell Q; public static Spell E; public static Spell W; public static Spell R; public Ezreal() { Q = new Spell(SpellSlot.Q, 1190); Q.SetSkillshot(0.25f, 60f, 2000f, true, SkillshotType.SkillshotLine); W = new Spell(SpellSlot.W, 800); W.SetSkillshot(0.25f, 80f, 1600f, false, SkillshotType.SkillshotLine); E = new Spell(SpellSlot.E); R = new Spell(SpellSlot.R, 2500); R.SetSkillshot(1f, 160f, 2000f, false, SkillshotType.SkillshotLine); Utility.HpBarDamageIndicator.DamageToUnit = GetComboDamage; Utility.HpBarDamageIndicator.Enabled = true; Utils.Utils.PrintMessage("Ezreal loaded."); } public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target) { /* var t = target as Obj_AI_Hero; if (t != null && (ComboActive || HarassActive) && unit.IsMe) { var useQ = GetValue("UseQ" + (ComboActive ? "C" : "H")); var useW = GetValue("UseW" + (ComboActive ? "C" : "H")); if (Q.IsReady() && useQ) { CastQ(); } else if (W.IsReady() && useW) { W.Cast(t); } } */ } private static void CastQ() { var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (t.IsValidTarget() && Q.IsReady() && ObjectManager.Player.Distance(t.ServerPosition) <= Q.Range) { var Qpredict = Q.GetPrediction(t); var hithere = Qpredict.CastPosition.Extend(ObjectManager.Player.Position, -140); if (Qpredict.Hitchance >= HitChance.High) Q.Cast(hithere); } } public override void Drawing_OnDraw(EventArgs args) { Spell[] spellList = {Q, W}; foreach (var spell in spellList) { var menuItem = GetValue("Draw" + spell.Slot); if (menuItem.Active) Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color); } var drawRMin = Program.Config.SubMenu("Combo").Item("DrawRMin").GetValue(); if (drawRMin.Active) { var minRRange = Program.Config.SubMenu("Combo").Item("UseRCMinRange").GetValue().Value; Render.Circle.DrawCircle(ObjectManager.Player.Position, minRRange, drawRMin.Color, 2); } var drawRMax = Program.Config.SubMenu("Combo").Item("DrawRMax").GetValue(); if (drawRMax.Active) { var maxRRange = Program.Config.SubMenu("Combo").Item("UseRCMaxRange").GetValue().Value; Render.Circle.DrawCircle(ObjectManager.Player.Position, maxRRange, drawRMax.Color, 2); } } public override void Game_OnGameUpdate(EventArgs args) { if (LaneClearActive) { var useQ = GetValue("UseQL"); if (Q.IsReady() && useQ) { var vMinions = MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range); foreach (var minions in vMinions.Where( minions => minions.Health < ObjectManager.Player.GetSpellDamage(minions, SpellSlot.Q))) { var qP = Q.GetPrediction(minions); var hit = qP.CastPosition.Extend(ObjectManager.Player.Position, -140); if (qP.Hitchance >= HitChance.High) Q.Cast(hit); } } } Obj_AI_Hero t; if (Q.IsReady() && Program.Config.Item("UseQTH").GetValue().Active && ToggleActive) { if (ObjectManager.Player.HasBuff("Recall")) return; t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); var useQt = (Program.Config.Item("DontQToggleHarass" + t.ChampionName) != null && Program.Config.Item("DontQToggleHarass" + t.ChampionName).GetValue() == false); if (useQt) CastQ(); } if (W.IsReady() && Program.Config.Item("UseWTH").GetValue().Active && ToggleActive) { if (ObjectManager.Player.HasBuff("Recall")) return; t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical); var useWt = (Program.Config.Item("DontWToggleHarass" + t.ChampionName) != null && Program.Config.Item("DontWToggleHarass" + t.ChampionName).GetValue() == false); if (useWt) W.Cast(t); } if (ComboActive || HarassActive) { var useQ = GetValue("UseQ" + (ComboActive ? "C" : "H")); var useW = GetValue("UseW" + (ComboActive ? "C" : "H")); var useR = Program.Config.SubMenu("Combo").Item("UseRC").GetValue(); if (DeathWalker.canMove()) { if (Q.IsReady() && useQ) { t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (t != null) CastQ(); } if (W.IsReady() && useW) { t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical); if (t != null) W.Cast(t); } if (R.IsReady() && useR) { var minRRange = Program.Config.SubMenu("Combo").Item("UseRCMinRange").GetValue().Value; var maxRRange = Program.Config.SubMenu("Combo").Item("UseRCMaxRange").GetValue().Value; t = TargetSelector.GetTarget(maxRRange, TargetSelector.DamageType.Physical); if (Q.IsReady() && t.IsValidTarget(Q.Range) && Q.GetPrediction(t).CollisionObjects.Count == 0 && t.Health < ObjectManager.Player.GetSpellDamage(t, SpellSlot.Q)) return; if (t.IsValidTarget() && ObjectManager.Player.Distance(t) >= minRRange && t.Health <= ObjectManager.Player.GetSpellDamage(t, SpellSlot.R)) { R.Cast(t); } } } } if (R.IsReady() && GetValue("CastR").Active) { t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Physical); if (t.IsValidTarget()) R.Cast(t); } } private static float GetComboDamage(Obj_AI_Hero t) { var fComboDamage = 0f; if (Q.IsReady()) fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.Q); if (W.IsReady()) fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.W); if (E.IsReady()) fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.E); if (R.IsReady()) fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.R); if (ObjectManager.Player.GetSpellSlot("summonerdot") != SpellSlot.Unknown && ObjectManager.Player.Spellbook.CanUseSpell(ObjectManager.Player.GetSpellSlot("summonerdot")) == SpellState.Ready && ObjectManager.Player.Distance(t) < 550) fComboDamage += (float) ObjectManager.Player.GetSummonerSpellDamage(t, Damage.SummonerSpell.Ignite); if (Items.CanUseItem(3144) && ObjectManager.Player.Distance(t) < 550) fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Bilgewater); if (Items.CanUseItem(3153) && ObjectManager.Player.Distance(t) < 550) fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Botrk); return fComboDamage; } public override bool ComboMenu(Menu config) { config.AddItem(new MenuItem("UseQC" + Id, "Q").SetValue(true)); config.AddItem(new MenuItem("UseWC" + Id, "W").SetValue(true)); var xRMenu = new Menu("R", "ComboR"); { xRMenu.AddItem(new MenuItem("UseRC", "Use").SetValue(true)); xRMenu.AddItem(new MenuItem("UseRCMinRange", "Min. Range").SetValue(new Slider(200, 200, 1000))); xRMenu.AddItem(new MenuItem("UseRCMaxRange", "Max. Range").SetValue(new Slider(500, 500, 2000))); xRMenu.AddItem( new MenuItem("DrawRMin", "Draw Min. R Range").SetValue( new Circle(true, Color.DarkRed))); xRMenu.AddItem( new MenuItem("DrawRMax", "Draw Max. R Range").SetValue( new Circle(true, Color.DarkMagenta))); config.AddSubMenu(xRMenu); } return true; } public override bool HarassMenu(Menu config) { config.AddItem(new MenuItem("UseQH" + Id, "Q").SetValue(true)); config.AddItem(new MenuItem("UseWH" + Id, "W").SetValue(true)); config.AddSubMenu(new Menu("Don't Q Toggle to", "DontQToggleHarass")); config.AddSubMenu(new Menu("Don't W Toggle to", "DontWToggleHarass")); { foreach (var enemy in ObjectManager.Get().Where(enemy => enemy.Team != ObjectManager.Player.Team)) { config.SubMenu("DontQToggleHarass") .AddItem( new MenuItem("DontQToggleHarass" + enemy.ChampionName, enemy.ChampionName).SetValue(false)); config.SubMenu("DontWToggleHarass") .AddItem( new MenuItem("DontWToggleHarass" + enemy.ChampionName, enemy.ChampionName).SetValue(false)); } } config.AddItem( new MenuItem("UseQTH", "Q (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0], KeyBindType.Toggle))); config.AddItem( new MenuItem("UseWTH", "W (Toggle)").SetValue(new KeyBind("J".ToCharArray()[0], KeyBindType.Toggle))); //config.AddItem(new MenuItem("DrawHarassToggleStatus", "Draw Toggle Status").SetValue(true)); return true; } public override bool MiscMenu(Menu config) { config.AddItem( new MenuItem("CastR" + Id, "Cast R (2000 Range)").SetValue( new KeyBind("T".ToCharArray()[0], KeyBindType.Press))); return true; } public override bool DrawingMenu(Menu config) { config.AddItem( new MenuItem("DrawQ" + Id, "Q range").SetValue( new Circle(true, Color.FromArgb(100, 255, 0, 255)))); config.AddItem( new MenuItem("DrawW" + Id, "W range").SetValue( new Circle(false, Color.FromArgb(100, 255, 255, 255)))); var dmgAfterComboItem = new MenuItem("DamageAfterCombo", "Damage After Combo").SetValue(true); Config.AddItem(dmgAfterComboItem); return true; } public override bool ExtrasMenu(Menu config) { return true; } public override bool LaneClearMenu(Menu config) { config.AddItem(new MenuItem("UseQL" + Id, "Use Q").SetValue(true)); return true; } } }