Auto_Disable.Program.Game_OnUpdate C# (CSharp) Method

Game_OnUpdate() private static method

private static Game_OnUpdate ( EventArgs args ) : void
args System.EventArgs
return void
        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
                }
            }
        }