Auto_Disable.Program.UseDisableStageOne C# (CSharp) Method

UseDisableStageOne() private static method

private static UseDisableStageOne ( Hero target, IEnumerable items, IEnumerable abilities, bool stage, bool itsRealConterSpell, Hero me, uint i ) : void
target Hero
items IEnumerable
abilities IEnumerable
stage bool false - only rot of atos & solar
itsRealConterSpell bool
me Hero
i uint
return void
        private static void UseDisableStageOne(Hero target, IEnumerable<Item> items, IEnumerable<Ability> abilities, bool stage, bool itsRealConterSpell, Hero me, uint i)
        {
            if (!me.IsValid) return;
            Item disable;
            Ability ab = null;
            Ability withOutTarget = null;
            var enumerable = items as Item[] ?? items.ToArray();
            if (stage)
            {
                disable =
                    enumerable.FirstOrDefault( // wo puck_waning_rift
                        x =>
                            (x.Name == "item_sheepstick" || x.Name == "item_orchid" || x.Name == "item_bloodthorn" ||
                             x.Name == "item_abyssal_blade" ||
                             x.Name == "item_ethereal_blade" ||
                             x.Name == "item_rod_of_atos" || x.Name == "item_heavens_halberd" ||
                             x.Name == "item_medallion_of_courage" ||
                             x.Name == "item_cyclone" || x.Name == "item_solar_crest") &&
                            ExtraSubMenu[i, 0].Item("SelectedItems" + me.Name + target.Name)
                                .GetValue<AbilityToggler>()
                                .IsEnabled(x.Name));
                var enumerable1 = abilities as Ability[] ?? abilities.ToArray();
                ab =
                    enumerable1.FirstOrDefault(
                        x =>
                            (x.Name == "lion_voodoo" || x.Name == "shadow_shaman_voodoo" ||
                             x.Name == "obsidian_destroyer_astral_imprisonment" || x.Name == "shadow_demon_disruption" ||
                             x.Name == "rubick_telekinesis" ||
                             x.Name == "dragon_knight_dragon_tail" ||
                             x.Name == "batrider_flaming_lasso" ||
                             x.Name == "legion_commander_duel" || x.Name == "phantom_lancer_doppelwalk" ||
                             x.Name == "winter_wyvern_winters_curse" ||
                             x.Name == "skywrath_mage_ancient_seal" /*|| x.Name == "vengefulspirit_magic_missile"*/) &&
                            ExtraSubMenu[i, 1].Item("SelectedSpells" + me.Name + target.Name)
                                .GetValue<AbilityToggler>()
                                .IsEnabled(x.Name));
                withOutTarget =
                    enumerable1.FirstOrDefault(
                        x =>
                            (x.Name == "silencer_global_silence" || x.Name == "puck_phase_shift" ||
                             x.Name == "puck_waning_rift" || x.Name == "axe_berserkers_call") &&
                            ExtraSubMenu[i, 1].Item("SelectedSpells" + me.Name + target.Name)
                                .GetValue<AbilityToggler>()
                                .IsEnabled(x.Name));
                /*if (withOutTarget != null)
                    Game.PrintMessage("realCastRange: " + withOutTarget.Name + " " + GetRealCastRange(withOutTarget), MessageType.ChatMessage);*/
            }
            else
            {
                disable =
                    enumerable.FirstOrDefault(
                        x =>
                            (x.Name == "item_rod_of_atos" || x.Name == "item_medallion_of_courage" ||
                            x.Name == "item_solar_crest") && ExtraSubMenu[i, 0].Item("SelectedItems" + me.Name + target.Name).GetValue<AbilityToggler>().IsEnabled(x.Name));
            }
            if (Menu.Item("using").GetValue<StringList>().SelectedIndex == (int) Using.All ||
                Menu.Item("using").GetValue<StringList>().SelectedIndex == (int) Using.OnlyItems)
            {
                if (disable != null && me.Distance2D(target) <= GetRealCastRange(disable) && Menu.Item("ActiveItem" + i).GetValue<bool>())
                {
                    disable.UseAbility(target);
                    Utils.Sleep(250, target.GetHashCode().ToString());
                    if (Menu.Item("oneenemy").GetValue<bool>()) return;
                }
            }

            if (Menu.Item("using").GetValue<StringList>().SelectedIndex == (int) Using.All ||
                Menu.Item("using").GetValue<StringList>().SelectedIndex == (int) Using.OnlyAblities)
            {

                if (ab != null && me.Distance2D(target) <= GetRealCastRange(ab) && Menu.Item("ActiveSpell" + i).GetValue<bool>())
                {
                    ab.UseAbility(target);
                    ab.UseAbility(me.Position);
                    Utils.Sleep(250, target.GetHashCode().ToString());
                    if (Menu.Item("oneenemy").GetValue<bool>()) return;
                }

                if (withOutTarget != null && Menu.Item("ActiveSpell" + i).GetValue<bool>())
                {
                    var r = GetRealCastRange(withOutTarget);
                    if (r > 0 && r >= me.Distance2D(target) || r == 0)
                    {
                        withOutTarget.UseAbility();
                        Utils.Sleep(250, target.GetHashCode().ToString());
                        if (Menu.Item("oneenemy").GetValue<bool>()) return;
                    }
                }
            }
            if (Menu.Item("using").GetValue<StringList>().SelectedIndex != (int) Using.All &&
                Menu.Item("using").GetValue<StringList>().SelectedIndex != (int) Using.OnlyItems) return;
            if (!itsRealConterSpell) return;
            var
                safeItemPoint =
                    enumerable.FirstOrDefault(
                        x =>
                            x.Name == "item_blink");

            var v =
                ObjectManager.GetEntities<Unit>()
                    .FirstOrDefault(x => x.Team == me.Team && x.ClassID == ClassID.CDOTA_Unit_Fountain);
            //Game.PrintMessage(String.Format("1: {0} 2: {1} 3: {2}", safeItemPoint == null, !Menu.Item("usedagger").GetValue<bool>(), (me.Distance2D(target) >= 1000)), MessageType.ChatMessage);
            if (safeItemPoint == null || !Menu.Item("usedagger").GetValue<bool>() ||
                (me.Distance2D(target) >= 1000))
                return;

            if (v != null)
            {
                safeItemPoint.UseAbility(v.Position);
            }
            Utils.Sleep(250, target.GetHashCode().ToString());
        }