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); } }
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); }
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()); }
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); }