private static void Game_OnUpdate(EventArgs args)
{
var me = ObjectManager.LocalHero;
if (!_loaded)
{
if (!Game.IsInGame || me == null)
{
return;
}
_loaded = true;
PrintSuccess(string.Format("> AutoDisable Loaded v{0}", Ver));
Game.PrintMessage(
"<font face='Comic Sans MS, cursive'><font color='#00aaff'>" + Menu.DisplayName + " By Jumpering" +
" loaded!</font> <font color='#aa0000'>v" + Ver, MessageType.LogMessage);
PreLoadItems.Clear();
PreLoadSpell.Clear();
for (var asd = 0; asd < 10; asd++)
{
Create[asd] = false;
FirstTimeItem[asd] = true;
FirstTimeSpell[asd] = true;
}
}
if (!Game.IsInGame || me == null)
{
_loaded = false;
PrintInfo("> AutoDisable unLoaded");
return;
}
if (!me.IsAlive) return;
#region Dodge by mod
if (Utils.SleepCheck("item_manta"))
{
var dodgeByManta = me.FindItem("item_manta");
var mod =
me.Modifiers.FirstOrDefault(
x =>
x.Name == "modifier_orchid_malevolence_debuff" || x.Name == "modifier_lina_laguna_blade" ||
x.Name == "modifier_pudge_meat_hook" || x.Name == "modifier_skywrath_mage_ancient_seal" ||
x.Name == "modifier_lion_finger_of_death");
if (dodgeByManta != null && dodgeByManta.CanBeCasted() && mod != null)
{
dodgeByManta.UseAbility();
Utils.Sleep(250, "item_manta");
return;
}
}
#endregion
uint i;
var isInvis = me.IsInvisible();
var isChannel = me.IsChanneling();
var items = me.Inventory.Items.Where(x => x.CanBeCasted()).ToList();
var spells = me.Spellbook.Spells.Where(x => SpellList.Contains(x.Name)).ToList();
var newItems = false;
//Game.PrintMessage(me.Spellbook.Spell4.Name,MessageType.ChatMessage);
foreach (var item in items.Where(item => !PreLoadItems.ContainsKey(item.Name) && ItemList.Contains(item.Name)))
{
PreLoadItems.Add(item.Name, true);
//Game.PrintMessage("[AutoDisable] [ITEM] " + item.Name + " added to menu", MessageType.LogMessage);
newItems = true;
}
var newSpells = false;
foreach (var spell in spells.Where(item => !PreLoadSpell.ContainsKey(item.Name)))
{
PreLoadSpell.Add(spell.Name, true);
//Game.PrintMessage("[AutoDisable] [SPELL] " + spell.Name + " added to menu ", MessageType.LogMessage);
newSpells = true;
}
spells = spells.Where(x => x.CanBeCasted()).ToList();
/*
if (newSpells)
{
AbilityMenu.AddItem(
new MenuItem("SelectedSpells" + me.Name, "Abilities:").SetValue(new AbilityToggler(PreLoadSpell)));
}
if (newItems)
{
ItemMenu.AddItem(
new MenuItem("SelectedItems" + me.Name, "Items:").SetValue(new AbilityToggler(PreLoadItems)));
}
*/
/*foreach (var ability in spells.Where(item => PreLoadSpell.ContainsKey(item.Name)))
{
Game.PrintMessage(
ExtraSubMenu[i, 1].Item("SelectedSpells" + _me.Name).GetValue<AbilityToggler>().IsEnabled(ability.Name).ToString(),
MessageType.ChatMessage);
}*/
for (i = 0; i < 10; i++)
{
try
{
var v = ObjectManager.GetPlayerByID(i).Hero;
if (v == null || v.Team == me.Team || Equals(v, me) ||
!Utils.SleepCheck(v.GetHashCode().ToString())) continue;
var isInvul = v.IsInvul();
var magicImmnune = v.IsMagicImmune();
//var LinkProt = v.li();
var isStun = v.IsStunned();
var isHex = v.IsHexed();
var isSilence = v.IsSilenced();
var isDisarm = v.IsDisarmed();
/*try
{
Game.PrintMessage("[AutoDisable] " + Menu.Item("ActiveSpell" + i).GetValue<bool>(), MessageType.LogMessage);
}
catch (Exception)
{
}
*/
if (!Create[i])
{
ExtraSubMenu[i, 0] = new Menu("", i.ToString(), false, v.Name);
ExtraSubMenu[i, 0].AddItem(new MenuItem("ActiveItem" + i, "Active For This Hero").SetValue(true));
ItemMenu.AddSubMenu(ExtraSubMenu[i,0]);
ExtraSubMenu[i, 1] = new Menu("", i.ToString(), false, v.Name);
ExtraSubMenu[i, 1].AddItem(new MenuItem("ActiveSpell"+i, "Active For This Hero").SetValue(true));
AbilityMenu.AddSubMenu(ExtraSubMenu[i,1]);
Create[i] = true;
}
if (PreLoadItems.Count > 0 && FirstTimeItem[i])
{
FirstTimeItem[i] = false;
ExtraSubMenu[i, 0].AddItem(
new MenuItem("SelectedItems" + me.Name + v.Name, "Items:").SetValue(
new AbilityToggler(PreLoadItems)));
}
if (PreLoadSpell.Count > 0 && FirstTimeSpell[i])
{
FirstTimeSpell[i] = false;
ExtraSubMenu[i, 1].AddItem(
new MenuItem("SelectedSpells" + me.Name + v.Name, "Abilities:").SetValue(
new AbilityToggler(PreLoadSpell)));
}
if (newSpells)
{
var preLoadSpell2 = PreLoadSpell.ToDictionary(b => b.Key, b => b.Value);
ExtraSubMenu[i, 1].Item("SelectedSpells" + me.Name + v.Name)
.SetValue((new AbilityToggler(preLoadSpell2)));
}
if (newItems)
{
var preLoadItems2 = PreLoadItems.ToDictionary(b => b.Key, b => b.Value);
ExtraSubMenu[i, 0].Item("SelectedItems" + me.Name + v.Name)
.SetValue((new AbilityToggler(preLoadItems2)));
}
/*Game.PrintMessage(
"SelectedSpells" + me.Name + v.Name + " : " +
ExtraSubMenu[i, 1].Item("SelectedSpells" + me.Name + v.Name)
.GetValue<AbilityToggler>()
.IsEnabled("lion_voodoo"), MessageType.ChatMessage);*/
if (!v.IsAlive || !v.IsVisible) continue;
if ((isInvis && !me.IsVisibleToEnemies)|| isChannel) continue;
var blink = v.FindItem("item_blink");
var forcestaff = v.FindItem("item_force_staff");
var dpActivated =
v.HasModifiers(new[] {"modifier_slark_dark_pact", "modifier_slark_dark_pact_pulses"},false);
var enumerable = items as IList<Item> ?? items.ToList();
var distance = me.Distance2D(v);
//var angle =
string spellString;
var angle = (float) (Math.Max(
Math.Abs(v.RotationRad - Utils.DegreeToRadian(v.FindAngleBetween(me.Position))) - 0.20, 0));
if (!enumerable.Any() || !(isInvul || magicImmnune || isInvis || isChannel || dpActivated))
{
if ((blink != null && blink.Cooldown / blink.CooldownLength > 0.99) || forcestaff != null && forcestaff.Cooldown / forcestaff.CooldownLength > 0.99)
{
UseDisableStageOne(v, enumerable, null, false, true, me, i);
}
else if (Menu.Item("onlyoninitiators").GetValue<StringList>().SelectedIndex == (int)DisableType.All)
{
UseDisableStageOne(v, enumerable, null, false, false, me, i);
}
else if (Initiators.TryGetValue(v.ClassID, out spellString))
{
var initSpell = v.FindSpell(spellString);
if (initSpell != null && initSpell.Cooldown != 0)
{
UseDisableStageOne(v, enumerable, null, false, true, me, i);
}
}
}
if (isStun || isHex || isSilence || isDisarm) continue;
var abilities = spells as IList<Ability> ?? spells.ToList();
if (!abilities.Any() && !enumerable.Any()) continue;
if (DangIltimate.Contains(v.ClassID))
{
var ult =
v.Spellbook.Spells.Any(x => x.AbilityType == AbilityType.Ultimate && x.IsInAbilityPhase);
if (ult)
{
UseDisableStageOne(v, enumerable, abilities, true, true, me, i);
}
}
//var
/*if (v.ClassID == ClassID.CDOTA_Unit_Hero_Clinkz)
{
PrintError(String.Format("{0}", angle));
}*/
if (angle == 0 && distance < 1500)
{
var r = CheckForFirstSpell(v);
var r2 = CheckForSecondSpell(v);
//PrintError("kek");
var mustHave = false;
//PrintError("kek2");
var s = CheckForModifier(v, ref mustHave);
//PrintError("kek3");
var act = (CheckForNetworkAct(v) == v.NetworkActivity);
//PrintError("kek4");
//PrintError(String.Format("{0} must have: {1}", v.Name, mustHave));
var modifier = s != "" && v.Modifiers.FirstOrDefault(x => x.Name == s) != null;
//if (r != null) PrintInfo(String.Format("r:{0}", r.IsInAbilityPhase));
//if (r2 != null) PrintInfo(String.Format("r2:{0} ", r2.Name));
if ((r != null && r.IsInAbilityPhase) || (r2 != null && r2.IsInAbilityPhase) ||
mustHave && modifier && act || !mustHave && act)
{
CounterSpellAndItems(v, enumerable, abilities, me, i);
}
}
if ((blink != null && blink.Cooldown / blink.CooldownLength > 0.99) || forcestaff != null && forcestaff.Cooldown / forcestaff.CooldownLength > 0.99)
{
UseDisableStageOne(v, enumerable, abilities, true, true, me, i);
}
else if (Menu.Item("onlyoninitiators").GetValue<StringList>().SelectedIndex == (int)DisableType.All && distance<=1200)
{
UseDisableStageOne(v, enumerable, abilities, true, false, me, i);
}
if (!Initiators.TryGetValue(v.ClassID, out spellString) || !(distance < 1000)) continue;
{
var initSpell = v.FindSpell(spellString);
if (initSpell != null && initSpell.Cooldown != 0)
{
UseDisableStageOne(v, enumerable, abilities, true, true, me, i);
}
}
}
catch (Exception)
{
// ignored
}
}
}