#region using System; using System.Drawing; using System.Linq; using DetuksSharp; using LeagueSharp; using LeagueSharp.Common; #endregion namespace Marksman.Champions { internal class Kogmaw : Champion { public Spell E; public static Spell Q; public Spell R; public int UltimateBuffStacks; public Spell W; public Kogmaw() { Utils.Utils.PrintMessage("KogMaw loaded."); Q = new Spell(SpellSlot.Q, 950f); W = new Spell(SpellSlot.W, float.MaxValue); E = new Spell(SpellSlot.E, 1260f); R = new Spell(SpellSlot.R, float.MaxValue); Q.SetSkillshot(0.25f, 70f, 1650f, true, SkillshotType.SkillshotLine); E.SetSkillshot(0.50f, 120f, 1400f, false, SkillshotType.SkillshotLine); R.SetSkillshot(1.2f, 120f, float.MaxValue, false, SkillshotType.SkillshotCircle); } public override void Drawing_OnDraw(EventArgs args) { Spell[] spellList = {Q, W, E, R}; foreach (var spell in spellList) { var menuItem = GetValue("Draw" + spell.Slot); if (menuItem.Active) Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Slot == SpellSlot.W ? DeathWalker.getRealAutoAttackRange(null) + 65 + W.Range : spell.Range, menuItem.Color); } } 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 Game_OnGameUpdate(EventArgs args) { UltimateBuffStacks = GetUltimateBuffStacks(); W.Range = 110 + 20*ObjectManager.Player.Spellbook.GetSpell(SpellSlot.W).Level; R.Range = 900 + 300*ObjectManager.Player.Spellbook.GetSpell(SpellSlot.R).Level; if (R.IsReady() && GetValue("UseRM")) foreach ( var hero in ObjectManager.Get() .Where( hero => hero.IsValidTarget(R.Range) && R.GetDamage(hero) > hero.Health)) R.Cast(hero, false, true); if ((!ComboActive && !HarassActive) || (!DeathWalker.canMove() && !(ObjectManager.Player.BaseAbilityDamage + ObjectManager.Player.FlatMagicDamageMod > 100))) return; var useQ = GetValue("UseQ" + (ComboActive ? "C" : "H")); var useW = GetValue("UseW" + (ComboActive ? "C" : "H")); var useE = GetValue("UseE" + (ComboActive ? "C" : "H")); var useR = GetValue("UseR" + (ComboActive ? "C" : "H")); var rLim = GetValue("Rlim" + (ComboActive ? "C" : "H")).Value; if (useW && W.IsReady()) foreach ( var hero in ObjectManager.Get() .Where(hero => hero.IsValidTarget(DeathWalker.getRealAutoAttackRange(hero) + W.Range))) W.CastOnUnit(ObjectManager.Player); if (useQ && Q.IsReady()) { var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Magical); if (t != null) CastQ(); //if (Q.Cast(t) == Spell.CastStates.SuccessfullyCasted) // return; } if (useE && E.IsReady()) { var t = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical); if (t != null) if (E.Cast(t, false, true) == Spell.CastStates.SuccessfullyCasted) return; } if (GetValue("UseRSC") && R.IsReady()) { var t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Magical); if (t.IsValidTarget() && (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) || t.HasBuffOfType(BuffType.Slow) || t.HasBuffOfType(BuffType.Fear) || t.HasBuffOfType(BuffType.Taunt))) { R.Cast(t, false, true); } } if (useR && R.IsReady() && UltimateBuffStacks < rLim) { var t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Magical); if (t != null) R.Cast(t, false, true); } } public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target) { if (target != null && (!ComboActive && !HarassActive) || !unit.IsMe || !(target is Obj_AI_Hero)) return; var t = target as Obj_AI_Hero; var useQ = GetValue("UseQ" + (ComboActive ? "C" : "H")); var useW = GetValue("UseW" + (ComboActive ? "C" : "H")); var useE = GetValue("UseE" + (ComboActive ? "C" : "H")); var useR = GetValue("UseR" + (ComboActive ? "C" : "H")); var rLim = GetValue("Rlim" + (ComboActive ? "C" : "H")).Value; if (useW && W.IsReady()) W.CastOnUnit(ObjectManager.Player); if (useQ && Q.IsReady()) if (Q.Cast(t) == Spell.CastStates.SuccessfullyCasted) return; if (useE && E.IsReady()) if (E.Cast(t, false, true) == Spell.CastStates.SuccessfullyCasted) return; if (useR && R.IsReady() && UltimateBuffStacks < rLim) R.Cast(t, false, true); } private static int GetUltimateBuffStacks() { return (from buff in ObjectManager.Player.Buffs where buff.DisplayName.ToLower() == "kogmawlivingartillery" select buff.Count).FirstOrDefault(); } 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("UseRSC" + Id, "Use R for Stunned Enemy").SetValue(true)); config.AddItem(new MenuItem("RlimC" + Id, "R Limiter").SetValue(new Slider(3, 5, 1))); return true; } public override bool HarassMenu(Menu config) { config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(false)); config.AddItem(new MenuItem("UseWH" + Id, "Use W").SetValue(false)); config.AddItem(new MenuItem("UseEH" + Id, "Use E").SetValue(false)); config.AddItem(new MenuItem("UseRH" + Id, "Use R").SetValue(true)); config.AddItem(new MenuItem("RlimH" + Id, "R Limiter").SetValue(new Slider(1, 5, 1))); 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(true, Color.FromArgb(100, 255, 0, 255)))); config.AddItem( new MenuItem("DrawE" + Id, "E range").SetValue(new Circle(false, Color.FromArgb(100, 255, 0, 255)))); config.AddItem( new MenuItem("DrawR" + Id, "R range").SetValue(new Circle(false, Color.FromArgb(100, 255, 0, 255)))); return true; } public override bool MiscMenu(Menu config) { config.AddItem(new MenuItem("UseRM" + Id, "Use R To Killsteal").SetValue(true)); return true; } public override bool ExtrasMenu(Menu config) { return true; } public override bool LaneClearMenu(Menu config) { return true; } } }