Auto_Disable.Program.CounterSpellAndItems C# (CSharp) Method

CounterSpellAndItems() private static method

private static CounterSpellAndItems ( Hero target, IEnumerable items, IEnumerable abilities, Unit me, uint i ) : void
target Hero
items IEnumerable
abilities IEnumerable
me Unit
i uint
return void
        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());
        }