Beispiel #1
0
        /// <summary>
        /// Loads the default compendium.
        /// </summary>
        public void LoadDefaultCompendium()
        {
            XMLImporter importer = DependencyResolver.Resolve <XMLImporter>();

            importer.LoadManifestResourceXML("default_compendium.xml");

            _backgrounds = importer.ReadBackgrounds();
            _classes     = importer.ReadClasses();
            _conditions  = importer.ReadConditions();
            _feats       = importer.ReadFeats();
            _items       = importer.ReadItems();
            _monsters    = importer.ReadMonsters();
            _races       = importer.ReadRaces();
            _spells      = importer.ReadSpells();

            _languages = importer.LanguagesFound;
        }
        private void RestoreDefaultCompendium()
        {
            string message = "IMPORTANT!" + Environment.NewLine + Environment.NewLine +
                             "This cannot be undone!" + Environment.NewLine + Environment.NewLine +
                             "Restoring your default compendium will remove any custom or imported entries to your compendium. " +
                             "Characters, Encounters, and any custom content they contain will not be removed but may be replaced." + Environment.NewLine + Environment.NewLine +
                             "Are you sure you want to restore the default compendium?";

            bool?result = _dialogService.ShowConfirmationDialog("Restore Default Compendium", message, "Yes", "No", null);

            if (result == true)
            {
                XMLImporter importer = new XMLImporter(_stringService);
                importer.LoadManifestResourceXML("default_compendium.xml");

                List <BackgroundModel> backgrounds = importer.ReadBackgrounds();
                List <ClassModel>      classes     = importer.ReadClasses();
                List <ConditionModel>  conditions  = importer.ReadConditions();
                List <FeatModel>       feats       = importer.ReadFeats();
                List <ItemModel>       items       = importer.ReadItems();
                List <MonsterModel>    monsters    = importer.ReadMonsters();
                List <RaceModel>       races       = importer.ReadRaces();
                List <SpellModel>      spells      = importer.ReadSpells();
                List <LanguageModel>   languages   = importer.LanguagesFound;

                foreach (CharacterModel character in _compendium.Characters)
                {
                    if (character.Background != null &&
                        !backgrounds.Any(x => x.Name.Equals(character.Background.Name, StringComparison.CurrentCultureIgnoreCase)))
                    {
                        backgrounds.Add(character.Background);
                    }

                    if (character.Race != null &&
                        !races.Any(x => x.Name.Equals(character.Race.Name, StringComparison.CurrentCultureIgnoreCase)))
                    {
                        races.Add(character.Race);
                    }

                    foreach (LevelModel level in character.Levels)
                    {
                        if (level.Class != null)
                        {
                            ClassModel defaultClass = classes.FirstOrDefault(x => x.Name.Equals(level.Class.Name, StringComparison.CurrentCultureIgnoreCase));
                            if (defaultClass == null)
                            {
                                classes.Add(level.Class);
                            }
                            else
                            {
                                if (defaultClass.AutoLevels.Count != level.Class.AutoLevels.Count)
                                {
                                    classes.Add(level.Class);
                                }
                                else
                                {
                                    for (int i = 0; i < level.Class.AutoLevels.Count; ++i)
                                    {
                                        if (level.Class.AutoLevels[i].Features.Count != defaultClass.AutoLevels[i].Features.Count)
                                        {
                                            classes.Add(level.Class);
                                            break;
                                        }
                                    }
                                }
                            }
                        }

                        foreach (FeatModel feat in level.Feats)
                        {
                            if (!feats.Any(x => x.Name.Equals(feat.Name, StringComparison.CurrentCultureIgnoreCase)))
                            {
                                feats.Add(feat);
                            }
                        }
                    }

                    foreach (LanguageModel language in character.Languages)
                    {
                        if (!languages.Any(x => x.Name.Equals(language.Name, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            languages.Add(language);
                        }
                    }

                    foreach (AppliedConditionModel appliedCondition in character.Conditions)
                    {
                        if (appliedCondition.ConditionModel != null &&
                            !conditions.Any(x => x.Name.Equals(appliedCondition.ConditionModel.Name, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            conditions.Add(appliedCondition.ConditionModel);
                        }
                    }

                    foreach (CompanionModel companion in character.Companions)
                    {
                        if (companion.MonsterModel != null &&
                            !monsters.Any(x => x.Name.Equals(companion.MonsterModel.Name, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            monsters.Add(companion.MonsterModel);
                        }
                    }

                    foreach (BagModel bag in character.Bags)
                    {
                        foreach (EquipmentModel equipment in bag.Equipment)
                        {
                            if (equipment.Item != null &&
                                !items.Any(x => x.Name.Equals(equipment.Item.Name, StringComparison.CurrentCultureIgnoreCase)))
                            {
                                items.Add(equipment.Item);
                            }
                        }
                    }

                    foreach (SpellbookModel spellbook in character.Spellbooks)
                    {
                        foreach (SpellbookEntryModel spellbookEntry in spellbook.Spells)
                        {
                            if (spellbookEntry.Spell != null &&
                                !spells.Any(x => x.Name.Equals(spellbookEntry.Spell.Name, StringComparison.CurrentCultureIgnoreCase)))
                            {
                                spells.Add(spellbookEntry.Spell);
                            }
                        }
                    }
                }

                foreach (EncounterModel encounter in _compendium.Encounters)
                {
                    foreach (EncounterMonsterModel encounterMonster in encounter.Creatures.Where(x => x is EncounterMonsterModel))
                    {
                        if (encounterMonster.MonsterModel != null &&
                            !monsters.Any(x => x.Name.Equals(encounterMonster.MonsterModel.Name, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            monsters.Add(encounterMonster.MonsterModel);
                        }
                    }
                }

                _compendium.SetCompendium(backgrounds, classes, conditions, feats, items, languages, monsters, races, spells);

                _compendium.SaveBackgrounds();
                _compendium.SaveClasses();
                _compendium.SaveConditions();
                _compendium.SaveFeats();
                _compendium.SaveItems();
                _compendium.SaveMonsters();
                _compendium.SaveRaces();
                _compendium.SaveSpells();
                _compendium.SaveLanguages();

                _compendium.NotifyImportComplete();

                base.OnAccept();
            }
        }