#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<KeyBind>("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<bool>("UseQ" + (ComboActive ? "C" : "H"));
var useW = GetValue<bool>("UseW" + (ComboActive ? "C" : "H"));
var useR = GetValue<bool>("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<Obj_AI_Hero>()
.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<bool>("UseQ" + (ComboActive ? "C" : "H"));
var useW = GetValue<bool>("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<Circle>("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;
}
}
}