private static void CounterSpellAndItems(Hero target, IEnumerable<Item> items, IEnumerable<Ability> abilities, Unit me, uint i)
{
if (!me.IsValid) return;
var enumerable = items as Item[] ?? items.ToArray();
var safeItemSelf = enumerable.FirstOrDefault(
x =>
(x.Name == "item_blade_mail" || x.Name == "item_ghost" /*|| x.Name == "item_black_king_bar" ||
x.Name == "item_manta"*/) && ExtraSubMenu[i, 0].Item("SelectedItems" + me.Name + target.Name).GetValue<AbilityToggler>().IsEnabled(x.Name));
var safeItemTargetSelf = enumerable.FirstOrDefault(
x =>
(x.Name == "item_lotus_orb" || x.Name == "item_glimmer_cape") && ExtraSubMenu[i, 0].Item("SelectedItems" + me.Name + target.Name).GetValue<AbilityToggler>().IsEnabled(x.Name));
var safeItemTargetEnemy = enumerable.FirstOrDefault(
x =>
(x.Name == "item_sheepstick" || x.Name == "item_orchid" || x.Name == "item_abyssal_blade" || x.Name == "item_bloodthorn" ||
x.Name == "item_heavens_halberd" || x.Name == "item_cyclone") && ExtraSubMenu[i, 0].Item("SelectedItems" + me.Name + target.Name).GetValue<AbilityToggler>().IsEnabled(x.Name));
var safeItemPoint = enumerable.FirstOrDefault(
x =>
x.Name == "item_blink");
var safeSpell = abilities.FirstOrDefault(
x =>
( /*x.Name == "antimage_blink" || x.Name == "queenofpain_blink" ||*/
x.Name == "nyx_assassin_spiked_carapace" || x.Name == "silencer_last_word" ||
x.Name == "shadow_demon_disruption" || x.Name == "obsidian_destroyer_astral_imprisonment" ||
x.Name == "slark_shadow_dance" || x.Name == "slark_dark_pact" || x.Name == "puck_waning_rift" ||
x.Name == "axe_berserkers_call" || x.Name == "abaddon_aphotic_shield" ||
/*x.Name == "ember_spirit_flame_guard" ||*/ x.Name == "skywrath_mage_ancient_seal" ||
x.Name == "juggernaut_omni_slash" || x.Name == "doombringer_doom" ||
x.Name == "tusk_snowball" || x.Name == "naga_siren_mirror_image" ||
x.Name == "alchemist_chemical_rage" || x.Name == "bounty_hunter_wind_walk" ||
/*x.Name == "phantom_lancer_doppelwalk" ||*/ x.Name == "clinkz_skeleton_walk" ||
x.Name == "sandking_sandstorm" || x.Name == "weaver_shukuchi" ||
x.Name == "nyx_assassin_vendetta" || x.Name == "templar_assassin_refraction" ||
x.Name == "templar_assassin_meld" /*|| x.Name == "phoenix_supernova" */||
x.Name == "juggernaut_blade_fury" || x.Name == "life_stealer_rage" || x.Name == "lion_voodoo" ||
x.Name == "puck_phase_shift" || x.Name == "phantom_lancer_doppelwalk" ||
x.Name == "winter_wyvern_winters_curse" ||
x.Name == "shadow_shaman_voodoo" /*|| x.Name == "oracle_fates_edict" */||
/* x.Name == "winter_wyvern_cold_embrace" ||*/ x.Name == "life_stealer_rage" ||
x.Name == "silencer_global_silence") &&
ExtraSubMenu[i, 1].Item("SelectedSpells" + me.Name + target.Name)
.GetValue<AbilityToggler>()
.IsEnabled(x.Name));
/*local v = entityList:GetEntities({classId = CDOTA_Unit_Fountain,team = me.team})[1]
local vec = Vector((v.position.x - me.position.x) * 1100 / GetDistance2D(v,me) + me.position.x,(v.position.y - me.position.y) * 1100 / GetDistance2D(v,me) + me.position.y,v.position.z)
if blinkfront then
vec = Vector(me.position.x+1200*math.cos(me.rotR), me.position.y+1200*math.sin(me.rotR), me.position.z)
end*/
var v =
ObjectManager.GetEntities<Unit>()
.FirstOrDefault(x => x.Team == me.Team && x.ClassID == ClassID.CDOTA_Unit_Fountain);
if (Menu.Item("using").GetValue<StringList>().SelectedIndex == (int) Using.All ||
Menu.Item("using").GetValue<StringList>().SelectedIndex == (int) Using.OnlyItems)
{
if (safeItemSelf != null && Menu.Item("ActiveItem" + i).GetValue<bool>())
{
safeItemSelf.UseAbility();
Utils.Sleep(250, target.GetHashCode().ToString());
if (Menu.Item("oneenemy").GetValue<bool>()) return;
}
//PrintError(String.Format("{0} {1}", SafeSpell.CastRange,SafeSpell.Name));
if (safeItemPoint != null && Menu.Item("usedagger").GetValue<bool>() && me.Distance2D(target) <= 1000)
{
if (v != null && v.IsValid)
{
safeItemPoint.UseAbility(v.Position);
Utils.Sleep(250, target.GetHashCode().ToString());
if (Menu.Item("oneenemy").GetValue<bool>()) return;
}
}
if (safeItemTargetEnemy != null && safeItemTargetEnemy.CanBeCasted(target) && Menu.Item("ActiveItem" + i).GetValue<bool>())
{
if (me.Distance2D(target) <= GetRealCastRange(safeItemTargetEnemy))
{
safeItemTargetEnemy.UseAbility(target);
Utils.Sleep(250, target.GetHashCode().ToString());
if (Menu.Item("oneenemy").GetValue<bool>()) return;
}
}
if (safeItemTargetSelf != null && Menu.Item("ActiveItem" + i).GetValue<bool>())
{
safeItemTargetSelf.UseAbility(me);
Utils.Sleep(250, target.GetHashCode().ToString());
if (Menu.Item("oneenemy").GetValue<bool>()) return;
}
}
if (!Menu.Item("ActiveSpell" + i).GetValue<bool>() || safeSpell == null || !safeSpell.CanBeCasted() ||
(Menu.Item("using").GetValue<StringList>().SelectedIndex != (int) Using.All &&
Menu.Item("using").GetValue<StringList>().SelectedIndex != (int) Using.OnlyAblities)) return;
//Game.PrintMessage(safeSpell.Name+" "+safeSpell.AbilityBehavior,MessageType.ChatMessage);
if (GetRealCastRange(safeSpell) >= me.Distance2D(target) || safeSpell.AbilityBehavior == AbilityBehavior.NoTarget || safeSpell.AbilityBehavior == AbilityBehavior.Point || safeSpell.ClassID==ClassID.CDOTA_Ability_PhantomLancer_Doppelwalk)
{
safeSpell.UseAbility();
safeSpell.UseAbility(target);
if (Menu.Item("onlyoninitiators").GetValue<StringList>().SelectedIndex != (int) DisableType.All )
safeSpell.UseAbility(me.Position);
}
Utils.Sleep(250, target.GetHashCode().ToString());
}