示例#1
0
        private void EnsureMessageTableIntegrity()
        {
            if (MessageFiles == null)
            {
                return;
            }

            List <TableFile> filesToRemove = new List <TableFile>();

            foreach (TableFile messageFile in MessageFiles)
            {
                bool removeFile = true;
                foreach (BaseTable table in messageFile.Tables)
                {
                    if (table is MessageTable)
                    {
                        removeFile = false;
                    }
                }

                if (removeFile)
                {
                    filesToRemove.Add(messageFile);
                }
            }

            foreach (TableFile file in filesToRemove)
            {
                MessageFiles.Remove(file);
            }
        }
示例#2
0
        public TableFile GetMessageFile(string filename)
        {
            filename = (Version == Versions.European ? string.Format("{0}{1}", filename, LanguageSuffixes[Language]) : filename);
            TableFile messageFile = MessageFiles.FirstOrDefault(x => x.Filename != null && Path.GetFileName(x.Filename).StartsWith(filename));

            if (messageFile == null)
            {
                throw new ArgumentException("Message file could not be found");
            }
            return(messageFile);
        }
示例#3
0
        private List <ArchiveFile> ReadArchiveFiles(string[] directories)
        {
            if (directories == null)
            {
                throw new ArgumentNullException("Directories is null");
            }

            archives = new List <ArchiveFile>();

            foreach (string directory in directories)
            {
                string localDataPath = Path.Combine(DataPath, directory);
                if (!Directory.Exists(localDataPath))
                {
                    continue;
                }

                List <string> filePaths = Directory.EnumerateFiles(localDataPath, "*.bin", SearchOption.AllDirectories).ToList();
                foreach (string filePath in filePaths)
                {
                    loadWaitWorker.ReportProgress(-1, string.Format("Reading {0}...", Path.GetFileName(filePath)));

                    ArchiveFile archive = new ArchiveFile(this, filePath);
                    archives.Add(archive);
                }
            }

            foreach (ArchiveFile archive in archives)
            {
                foreach (TableFile tableFile in archive.Blocks.Where(x => x is TableFile))
                {
                    if (tableFile.Tables.Any(x => x is MessageTable))
                    {
                        MessageFiles.Add(tableFile);
                    }
                }
            }

            return(archives.OrderBy(x => x.Filename).ToList());
        }
示例#4
0
        public void GameDataPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (sender is BaseParser || sender is EtrianString)
            {
                if (sender is BaseParser)
                {
                    changedParsedData = ParsedData.Where(x => x.HasChanged).ToList();
                }

                changedMessageFiles = MessageFiles.Where(x => x.Tables.Any(y => (y is MessageTable) && (y as MessageTable).HasChanges)).ToList();
            }

            if (sender is BaseTile)
            {
                changedMapTileData.Clear();
                foreach (KeyValuePair <MapDataFile, BaseTile[, ]> pair in MapTileData)
                {
                    for (int y = 0; y < MapDataFile.MapHeight; y++)
                    {
                        for (int x = 0; x < MapDataFile.MapWidth; x++)
                        {
                            if (pair.Value[x, y].HasChanged)
                            {
                                MapDataFile.TileTypes typeId = pair.Value[x, y].TileType;

                                if (MapDataFile.TileTypeClassMapping.ContainsKey(typeId))
                                {
                                    pair.Value[x, y] = (BaseTile)Activator.CreateInstance(MapDataFile.TileTypeClassMapping[typeId], new object[] { pair.Value[x, y], typeId });
                                }
                                else
                                {
                                    pair.Value[x, y] = new BaseTile(pair.Value[x, y], typeId);
                                }

                                changedMapTileData.Add(pair.Value[x, y]);
                            }
                        }
                    }
                }
            }

            if (sender is EncounterParser)
            {
                GenerateOtherDictionaries();
            }

            if (sender.GetProperty(e.PropertyName) is string)
            {
                if (sender is BaseItemParser)
                {
                    BaseItemParser parser = (sender as BaseItemParser);
                    ItemNames[parser.ItemNumber]        = parser.Name;
                    ItemDescriptions[parser.ItemNumber] = parser.Description;

                    SetMessageString(ItemNameFile, 0, parser.ItemNumber - 1, parser.Name);
                    SetMessageString(ItemInfoFile, 0, parser.ItemNumber - 1, parser.Description);
                }

                if (sender is EnemyDataParser)
                {
                    EnemyDataParser parser = (sender as EnemyDataParser);
                    EnemyNames[parser.EnemyNumber]        = parser.Name;
                    EnemyDescriptions[parser.EnemyNumber] = parser.Description;

                    SetMessageString(EnemyNameFile, 0, parser.EnemyNumber - 1, parser.Name);
                    SetMessageString(EnemyInfoFile, 0, parser.EnemyNumber - 1, parser.Description);

                    GenerateOtherDictionaries();
                }

                if (sender is PlayerSkillReqParser)
                {
                    PlayerSkillReqParser parser = (sender as PlayerSkillReqParser);
                    PlayerSkillNames[parser.SkillNumber]             = parser.Name;
                    PlayerSkillShortDescriptions[parser.SkillNumber] = parser.ShortDescription;
                    PlayerSkillDescriptions[parser.SkillNumber]      = parser.Description;

                    SetMessageString(PlayerSkillNameFile, 0, parser.SkillNumber - 1, parser.Name);
                    SetMessageString(CampSkillExeInfoFile, 0, parser.SkillNumber - 1, parser.ShortDescription);
                    SetMessageString(CampSkillInfoFile, 0, parser.SkillNumber - 1, parser.Description);
                }
            }

            GameDataPropertyChangedEvent?.Invoke(sender, e);
        }