Example #1
0
        public void LoadSkills(string filename, Class c)
        {
            SkillConfigParser sp;

            Dispatcher.Invoke(() =>
            {
                if (!File.Exists("resources/config/skills/" + filename))
                {
                    SkillUtils.BuildDefaultSkillConfig(filename, c);
                }

                try
                {
                    sp = new SkillConfigParser(filename, c);
                }
                catch (Exception)
                {
                    var res = TccMessageBox.Show("TCC",
                                                 $"There was an error while reading {filename}. Manually correct the error and press Ok to try again, else press Cancel to build a default config file.",
                                                 MessageBoxButton.OKCancel);

                    if (res == MessageBoxResult.Cancel)
                    {
                        File.Delete("resources/config/skills/" + filename);
                    }
                    LoadSkills(filename, c);
                    return;
                }

                foreach (var sk in sp.Main)
                {
                    MainSkills.Add(sk);
                }

                foreach (var sk in sp.Secondary)
                {
                    SecondarySkills.Add(sk);
                }

                foreach (var sk in sp.Hidden)
                {
                    HiddenSkills.Add(sk.Skill);
                }

                Dispatcher.Invoke(() =>
                {
                    SkillChoiceList.Clear();
                    foreach (var skill in SkillsDatabase.SkillsForClass)
                    {
                        SkillChoiceList.Add(skill);
                    }

                    SkillsView = Utils.InitLiveView(null, SkillChoiceList, new string[] { }, new SortDescription[] { });
                });
                NPC(nameof(SkillsView));
                NPC(nameof(MainSkills));
                NPC(nameof(SecondarySkills));
                SkillsLoaded?.Invoke();
            });
        }
 internal void Save()
 {
     Dispatcher.BeginInvoke(new Action(() =>
     {
         if (MainSkills.Count == 0 && SecondarySkills.Count == 0 && HiddenSkills.Count == 0)
         {
             return;
         }
         var root = new XElement("Skills");
         MainSkills.ToList().ForEach(mainSkill =>
         {
             var tag = mainSkill.CooldownType.ToString();
             root.Add(new XElement(tag, new XAttribute("id", mainSkill.Skill.Id), new XAttribute("row", 1), new XAttribute("name", mainSkill.Skill.ShortName)));
         });
         SecondarySkills.ToList().ForEach(secSkill =>
         {
             var tag = secSkill.CooldownType.ToString();
             root.Add(new XElement(tag, new XAttribute("id", secSkill.Skill.Id), new XAttribute("row", 2), new XAttribute("name", secSkill.Skill.ShortName)));
         });
         HiddenSkills.ToList().ForEach(sk =>
         {
             var tag = sk.CooldownType.ToString();
             root.Add(new XElement(tag, new XAttribute("id", sk.Skill.Id), new XAttribute("row", 3), new XAttribute("name", sk.Skill.ShortName)));
         });
         if (SessionManager.CurrentPlayer.Class > (Class)12)
         {
             return;
         }
         root.Save(Path.Combine(App.ResourcesPath, "config/skills", $"{TccUtils.ClassEnumToString(SessionManager.CurrentPlayer.Class).ToLower()}-skills.xml"));
     }));
 }
Example #3
0
 public void ClearSkills()
 {
     ShortSkills.Clear();
     LongSkills.Clear();
     MainSkills.Clear();
     SecondarySkills.Clear();
     OtherSkills.Clear();
     ItemSkills.Clear();
     HiddenSkills.Clear();
 }
        public void LoadSkills(Class c)
        {
            if (c == Class.None)
            {
                return;
            }
            var filename = TccUtils.ClassEnumToString(c).ToLower() + "-skills.xml";
            SkillConfigParser sp;

            //Dispatcher.Invoke(() =>
            //{
            if (!File.Exists(Path.Combine(App.ResourcesPath, "config/skills", filename)))
            {
                SkillUtils.BuildDefaultSkillConfig(filename, c);
            }

            try
            {
                sp = new SkillConfigParser(filename, c);
            }
            catch (Exception)
            {
                var res = TccMessageBox.Show("TCC",
                                             $"There was an error while reading {filename}. Manually correct the error and press Ok to try again, else press Cancel to build a default config file.",
                                             MessageBoxButton.OKCancel, MessageBoxImage.Warning);

                if (res == MessageBoxResult.Cancel)
                {
                    File.Delete(Path.Combine(App.ResourcesPath, "config/skills/", filename));
                }
                LoadSkills(c);
                return;
            }
            foreach (var sk in sp.Main)
            {
                MainSkills.Add(sk);
            }
            foreach (var sk in sp.Secondary)
            {
                SecondarySkills.Add(sk);
            }
            foreach (var sk in sp.Hidden)
            {
                HiddenSkills.Add(sk);
            }

            Dispatcher.Invoke(() => SkillsView = CollectionViewUtils.InitLiveView(null, SkillsDatabase.SkillsForClass, new string[] { }, new SortDescription[] { }));
            ((ICollectionView)SkillsView).CollectionChanged += GcStahp;

            N(nameof(SkillsView));
            N(nameof(MainSkills));
            N(nameof(SecondarySkills));
            SkillsLoaded?.Invoke();
            //});
        }
        //internal void AddHiddenSkill(Cooldown context)
        //{
        //    HiddenSkills.Add(context.Skill);
        //    Save();
        //}

        internal void DeleteFixedSkill(Cooldown context)
        {
            if (MainSkills.Contains(context))
            {
                MainSkills.Remove(context);
            }
            else if (SecondarySkills.Contains(context))
            {
                SecondarySkills.Remove(context);
            }

            Save();
        }
Example #6
0
        private void FixedMode_Update(SkillCooldown sk)
        {
            if (Settings.ClassWindowSettings.Enabled && ClassManager.StartSpecialSkill(sk))
            {
                return;
            }
            if (!Settings.CooldownWindowSettings.Enabled)
            {
                return;
            }

            var hSkill = HiddenSkills.ToSyncArray().FirstOrDefault(x => x.IconName == sk.Skill.IconName);

            if (hSkill != null)
            {
                return;
            }

            var skill = MainSkills.FirstOrDefault(x => x.Skill.IconName == sk.Skill.IconName);

            if (skill != null)
            {
                if (sk.Pre)
                {
                    skill.Start(sk.Cooldown, CooldownMode.Pre);
                }
                else
                {
                    skill.Start(sk.Cooldown);
                }
                return;
            }
            skill = SecondarySkills.ToSyncArray().FirstOrDefault(x => x.Skill.IconName == sk.Skill.IconName);
            if (skill != null)
            {
                if (sk.Pre)
                {
                    skill.Start(sk.Cooldown, CooldownMode.Pre);
                }
                else
                {
                    skill.Start(sk.Cooldown);
                }
                return;
            }


            UpdateOther(sk);
        }
        public void ClearSkills()
        {
            ShortSkills.ToList().ForEach(sk => sk.Dispose());
            LongSkills.ToList().ForEach(sk => sk.Dispose());
            MainSkills.ToList().ForEach(sk => sk.Dispose());
            SecondarySkills.ToList().ForEach(sk => sk.Dispose());
            OtherSkills.ToList().ForEach(sk => sk.Dispose());
            ItemSkills.ToList().ForEach(sk => sk.Dispose());

            ShortSkills.Clear();
            LongSkills.Clear();
            MainSkills.Clear();
            SecondarySkills.Clear();
            OtherSkills.Clear();
            ItemSkills.Clear();
            HiddenSkills.Clear();
        }
        private void FixedMode_Remove(Skill sk)
        {
            //sk.SetDispatcher(Dispatcher);
            if (!SettingsHolder.CooldownWindowSettings.Enabled)
            {
                return;
            }

            var skill = MainSkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.IconName);

            if (skill != null)
            {
                skill.Refresh(sk.Id, 0, CooldownMode.Normal);
                return;
            }
            skill = SecondarySkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.IconName);
            if (skill != null)
            {
                skill.Refresh(sk.Id, 0, CooldownMode.Normal);
                return;
            }

            var item = ItemSkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.IconName);

            if (item != null)
            {
                ItemSkills.Remove(item);
                item.Dispose();
                return;
            }

            try
            {
                var otherSkill = OtherSkills.ToSyncList().FirstOrDefault(x => x.Skill.Name == sk.Name);
                if (otherSkill != null)
                {
                    OtherSkills.Remove(otherSkill);
                    otherSkill.Dispose();
                }
            }
            catch
            {
                // ignored
            }
        }
        private void FixedMode_Change(Skill sk, uint cd)
        {
            if (!SettingsHolder.CooldownWindowSettings.Enabled)
            {
                return;
            }
            if (SettingsHolder.ClassWindowSettings.Enabled && ClassManager.ChangeSpecialSkill(sk, cd))
            {
                return;
            }

            var hSkill = HiddenSkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.IconName);

            if (hSkill != null)
            {
                return;
            }


            var skill = MainSkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.IconName);

            if (skill != null)
            {
                skill.Refresh(sk.Id, cd, CooldownMode.Normal);
                return;
            }
            skill = SecondarySkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.IconName);
            if (skill != null)
            {
                skill.Refresh(sk.Id, cd, CooldownMode.Normal);
                return;
            }
            try
            {
                var otherSkill = OtherSkills.ToSyncList().FirstOrDefault(x => x.Skill.Name == sk.Name); //TODO: shouldn't this check on IconName???
                //OtherSkills.Remove(otherSkill);
                otherSkill?.Refresh(sk.Id, cd, CooldownMode.Normal);
            }
            catch
            {
                // ignored
            }
        }
Example #10
0
        private void FixedMode_Change(Skill sk, uint cd)
        {
            if (!Settings.CooldownWindowSettings.Enabled)
            {
                return;
            }
            if (Settings.ClassWindowSettings.Enabled && ClassManager.ChangeSpecialSkill(sk, cd))
            {
                return;
            }

            var hSkill = HiddenSkills.ToSyncArray().FirstOrDefault(x => x.IconName == sk.IconName);

            if (hSkill != null)
            {
                return;
            }


            var skill = MainSkills.ToSyncArray().FirstOrDefault(x => x.Skill.IconName == sk.IconName);

            if (skill != null)
            {
                skill.Refresh(cd);
                return;
            }
            skill = SecondarySkills.ToSyncArray().FirstOrDefault(x => x.Skill.IconName == sk.IconName);
            if (skill != null)
            {
                skill.Refresh(cd);
                return;
            }
            try
            {
                var otherSkill = OtherSkills.ToSyncArray().FirstOrDefault(x => x.Skill.Name == sk.Name);
                //OtherSkills.Remove(otherSkill);
                otherSkill?.Refresh(cd);
            }
            catch
            {
                // ignored
            }
        }
        private bool FixedMode_Update(Cooldown sk)
        {
            if (SettingsHolder.ClassWindowSettings.Enabled && ClassManager.StartSpecialSkill(sk))
            {
                return(false);
            }

            if (!SettingsHolder.CooldownWindowSettings.Enabled)
            {
                return(false);
            }

            var hSkill = HiddenSkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.Skill.IconName);

            if (hSkill != null)
            {
                return(false);
            }

            var skill = MainSkills.FirstOrDefault(x => x.Skill.IconName == sk.Skill.IconName);

            if (skill != null)
            {
                if (skill.Duration == sk.Duration && !skill.IsAvailable && sk.Mode == skill.Mode)
                {
                    return(false);
                }
                skill.Start(sk);
                return(true);
            }
            skill = SecondarySkills.ToSyncList().FirstOrDefault(x => x.Skill.IconName == sk.Skill.IconName);
            if (skill != null)
            {
                if (skill.Duration == sk.Duration && !skill.IsAvailable && sk.Mode == skill.Mode)
                {
                    return(false);
                }
                skill.Start(sk);
                return(true);
            }
            return(UpdateOther(sk));
        }
        public void ClearSkills()
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                ShortSkills.ToList().ForEach(sk => sk.Dispose());
                LongSkills.ToList().ForEach(sk => sk.Dispose());
                MainSkills.ToList().ForEach(sk => sk.Dispose());
                SecondarySkills.ToList().ForEach(sk => sk.Dispose());
                OtherSkills.ToList().ForEach(sk => sk.Dispose());
                ItemSkills.ToList().ForEach(sk => sk.Dispose());

                ShortSkills.Clear();
                LongSkills.Clear();
                MainSkills.Clear();
                SecondarySkills.Clear();
                OtherSkills.Clear();
                ItemSkills.Clear();
                HiddenSkills.Clear();
            }));
        }
        private static int sequenceID = 0;// Генератор уникального кода героя

        public Creature(TypeCreature tc, BattleParticipant bp)
        {
            TypeCreature      = tc;
            BattleParticipant = bp;
            ID = ++sequenceID;

            StateCreature = TypeCreature.PersistentStateHeroAtMap;

            // Применяем дефолтные способности
            Abilities.AddRange(TypeCreature.Abilities);
            Specialization = FormMain.Config.FindSpecialization("SpeedMove");
            SecondarySkills.Add(FormMain.Config.FindSecondarySkill("Health"));

            // Берем оружие и доспехи
            MeleeWeapon = TypeCreature.WeaponMelee;
            RangeWeapon = TypeCreature.WeaponRange;
            Armour      = TypeCreature.Armour;

            if (TypeCreature.MaxLevel > 1)
            {
                Level = 0;

                ParametersBase = new HeroParameters(TypeCreature.ParametersByHire);

                // Переходим на 1 уровень
                LevelUp();
                ParametersWithAmmunition = new HeroParameters(ParametersBase);

                //
                UpdateBaseParameters();
            }
            else
            {
                Level = 1;
            }
        }
Example #14
0
        internal void Save()
        {
            var root = new XElement("Skills");

            MainSkills.ToList().ForEach(mainSkill =>
            {
                var tag = mainSkill.CooldownType.ToString();
                root.Add(new XElement(tag, new XAttribute("id", mainSkill.Skill.Id), new XAttribute("row", 1), new XAttribute("name", mainSkill.Skill.ShortName)));
            });
            SecondarySkills.ToList().ForEach(secSkill =>
            {
                var tag = secSkill.CooldownType.ToString();
                root.Add(new XElement(tag, new XAttribute("id", secSkill.Skill.Id), new XAttribute("row", 2), new XAttribute("name", secSkill.Skill.ShortName)));
            });
            HiddenSkills.ToList().ForEach(sk =>
            {
                root.Add(new XElement("Skill", new XAttribute("id", sk.Id), new XAttribute("row", 3), new XAttribute("name", sk.ShortName)));
            });
            if (SessionManager.CurrentPlayer.Class > (Class)12)
            {
                return;
            }
            root.Save(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "resources/config/skills", $"{Utils.ClassEnumToString(SessionManager.CurrentPlayer.Class).ToLower()}-skills.xml"));
        }
Example #15
0
        public void ResetSkill(Skill skill)
        {
            if (!Settings.CooldownWindowSettings.Enabled)
            {
                return;
            }
            if (Settings.CooldownBarMode == CooldownBarMode.Normal)
            {
                return;
            }

            var sk = MainSkills.FirstOrDefault(x => x.Skill.IconName == skill.IconName) ?? SecondarySkills.FirstOrDefault(x => x.Skill.IconName == skill.IconName);

            sk?.ProcReset();
        }
 public void ResetSkill(Skill skill)
 {
     if (!SettingsHolder.CooldownWindowSettings.Enabled)
     {
         return;
     }
     if (SettingsHolder.CooldownBarMode == CooldownBarMode.Normal)
     {
         return;
     }
     Dispatcher.BeginInvoke(new Action(() =>
     {
         if (ClassManager.ResetSpecialSkill(skill))
         {
             return;
         }
         var sk = MainSkills.FirstOrDefault(x => x.Skill.IconName == skill.IconName) ?? SecondarySkills.FirstOrDefault(x => x.Skill.IconName == skill.IconName);
         sk?.ProcReset();
     }));
 }
        //private PrivateFontCollection pfc = new PrivateFontCollection();
        //private FontFamily ffMajesty2;

        public Config(string pathResources, FormMain fm)
        {
            FormMain.Config = this;
            PathResources   = pathResources;

            //
            MaxLevelSkill = 3;

            //
            XmlDocument xmlDoc;

            // Загружаем конфигурацию игры
            xmlDoc = CreateXmlDocument("Config\\Game.xml");
            LoadConfigGame(xmlDoc);

            // Загрузка конфигураций лобби
            xmlDoc = CreateXmlDocument("Config\\TypeLobby.xml");
            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeLobbies/TypeLobby"))
            {
                TypeLobbies.Add(new TypeLobby(n));
            }

            // Загрузка конфигурации гильдий
            xmlDoc = CreateXmlDocument(@"Config\TypeGuilds.xml");
            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeGuilds/TypeGuild"))
            {
                TypeGuilds.Add(new TypeGuild(n));
            }

            // Загрузка конфигурации экономических зданий
            xmlDoc = CreateXmlDocument(@"Config\TypeEconomicConstructions.xml");
            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeConstructionEconomics/TypeConstructionEconomic"))
            {
                TypeEconomicConstructions.Add(new TypeEconomicConstruction(n));
            }

            // Загрузка конфигурации храмов
            xmlDoc = CreateXmlDocument(@"Config\TypeTemples.xml");
            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeTemples/TypeTemple"))
            {
                TypeTemples.Add(new TypeTemple(n));
            }

            // Загрузка логов монстров
            xmlDoc = CreateXmlDocument("Config\\TypeLairs.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeLairs/TypeLair"))
            {
                TypeLairs.Add(new TypeLair(n));
            }

            // Создаем единую конфигурацию сооружений
            TypeConstructionsOfKingdom.AddRange(TypeGuilds);
            TypeConstructionsOfKingdom.AddRange(TypeEconomicConstructions);
            TypeConstructionsOfKingdom.AddRange(TypeTemples);
            TypeConstructions.AddRange(TypeConstructionsOfKingdom);
            TypeConstructions.AddRange(TypeLairs);

            // Загрузка предметов
            xmlDoc = CreateXmlDocument("Config\\Items.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/Items/Item"))
            {
                Items.Add(new Item(n));
            }

            // Загрузка оружия
            xmlDoc = CreateXmlDocument("Config\\Weapons.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/GroupWeapons/GroupWeapon"))
            {
                GroupWeapons.Add(new GroupWeapon(n));
            }

            // Загрузка доспехов
            xmlDoc = CreateXmlDocument("Config\\Armours.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/GroupArmours/GroupArmour"))
            {
                GroupArmours.Add(new GroupArmour(n));
            }

            // Загрузка конфигурации способностей
            xmlDoc = CreateXmlDocument("Config\\Abilities.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/Abilities/Ability"))
            {
                Abilities.Add(new Ability(n));
            }

            // Загрузка конфигурации специализаций
            xmlDoc = CreateXmlDocument(@"Config\Specializations.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/Specializations/Specialization"))
            {
                Specializations.Add(new Specialization(n));
            }

            // Загрузка конфигурации вторичных навыков
            xmlDoc = CreateXmlDocument(@"Config\SecondarySkills.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/SecondarySkills/SecondarySkill"))
            {
                SecondarySkills.Add(new SecondarySkill(n));
            }

            // Загрузка конфигурации состояний существ
            xmlDoc = CreateXmlDocument(@"Config\StateCreature.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/StatesCreature/StateCreature"))
            {
                StatesCreature.Add(new StateCreature(n));
            }

            // Загрузка конфигурации типов существ
            xmlDoc = CreateXmlDocument("Config\\KindCreatures.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/KindCreatures/KindCreature"))
            {
                KindCreatures.Add(new KindCreature(n));
            }

            // Загрузка конфигурации горожан
            xmlDoc = CreateXmlDocument("Config\\TypeCitizens.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeCitizens/TypeCitizen"))
            {
                TypeCitizens.Add(new TypeCitizen(n));
            }

            // Загрузка конфигурации героев
            xmlDoc = CreateXmlDocument("Config\\TypeHeroes.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeHeroes/TypeHero"))
            {
                TypeHeroes.Add(new TypeHero(n));
            }

            // Загрузка монстров
            xmlDoc = CreateXmlDocument("Config\\TypeMonsters.xml");

            foreach (XmlNode n in xmlDoc.SelectNodes("/TypeMonsters/TypeMonster"))
            {
                TypeMonsters.Add(new TypeMonster(n));
            }

            // Составляем общий пул существ
            TypeCreatures.AddRange(TypeHeroes);
            TypeCreatures.AddRange(TypeCitizens);
            TypeCreatures.AddRange(TypeMonsters);

            // Настраиваем связи
            foreach (Ability a in Abilities)
            {
                a.TuneDeferredLinks();
            }

            foreach (Specialization s in Specializations)
            {
                s.TuneDeferredLinks();
            }

            foreach (SecondarySkill ss in SecondarySkills)
            {
                ss.TuneDeferredLinks();
            }

            foreach (GroupWeapon gw in GroupWeapons)
            {
                gw.TuneDeferredLinks();
            }

            foreach (GroupArmour ga in GroupArmours)
            {
                ga.TuneDeferredLinks();
            }

            foreach (TypeCreature tc in TypeCreatures)
            {
                tc.TuneDeferredLinks();
            }

            foreach (TypeMapObject tc in TypeConstructions)
            {
                tc.TuneDeferredLinks();
            }

            foreach (TypeLobby tl in TypeLobbies)
            {
                tl.TuneDeferredLinks();
            }

            //foreach (TypeLair l in TypeLairs)
            //    l.TuneDeferredLinks();

            // Вспомогательные методы
            XmlDocument CreateXmlDocument(string pathToXml)
            {
                XmlDocument doc = new XmlDocument();

                doc.Load(pathResources + pathToXml);
                return(doc);
            }
        }