#region using System; using System.Linq; using LeagueSharp; using LeagueSharp.Common; using SharpDX; using Color = System.Drawing.Color; #endregion namespace Marksman.Champions { internal class Urgot : Champion { private const string vSpace = " "; public static Spell Q, QEx, W, E, R; public Urgot() { Utils.Utils.PrintMessage("Urgot loaded."); Q = new Spell(SpellSlot.Q, 1000); QEx = new Spell(SpellSlot.Q, 1200); W = new Spell(SpellSlot.W); E = new Spell(SpellSlot.E, 900); R = new Spell(SpellSlot.R, 700); Q.SetSkillshot(0.10f, 100f, 1600f, true, SkillshotType.SkillshotLine); QEx.SetSkillshot(0.10f, 60f, 1600f, false, SkillshotType.SkillshotLine); E.SetSkillshot(0.25f, 120f, 1500f, false, SkillshotType.SkillshotCircle); R.SetTargetted(1f, 100f); } public static int UnderTurretEnemyMinion { get { return ObjectManager.Get().Count(xMinion => xMinion.IsEnemy && UnderAllyTurret(xMinion)); } } private static Obj_AI_Hero getInfectedEnemy { get { return (from enemy in ObjectManager.Get() .Where( enemy => enemy.IsEnemy && ObjectManager.Player.Distance(enemy) <= QEx.Range && enemy.HasBuff("urgotcorrosivedebuff", true)) select enemy).FirstOrDefault(); } } public void AntiGapcloser_OnEnemyGapcloser(ActiveGapcloser gapcloser) { if (W.IsReady() && gapcloser.Sender.IsValidTarget(250f)) W.Cast(); } public static bool UnderAllyTurret(Obj_AI_Base unit) { return ObjectManager.Get().Where(turret => { if (turret == null || !turret.IsValid || turret.Health <= 0f) { return false; } if (!turret.IsEnemy) { return true; } return false; }) .Any( turret => Vector2.Distance(unit.Position.To2D(), turret.Position.To2D()) < 900f && turret.IsAlly); } public static bool TeleportTurret(Obj_AI_Hero vTarget) { return ObjectManager.Get() .Any(player => !player.IsDead && player.IsMe && UnderAllyTurret(ObjectManager.Player)); } public override void Drawing_OnDraw(EventArgs args) { Spell[] spellList = {Q, E, R}; 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 drawQEx = GetValue("DrawQEx"); if (drawQEx.Active) { if (getInfectedEnemy != null) { Render.Circle.DrawCircle(ObjectManager.Player.Position, QEx.Range, Color.GreenYellow); Render.Circle.DrawCircle(getInfectedEnemy.Position, 125f, Color.GreenYellow); } } } private static void UseSpells(bool useQ, bool useW, bool useE) { Obj_AI_Hero t; if (W.IsReady() && useW) { t = TargetSelector.GetTarget(ObjectManager.Player.AttackRange - 30, TargetSelector.DamageType.Physical); if (t != null) W.Cast(); } } private static void UltUnderTurret() { ObjectManager.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPos); Drawing.DrawText(Drawing.Width*0.41f, Drawing.Height*0.80f, Color.GreenYellow, "Teleport enemy to under ally turret active!"); if (R.IsReady() && Program.CClass.GetValue("UseRC")) { var t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Physical); if (t != null && UnderAllyTurret(ObjectManager.Player) && !UnderAllyTurret(t) && ObjectManager.Player.Distance(t) > 200) { R.CastOnUnit(t); } } UseSpells(Program.CClass.GetValue("UseQC"), Program.CClass.GetValue("UseWC"), Program.CClass.GetValue("UseEC")); } private static void UltInMyTeam() { ObjectManager.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPos); Drawing.DrawText(Drawing.Width*0.42f, Drawing.Height*0.80f, Color.GreenYellow, "Teleport enemy to my team active!"); var t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Physical); if (R.IsReady() && t != null) { var Ally = ObjectManager.Get() .Where( ally => ally.IsAlly && !ally.IsDead && ObjectManager.Player.Distance(ally) <= R.Range && t.Distance(ally) > t.Distance(ObjectManager.Player)); if (Ally.Count() >= Program.CClass.GetValue("UltOp2Count").Value) R.CastOnUnit(t); } UseSpells(Program.CClass.GetValue("UseQC"), Program.CClass.GetValue("UseWC"), Program.CClass.GetValue("UseEC")); } private static void CastQ(Obj_AI_Hero t) { var Qpredict = Q.GetPrediction(t); var hithere = Qpredict.CastPosition.Extend(ObjectManager.Player.Position, -20); if (Qpredict.Hitchance >= HitChance.High) { if (W.IsReady()) W.Cast(); Q.Cast(hithere); } } public override void Game_OnGameUpdate(EventArgs args) { if (R.Level > 0) R.Range = 150*R.Level + 400; if (GetValue("UltOp1").Active) { UltUnderTurret(); } if (GetValue("UltOp2").Active) { UltInMyTeam(); } if (!ComboActive) { var t = TargetSelector.GetTarget(QEx.Range, TargetSelector.DamageType.Physical); if (!t.IsValidTarget()) return; if (HarassActive && GetValue("UseQH")) CastQ(t); if (GetValue("UseQTH").Active) CastQ(t); } if (ComboActive) { var t = TargetSelector.GetTarget(QEx.Range, TargetSelector.DamageType.Physical); if (E.IsReady() && GetValue("UseEC")) { if (t.IsValidTarget(E.Range)) { E.CastIfHitchanceEquals(t, HitChance.Medium); } } if (Q.IsReady() && GetValue("UseQC")) { if (getInfectedEnemy != null) { if (W.IsReady()) W.Cast(); QEx.Cast(getInfectedEnemy); } else { if (t.IsValidTarget(Q.Range)) CastQ(t); } } } 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 bool ComboMenu(Menu config) { config.AddItem(new MenuItem("UseQC" + Id, "Use Q").SetValue(true)); config.AddItem(new MenuItem("UseWC" + Id, "Use W").SetValue(true)); config.AddItem(new MenuItem("UseEC" + Id, "Use E").SetValue(true)); config.AddItem(new MenuItem("UseRC" + Id, "Use R").SetValue(true)); config.AddItem(new MenuItem("UltOpt1", "Ult Option 1")); config.AddItem( new MenuItem("UltOp1" + Id, vSpace + "Teleport Ally Turrent").SetValue(new KeyBind( "T".ToCharArray()[0], KeyBindType.Press))); config.AddItem(new MenuItem("UltOpt2", "Ult Option 2")); config.AddItem( new MenuItem("UltOp2" + Id, vSpace + "Teleport My Team").SetValue(new KeyBind("G".ToCharArray()[0], KeyBindType.Press))); config.AddItem(new MenuItem("UltOp2Count" + Id, vSpace + "Min. Ally Count").SetValue(new Slider(1, 1, 5))); config.AddSubMenu(new Menu("Don't Use Ult on", "DontUlt")); foreach ( var enemy in ObjectManager.Get().Where(enemy => enemy.Team != ObjectManager.Player.Team)) { config.SubMenu("DontUlt") .AddItem( new MenuItem(string.Format("DontUlt{0}", enemy.CharData.BaseSkinName), enemy.CharData.BaseSkinName).SetValue(false)); } return true; } public override bool HarassMenu(Menu config) { config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true)); config.AddItem( new MenuItem("UseQTH" + Id, "Use Q (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0], KeyBindType.Toggle))); return true; } public override bool DrawingMenu(Menu config) { config.AddItem(new MenuItem("DrawQ" + Id, "Q range").SetValue(new Circle(true, Color.LightGray))); config.AddItem(new MenuItem("DrawE" + Id, "E range").SetValue(new Circle(false, Color.LightGray))); config.AddItem(new MenuItem("DrawR" + Id, "R range").SetValue(new Circle(false, Color.LightGray))); config.AddItem(new MenuItem("DrawQEx" + Id, "Corrosive Charge").SetValue(new Circle(true, Color.LightGray))); return true; } public override bool MiscMenu(Menu config) { return true; } public override bool LaneClearMenu(Menu config) { config.AddItem(new MenuItem("UseQL" + Id, "Use Q").SetValue(true)); return true; } } }