示例#1
0
        /// <summary>
        /// Serializes the data elements into the internal buffer.
        /// </summary>
        /// <remarks></remarks>
        private void WriteData()
        {
            // Initialize buffer
            if (_buffer == null)
            {
                _buffer = new RAMBuffer();
            }
            else if (_buffer.Length != 0)
            {
                _buffer.Clear();
            }

            // Write header
            _buffer.WriteString("1.21", 4);
            _buffer.WriteUInteger(4 + 4 + 4 + (uint)ScenarioInstructions.Length + 4 + 4);
            _buffer.WriteInteger(2);
            _buffer.WriteUInteger(LastSaveTimestamp);
            _buffer.WriteInteger(ScenarioInstructions.Length);
            _buffer.WriteString(ScenarioInstructions);
            _buffer.WriteUInteger(0);
            _buffer.WriteUInteger(PlayerCount);

            // Create buffer for compressed data elements
            RAMBuffer comprBuffer = new RAMBuffer();

            Header.WriteData(comprBuffer);
            MessagesCinematics.WriteData(comprBuffer);
            PlayerAiResources.WriteData(comprBuffer);
            GlobalVictory.WriteData(comprBuffer);
            Diplomacy.WriteData(comprBuffer);
            Disables.WriteData(comprBuffer);
            Map.WriteData(comprBuffer);
            Units.WriteData(comprBuffer);
            PlayerDiplomacyVarious.WriteData(comprBuffer);
            Triggers.WriteData(comprBuffer);
            IncludedFiles.WriteData(comprBuffer);

            // Compress data and copy to main buffer
            using (MemoryStream output = new MemoryStream())
                using (MemoryStream input = comprBuffer.ToMemoryStream())
                {
                    // Create compressor stream
                    using (DeflateStream compressor = new DeflateStream(output, CompressionMode.Compress))
                    {
                        // Compress
                        input.CopyTo(compressor);
                        input.Close();
                    }

                    // Save compressed data into main buffer
                    _buffer.Write(output.ToArray());
                }
        }
示例#2
0
 /// <summary>
 /// For deserialization from a binary table.
 /// </summary>
 public EO3Skill(BinaryReader reader, int skillId, Table nameTable) : base(reader, skillId, nameTable)
 {
     Game            = SkillModes.EO3;
     MaxLevel        = reader.ReadByte();
     Type            = reader.ReadByte();
     UseRequirements = new EO3UseRequirements(reader.ReadUInt16());
     TargetStatus    = new TargetStatus(reader.ReadUInt16());
     TargetType      = reader.ReadByte();
     TargetTeam      = reader.ReadByte();
     UsableLocation  = new UsableLocation(reader.ReadByte());
     ModifierStatus  = reader.ReadByte();
     ModifierType    = reader.ReadByte();
     reader.ReadByte(); // Unknown.
     ModifierElement    = new Element(reader.ReadUInt16());
     DamageElement      = new DamageElement(reader.ReadUInt16());
     InflictionStatus   = reader.ReadUInt16();
     AssociatedDisables = new Disables(reader.ReadUInt16());
     SkillFlags         = new EO3SkillFlags(reader.ReadInt32());
     DataSections       = new DataSections(reader, Game);
 }
示例#3
0
        public static void AddAllToMenu()
        {
            var mySpells = AbilityMain.Me.Spellbook.Spells.Where(x => AbilityDatabase.Find(x.Name) != null);
            var myItems  = AbilityMain.Me.Inventory.Items;
            var spells   = mySpells as Ability[] ?? mySpells.ToArray();
            var myItems1 = myItems as Item[] ?? myItems.ToArray();
            var blink    = myItems1.FirstOrDefault(x => x.Name == "item_blink");

            MyAbilities.SoulRing = myItems1.FirstOrDefault(x => x.Name == "item_soul_ring");
            if (blink != null)
            {
                MyAbilities.Blink = blink;
                RangeDrawing.AddRange(blink);
            }

            Nukes.AddAllNukes(spells, myItems1);
            Disables.AddAllDisables(spells, myItems1);
            Slows.AddAllSlows(spells, myItems1);
            Buffs.AddAllBuffs(spells, myItems1);
            Harrases.AddAllHarrases(spells, myItems1);
            Silences.AddAllSilences(spells, myItems1);
            Specials.AddAllSpecials(spells, myItems1);
            Heals.AddAllHeals(spells, myItems1);
            Shields.AddAllShields(spells, myItems1);
            MainMenu.Menu.AddSubMenu(MainMenu.AbilitiesMenu);
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.DamageIndicatorMenu);
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.GankDamageMenu);
            MainMenu.GankDamageMenu.AddItem(new MenuItem("enableGankDamage", "Enable: ").SetValue(true));
            MainMenu.GankDamageMenu.AddItem(
                new MenuItem("enableGankDamageAllies", "Enable for allies: ").SetValue(true));
            MainMenu.GankDamageMenu.AddItem(
                new MenuItem("enableGankDamageEnemies", "Enable for enemies: ").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorDrawDamage", "Draw Damage").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorDrawHits", "Draw hits").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorTextSize", "Increase text size").SetValue(new Slider(0, 0, 5)));
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.AbilityOverlayMenu);
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("spellOverlay", "SPELLS OVERLAY:").SetFontStyle(fontColor: Color.White));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableSpellOverlayEnemy", "Enable for enemies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableSpellOverlayAlly", "Enable for allies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("sizeSliderSpell", "Increase the size: ").SetValue(new Slider(0, 0, 25)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("itemOverlay", "ITEMS OVERLAY:").SetFontStyle(fontColor: Color.White));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableItemOverlayEnemy", "Enable for enemies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableItemOverlayAlly", "Enable for allies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("sizeSliderItem", "Increase the size: ").SetValue(new Slider(0, 0, 25)));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("unfinishedFeature", "This feature is currently unfinished!"))
            .SetFontStyle(fontColor: Color.OrangeRed)
            .SetTooltip("Contains unfinished stuff, not all combos are tweaked/in right order.");
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("abilityKey1", "Combo Key"))
            .SetValue(new KeyBind('G', KeyBindType.Press));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("abilityComboType", "Combo Order"))
            .SetValue(new StringList(new[] { "Normal", "Maximum Disable", "Maximum Damage" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.Mode", "Move mode"))
            .SetValue(new StringList(new[] { "Orbwalk", "Move to mouse", "Attack target", "Do nothing" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.NoMoveRange", "No move range"))
            .SetValue(new Slider(0, 0, 300))
            .SetTooltip("Your hero will not move if you put your mouse near your hero in the selected range");
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.Target", "Target selection"))
            .SetValue(new StringList(new[] { "ClosestToMouse", "FastestKillable" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.TargetLock", "Target lock"))
            .SetValue(new StringList(new[] { "None", "WhenTheyGoToFog", "WhenKeyIsPressed" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("comboAbilitiesToggler", "Abilities in combo: "))
            .SetValue(new AbilityToggler(new Dictionary <string, bool>()));

            foreach (var spell in
                     from spell in spells
                     let data = AbilityDatabase.Find(spell.Name)
                                where
                                (data != null &&
                                 (data.IsNuke || data.IsDisable || data.IsHarras || data.IsBuff || data.WeakensEnemy ||
                                  data.IsSlow || data.IsSilence)) || spell.Name == "tinker_rearm"
                                select spell)
            {
                var dv = spell.AbilityType != AbilityType.Ultimate || spell.Name == "templar_assassin_psionic_trap";
                if (NameManager.Name(spell) == "tinker_rearm")
                {
                    MyAbilities.TinkerRearm = spell;
                }

                ComboMenu.AddAbility(spell.Name, dv);
            }

            foreach (var spell in
                     from spell in myItems1
                     let data = AbilityDatabase.Find(spell.Name)
                                where
                                data != null &&
                                (data.IsNuke || data.IsDisable || data.IsHarras || data.IsBuff || data.WeakensEnemy ||
                                 data.IsSlow || data.IsSilence)
                                select spell)
            {
                ComboMenu.AddAbility(spell.Name);
            }

            // if (blink != null)
            // {
            // MainMenu.ComboKeysMenu.Item("comboAbilitiesToggler").GetValue<AbilityToggler>().Add(blink.Name);
            // }
            MainMenu.OptionsMenu.AddSubMenu(MainMenu.ComboKeysMenu);
            MainMenu.OptionsMenu.AddSubMenu(MainMenu.DrawingsMenu);
            MainMenu.Menu.AddSubMenu(MainMenu.OptionsMenu);
            MainMenu.Menu.AddSubMenu(MainMenu.RangeDrawingMenu);
        }
示例#4
0
        public static void AddAllToMenu()
        {
            var mySpells = AbilityMain.Me.Spellbook.Spells.Where(x => AbilityDatabase.Find(x.Name) != null);
            var myItems  = AbilityMain.Me.Inventory.Items;
            var spells   = mySpells as Ability[] ?? mySpells.ToArray();
            var myItems1 = myItems as Item[] ?? myItems.ToArray();
            var blink    = myItems1.FirstOrDefault(x => x.Name == "item_blink");

            MyAbilities.SoulRing = myItems1.FirstOrDefault(x => x.Name == "item_soul_ring");
            if (blink != null)
            {
                MyAbilities.Blink = blink;
                BlinkMenu.Create(blink);
            }
            Nukes.AddAllNukes(spells, myItems1);
            Disables.AddAllDisables(spells, myItems1);
            Slows.AddAllSlows(spells, myItems1);
            Buffs.AddAllBuffs(spells, myItems1);
            Harrases.AddAllHarrases(spells, myItems1);
            Silences.AddAllSilences(spells, myItems1);
            Specials.AddAllSpecials(spells, myItems1);
            Heals.AddAllHeals(spells, myItems1);
            Shields.AddAllShields(spells, myItems1);
            MainMenu.Menu.AddSubMenu(MainMenu.AbilitiesMenu);
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.DamageIndicatorMenu);
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.GankDamageMenu);
            MainMenu.GankDamageMenu.AddItem(new MenuItem("enableGankDamage", "Enable: ").SetValue(true));
            MainMenu.GankDamageMenu.AddItem(
                new MenuItem("enableGankDamageAllies", "Enable for allies: ").SetValue(true));
            MainMenu.GankDamageMenu.AddItem(
                new MenuItem("enableGankDamageEnemies", "Enable for enemies: ").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorDrawDamage", "Draw Damage").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorDrawHits", "Draw hits").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorTextSize", "Increase text size").SetValue(new Slider(0, 0, 5)));
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.AbilityOverlayMenu);
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("spellOverlay", "SPELLS OVERLAY:").SetFontStyle(fontColor: Color.White));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableSpellOverlayEnemy", "Enable for enemies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableSpellOverlayAlly", "Enable for allies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("sizeSliderSpell", "Increase the size: ").SetValue(new Slider(0, 0, 25)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("itemOverlay", "ITEMS OVERLAY:").SetFontStyle(fontColor: Color.White));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableItemOverlayEnemy", "Enable for enemies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableItemOverlayAlly", "Enable for allies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("sizeSliderItem", "Increase the size: ").SetValue(new Slider(0, 0, 25)));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("unfinishedFeature", "This feature is currently unfinished!"))
            .SetFontStyle(fontColor: Color.OrangeRed)
            .SetTooltip("Contains unfinished stuff, not all combos are tweaked/in right order.");
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("abilityKey1", "Combo Key"))
            .SetValue(new KeyBind('G', KeyBindType.Press));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("abilityComboType", "Combo Order"))
            .SetValue(new StringList(new[] { "Normal", "Maximum Disable", "Maximum Damage" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("comboAbilitiesToggler", "Abilities in combo: "))
            .SetValue(new AbilityToggler(new Dictionary <string, bool>()));
            foreach (var spell in
                     from spell in spells
                     let data = AbilityDatabase.Find(spell.Name)
                                where
                                data != null &&
                                (data.IsNuke || data.IsDisable || data.IsHarras || data.IsBuff || data.WeakensEnemy ||
                                 data.IsSlow || data.IsSilence)
                                select spell)
            {
                var dv = spell.AbilityType != AbilityType.Ultimate;
                ComboMenu.AddAbility(spell.Name, dv);
            }
            foreach (var spell in
                     from spell in myItems1
                     let data = AbilityDatabase.Find(spell.Name)
                                where
                                data != null &&
                                (data.IsNuke || data.IsDisable || data.IsHarras || data.IsBuff || data.WeakensEnemy ||
                                 data.IsSlow || data.IsSilence)
                                select spell)
            {
                ComboMenu.AddAbility(spell.Name);
            }
            //if (blink != null)
            //{
            //    MainMenu.ComboKeysMenu.Item("comboAbilitiesToggler").GetValue<AbilityToggler>().Add(blink.Name);
            //}
            MainMenu.OptionsMenu.AddSubMenu(MainMenu.ComboKeysMenu);
            MainMenu.OptionsMenu.AddSubMenu(MainMenu.DrawingsMenu);
            MainMenu.Menu.AddSubMenu(MainMenu.OptionsMenu);
            MainMenu.Menu.AddSubMenu(MainMenu.RangeDrawingMenu);
        }
示例#5
0
        public static void AddAllToMenu()
        {
            var mySpells = AbilityMain.Me.Spellbook.Spells.Where(x => AbilityDatabase.Find(x.Name) != null);
            var myItems  = AbilityMain.Me.Inventory.Items;
            var spells   = mySpells as Ability[] ?? mySpells.ToArray();
            var myItems1 = myItems as Item[] ?? myItems.ToArray();
            var blink    = myItems1.FirstOrDefault(x => x.Name == "item_blink")
                           ?? spells.FirstOrDefault(x => x.Name == "antimage_blink" || x.Name == "queenofpain_blink");

            MyAbilities.SoulRing         = myItems1.FirstOrDefault(x => x.Name == "item_soul_ring");
            MyAbilities.ForceStaff       = myItems1.FirstOrDefault(x => x.Name == "item_force_staff");
            MyAbilities.ChargeOfDarkness = spells.FirstOrDefault(x => x.Name == "spirit_breaker_charge_of_darkness");
            MyAbilities.InvokerInvoke    = AbilityMain.Me.Spellbook.Spells.FirstOrDefault(x => x.Name == "invoker_invoke");
            MyAbilities.InvokerQ         = AbilityMain.Me.Spellbook.Spells.FirstOrDefault(x => x.Name == "invoker_quas");
            MyAbilities.InvokerW         = AbilityMain.Me.Spellbook.Spells.FirstOrDefault(x => x.Name == "invoker_wex");
            MyAbilities.InvokerE         = AbilityMain.Me.Spellbook.Spells.FirstOrDefault(x => x.Name == "invoker_exort");
            MainMenu.Menu.AddItem(new MenuItem("Ability#.EnableAutoKillSteal", "Enable AutoKillSteal:"))
            .SetValue(true)
            .SetFontColor(fontColor: Color.DarkOrange);
            MainMenu.Menu.AddItem(new MenuItem("Ability#.EnableAutoUsage", "Enable AutoUsage:"))
            .SetValue(true)
            .SetFontColor(fontColor: Color.DarkOrange);
            Nukes.AddAllNukes(spells, myItems1);
            Disables.AddAllDisables(spells, myItems1);
            Slows.AddAllSlows(spells, myItems1);
            Buffs.AddAllBuffs(spells, myItems1);
            Harrases.AddAllHarrases(spells, myItems1);
            Silences.AddAllSilences(spells, myItems1);
            Specials.AddAllSpecials(spells, myItems1);
            Heals.AddAllHeals(spells, myItems1);
            Shields.AddAllShields(spells, myItems1);
            MainMenu.Menu.AddSubMenu(MainMenu.AbilitiesMenu);
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.DamageIndicatorMenu);
            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.GankDamageMenu);
            MainMenu.GankDamageMenu.AddItem(new MenuItem("enableGankDamage", "Enable: ").SetValue(true));
            MainMenu.GankDamageMenu.AddItem(
                new MenuItem("enableGankDamageAllies", "Enable for allies: ").SetValue(true));
            MainMenu.GankDamageMenu.AddItem(
                new MenuItem("enableGankDamageEnemies", "Enable for enemies: ").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorDrawDamage", "Draw Damage").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorDrawHits", "Draw hits").SetValue(true));
            MainMenu.DamageIndicatorMenu.AddItem(
                new MenuItem("abilityDamageIndicatorTextSize", "Increase text size").SetValue(new Slider(0, 0, 5)));

            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.ManaBarMenu);
            MainMenu.ManaBarMenu.AddItem(
                new MenuItem("manaBar", "MANA BAR:").SetFontColor(fontColor: Color.White));
            MainMenu.ManaBarMenu.AddItem(
                new MenuItem("enableManaBar", "Enable Mana Bar: ").SetValue(true));

            MainMenu.DrawingsMenu.AddSubMenu(MainMenu.AbilityOverlayMenu);
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("spellOverlay", "SPELLS OVERLAY:").SetFontColor(fontColor: Color.White));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableSpellOverlayEnemy", "Enable for enemies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableSpellOverlayAlly", "Enable for allies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("sizeSliderSpell", "Increase the size: ").SetValue(new Slider(0, 0, 25)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("ExtraPosSliderSpellX", "Extra Pos X: ").SetValue(new Slider(0, -400, 400)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("ExtraPosSliderSpellY", "Extra Pos Y: ").SetValue(new Slider(0, -400, 400)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("itemOverlay", "ITEMS OVERLAY:").SetFontColor(fontColor: Color.White));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableItemOverlayEnemy", "Enable for enemies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("enableItemOverlayAlly", "Enable for allies: ").SetValue(true));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("sizeSliderItem", "Increase the size: ").SetValue(new Slider(0, 0, 25)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("ExtraPosSliderItemX", "Extra Pos X: ").SetValue(new Slider(0, -400, 400)));
            MainMenu.AbilityOverlayMenu.AddItem(
                new MenuItem("ExtraPosSliderItemY", "Extra Pos Y: ").SetValue(new Slider(0, -400, 400)));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("unfinishedFeature", "This feature is currently unfinished!"))
            .SetFontColor(fontColor: Color.OrangeRed)
            .SetTooltip("Contains unfinished stuff, not all combos are tweaked/in right order.");
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("abilityKey1", "Combo Key"))
            .SetValue(new KeyBind('G', KeyBindType.Press));
            var priorityChanger =
                new MenuItem("Ability#.ComboOrder", "Custom Order: ").SetValue(
                    new PriorityChanger(new List <string>(), "Ability#.ComboOrder")).SetFontColor(fontColor: Color.Gray);

            MainMenu.ComboKeysMenu.AddItem(new MenuItem("abilityComboType", "Combo Order"))
            .SetValue(new StringList(new[] { "Normal", "Maximum Disable", "Maximum Damage", "Custom" }))
            .ValueChanged +=
                (sender, args) =>
            {
                priorityChanger.SetFontColor(
                    fontColor: args.GetNewValue <StringList>().SelectedIndex == 3 ? Color.Green : Color.Gray);
            };

            if (MainMenu.ComboKeysMenu.Item("abilityComboType").GetValue <StringList>().SelectedIndex == 3)
            {
                priorityChanger.SetFontColor(fontColor: Color.Green);
            }

            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.Mode", "Move mode"))
            .SetValue(new StringList(new[] { "Orbwalk", "Move to mouse", "Attack target", "Do nothing" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.NoMoveRange", "No move range"))
            .SetValue(new Slider(0, 0, 300))
            .SetTooltip("Your hero will not move if you put your mouse near your hero in the selected range");
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.Target", "Target selection"))
            .SetValue(new StringList(new[] { "ClosestToMouse", "FastestKillable" }));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("Ability.KeyCombo.TargetLock", "Target lock"))
            .SetValue(new StringList(new[] { "None", "WhenTheyGoToFog", "WhenKeyIsPressed" }));
            MainMenu.ComboKeysMenu.AddItem(
                new MenuItem("Ability#.MaximizeDamage", "Maximize damage (beta feature)").SetValue(false)
                .SetFontColor(fontColor: Color.Aqua)
                .SetTooltip(
                    "Enabling this option will make sure that all damage/damage amplifying abilities are used right away"));
            MainMenu.ComboKeysMenu.AddItem(new MenuItem("comboAbilitiesToggler", "Abilities in combo: "))
            .SetValue(new AbilityToggler(new Dictionary <string, bool>()));
            MainMenu.ComboKeysMenu.AddItem(priorityChanger);

            foreach (var spell in
                     from spell in AbilityMain.Me.Spellbook.Spells
                     let data = AbilityDatabase.Find(spell.Name)
                                where
                                (data != null &&
                                 (data.IsNuke || data.IsDisable || data.IsHarras || data.IsBuff || data.WeakensEnemy ||
                                  data.IsSlow || data.IsSilence)) || spell.Name == "tinker_rearm" ||
                                spell.StoredName() == "invoker_emp" || spell.StoredName() == "invoker_forge_spirit" ||
                                spell.StoredName() == "invoker_chaos_meteor" ||
                                spell.StoredName() == "skywrath_mage_mystic_flare"
                                select spell)
            {
                var dv = spell.AbilityType != AbilityType.Ultimate || spell.Name == "templar_assassin_psionic_trap";
                if (NameManager.Name(spell) == "tinker_rearm")
                {
                    MyAbilities.TinkerRearm = spell;
                }

                ComboMenu.AddAbility(spell.Name, spell, dv);
            }

            foreach (var spell in
                     from spell in myItems1
                     let data = AbilityDatabase.Find(spell.Name)
                                where
                                data != null &&
                                (data.IsNuke || data.IsDisable || data.IsHarras || data.IsBuff || data.WeakensEnemy ||
                                 data.IsSlow || data.IsSilence)
                                select spell)
            {
                if (NameManager.Name(spell) == "item_cyclone")
                {
                    MyAbilities.Cyclone = spell;
                }

                ComboMenu.AddAbility(spell.Name, spell);
            }

            if (blink != null)
            {
                MyAbilities.Blink = blink;
                RangeDrawing.AddRange(blink);
                ComboMenu.AddAbility(blink.StoredName(), blink);
            }

            // if (blink != null)
            // {
            // MainMenu.ComboKeysMenu.Item("comboAbilitiesToggler").GetValue<AbilityToggler>().Add(blink.Name);
            // }
            MainMenu.OptionsMenu.AddSubMenu(MainMenu.ComboKeysMenu);
            MainMenu.OptionsMenu.AddSubMenu(MainMenu.DrawingsMenu);
            MainMenu.BlinkMenu.AddItem(
                new MenuItem("Ability#.BlinkRange", "BlinkPosition distance from target").SetValue(
                    new Slider(0, 0, 700)));
            MainMenu.BlinkMenu.AddItem(
                new MenuItem("Ability#.BlinkMaxEnemiesAround", "Maximum enemies around target to use blink").SetValue(
                    new Slider(2, 0, 3)))
            .SetTooltip("If theres more enemies around then specified value, blink will not be used");
            if (AbilityMain.Me.ClassId == ClassId.CDOTA_Unit_Hero_Invoker)
            {
                MainMenu.OptionsMenu.AddSubMenu(MainMenu.InvokerMenu);
                MainMenu.InvokerMenu.AddItem(
                    new MenuItem("Ability#.InvokerInvoke", "Enable AutoInvoke").SetValue(false));
            }

            MainMenu.OptionsMenu.AddSubMenu(MainMenu.BlinkMenu);
            MainMenu.Menu.AddSubMenu(MainMenu.OptionsMenu);
            MainMenu.Menu.AddSubMenu(MainMenu.RangeDrawingMenu);
        }