#region using System; using System.Drawing; using System.Linq; using DetuksSharp; using LeagueSharp; using LeagueSharp.Common; using SharpDX; #endregion namespace Marksman.Champions { internal class Vayne : Champion { public static Spell Q; public static Spell E; public Vayne() { Q = new Spell(SpellSlot.Q, 300f); E = new Spell(SpellSlot.E, 650f); E.SetTargetted(0.25f, 2200f); AntiGapcloser.OnEnemyGapcloser += AntiGapcloser_OnEnemyGapcloser; Interrupter2.OnInterruptableTarget += Interrupter2_OnInterruptableTarget; Utils.Utils.PrintMessage("Vayne loaded"); } public void AntiGapcloser_OnEnemyGapcloser(ActiveGapcloser gapcloser) { if (GetValue("UseEGapcloser") && E.IsReady() && gapcloser.Sender.IsValidTarget(E.Range)) E.CastOnUnit(gapcloser.Sender); } private void Interrupter2_OnInterruptableTarget(Obj_AI_Hero unit, Interrupter2.InterruptableTargetEventArgs args) { if (GetValue("UseEInterrupt") && unit.IsValidTarget(550f)) E.Cast(unit); } public override void Game_OnGameUpdate(EventArgs args) { if ((!ComboActive && !HarassActive) || !DeathWalker.canMove()) { if (GetValue("FocusW")) { var silverBuffMarkedEnemy = VayneData.GetSilverBuffMarkedEnemy; if (silverBuffMarkedEnemy != null) { TargetSelector.SetTarget(silverBuffMarkedEnemy); } else { var attackRange = DeathWalker.getRealAutoAttackRange(ObjectManager.Player); TargetSelector.SetTarget( TargetSelector.GetTarget(attackRange, TargetSelector.DamageType.Physical)); } } var useE = GetValue("UseE" + (ComboActive ? "C" : "H")); if (Q.IsReady() && GetValue("CompleteSilverBuff")) { if (VayneData.GetSilverBuffMarkedEnemy != null && VayneData.GetSilverBuffMarkedCount == 2) { Q.Cast(Game.CursorPos); } } if (E.IsReady() && useE) { var t = TargetSelector.GetTarget(E.Range + Q.Range, TargetSelector.DamageType.Physical); if(t != null) for (var i = 1; i < 8; i++) { var targetBehind = t.Position + Vector3.Normalize(t.ServerPosition - ObjectManager.Player.Position) * i * 50; if (targetBehind.IsWall() && t.IsValidTarget(E.Range)) { E.CastOnUnit(t); return; } } /* foreach (var hero in from hero in ObjectManager.Get().Where(hero => hero.IsValidTarget(550f)) let prediction = E.GetPrediction(hero) where NavMesh.GetCollisionFlags( prediction.UnitPosition.To2D() .Extend( ObjectManager.Player.ServerPosition.To2D(), -GetValue("PushDistance").Value) .To3D()).HasFlag(CollisionFlags.Wall) || NavMesh.GetCollisionFlags( prediction.UnitPosition.To2D() .Extend( ObjectManager.Player.ServerPosition.To2D(), -(GetValue("PushDistance").Value/2)) .To3D()).HasFlag(CollisionFlags.Wall) select hero) { E.Cast(hero); } */ } } 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))) Q.Cast(minions); } } } public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target) { var useQ = GetValue( "UseQ" + (ComboActive ? DeathWalker.CurrentMode == DeathWalker.Mode.Combo ? "C" : "" : DeathWalker.CurrentMode == DeathWalker.Mode.LaneClear ? "H" : "")); if (unit.IsMe && useQ) Q.Cast(Game.CursorPos); } public override bool ComboMenu(Menu config) { config.AddItem(new MenuItem("UseQC" + Id, "Use Q").SetValue(true)); config.AddItem(new MenuItem("UseEC" + Id, "Use E").SetValue(true)); config.AddItem(new MenuItem("FocusW" + Id, "Force Focus Marked Enemy").SetValue(true)); return true; } public override bool HarassMenu(Menu config) { config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true)); config.AddItem(new MenuItem("UseEH" + Id, "Use E").SetValue(true)); return true; } public override bool MiscMenu(Menu config) { config.AddItem( new MenuItem("UseET" + Id, "Use E (Toggle)").SetValue(new KeyBind("T".ToCharArray()[0], KeyBindType.Toggle))); config.AddItem(new MenuItem("UseEInterrupt" + Id, "Use E To Interrupt").SetValue(true)); config.AddItem(new MenuItem("UseEGapcloser" + Id, "Use E To Gapcloser").SetValue(true)); config.AddItem(new MenuItem("PushDistance" + Id, "E Push Distance").SetValue(new Slider(425, 475, 300))); config.AddItem(new MenuItem("CompleteSilverBuff" + Id, "Complete Silver Buff With Q").SetValue(true)); 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; } public override bool DrawingMenu(Menu config) { config.AddItem( new MenuItem("DrawE" + Id, "E range").SetValue( new Circle(true, System.Drawing.Color.FromArgb(100, 255, 0, 255)))); return true; } public override void Drawing_OnDraw(EventArgs args) { var menuItem = GetValue("DrawE"); if (menuItem.Active) { Render.Circle.DrawCircle(ObjectManager.Player.Position, E.Range, menuItem.Color, 1); } } public class VayneData { public static int GetSilverBuffMarkedCount { get { if (GetSilverBuffMarkedEnemy == null) return 0; return GetSilverBuffMarkedEnemy.Buffs.Where(buff => buff.Name == "vaynesilvereddebuff") .Select(xBuff => xBuff.Count) .FirstOrDefault(); } } public static Obj_AI_Hero GetSilverBuffMarkedEnemy { get { return ObjectManager.Get() .Where( enemy => !enemy.IsDead && enemy.IsValidTarget( (Q.IsReady() ? Q.Range : 0) + DeathWalker.getRealAutoAttackRange(ObjectManager.Player))) .FirstOrDefault( enemy => enemy.Buffs.Any(buff => buff.Name == "vaynesilvereddebuff" && buff.Count > 0)); } } } } }