#region using System; using System.Drawing; using System.Linq; using DetuksSharp; using LeagueSharp; using LeagueSharp.Common; #endregion namespace Marksman.Champions { internal class Graves : Champion { public Spell Q; public Spell R; public Spell W; public Graves() { Q = new Spell(SpellSlot.Q, 900f); // Q likes to shoot a bit too far away, so moving the range inward. Q.SetSkillshot(0.26f, 10f*2*(float) Math.PI/180, 1950, false, SkillshotType.SkillshotCone); W = new Spell(SpellSlot.W, 1100f); W.SetSkillshot(0.30f, 250f, 1650f, false, SkillshotType.SkillshotCircle); R = new Spell(SpellSlot.R, 1100f); R.SetSkillshot(0.22f, 150f, 2100, true, SkillshotType.SkillshotLine); Utility.HpBarDamageIndicator.DamageToUnit = GetComboDamage; Utility.HpBarDamageIndicator.Enabled = true; Utils.Utils.PrintMessage("Graves loaded."); } private 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 (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 void Game_OnGameUpdate(EventArgs args) { if (Q.IsReady() && GetValue("UseQTH").Active) { if (ObjectManager.Player.HasBuff("Recall")) return; var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (t != null) Q.Cast(t, false, true); } if ((!ComboActive && !HarassActive) || !DeathWalker.canMove()) return; var useQ = GetValue("UseQ" + (ComboActive ? "C" : "H")); var useW = GetValue("UseW" + (ComboActive ? "C" : "H")); var useR = GetValue("UseR" + (ComboActive ? "C" : "H")); if (Q.IsReady() && useQ) { var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (t != null) Q.Cast(t, false, true); } if (W.IsReady() && useW) { var t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical); if (t.IsValidTarget(W.Range) && (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) || t.HasBuffOfType(BuffType.Taunt) || t.HasBuff("zhonyasringshield") || t.HasBuff("Recall"))) W.Cast(t, false, true); } if (R.IsReady() && useR) { foreach ( var hero in ObjectManager.Get() .Where( hero => hero.IsValidTarget(R.Range) && ObjectManager.Player.GetSpellDamage(hero, SpellSlot.R, 1) - 20 > hero.Health)) R.Cast(hero, false, true); } } 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) Q.Cast(t); if (W.IsReady() && useW) { if (t.IsValidTarget(W.Range) && (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) || t.HasBuffOfType(BuffType.Taunt) || t.HasBuff("zhonyasringshield") || t.HasBuff("Recall"))) W.Cast(t); } } } public override void Drawing_OnDraw(EventArgs args) { Spell[] spellList = {Q}; foreach (var spell in spellList) { var menuItem = GetValue("Draw" + spell.Slot); if (menuItem.Active) Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color); } } 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("UseRC" + Id, "Use R").SetValue(true)); return true; } public override bool HarassMenu(Menu config) { config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true)); config.AddItem(new MenuItem("UseWH" + Id, "Use W").SetValue(false)); 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.FromArgb(100, 255, 0, 255)))); return true; } public override bool ExtrasMenu(Menu config) { return true; } public override bool LaneClearMenu(Menu config) { return true; } } }