private DataTable _LoadStringsTable() { ObjectDelegator objectDelegator; if (!DataFileDelegators.TryGetValue("Strings_Strings", out objectDelegator)) { return(null); } DataTable dataTable = XlsDataSet.Tables[StringsTableName]; if (dataTable != null) { return(dataTable); } dataTable = XlsDataSet.Tables.Add(StringsTableName); dataTable.TableName = StringsTableName; Type dataType = typeof(StringsFile.StringBlock); FieldInfo[] fieldInfos = dataType.GetFields(); // generate columns foreach (FieldInfo fieldInfo in fieldInfos) { dataTable.Columns.Add(fieldInfo.Name, fieldInfo.FieldType); } // we want all strings within a single table foreach (DataFile dataFile in DataFiles.Values) { if (!dataFile.IsStringsFile) { continue; } StringsFile stringsFile = (StringsFile)dataFile; // generate rows foreach (StringsFile.StringBlock tableRow in stringsFile.Rows) { DataRow dataRow = dataTable.NewRow(); int col = 0; foreach (FieldInfo fieldInfo in fieldInfos) { dataRow[col++] = objectDelegator[fieldInfo.Name](tableRow); } dataTable.Rows.Add(dataRow); } } return(dataTable); }
/// <summary> /// Loads all of the available Excel and Strings files to a hashtable. /// </summary> /// <returns>Returns true on success.</returns> public bool LoadTableFiles(bool ignorePatchedOut = false) { // want excel files and strings files foreach (PackFileEntry fileEntry in FileEntries.Values.Where(fileEntry => fileEntry.Name.EndsWith(ExcelFile.Extension) || (fileEntry.Name.EndsWith(StringsFile.Extention) && fileEntry.Path.Contains(Language)))) { byte[] fileBytes = GetFileBytes(fileEntry, ignorePatchedOut); if (fileBytes == null) { Debug.WriteLine("Warning: Failed to read file bytes in LoadTableFiles(). FileEntry = " + fileEntry.Name); continue; } //if (fileEntry.Name.Contains("stats")) //{ // int bp = 0; //} // parse file data DataFile dataFile; try { if (fileEntry.Name.EndsWith(ExcelFile.Extension)) { dataFile = new ExcelFile(fileBytes, fileEntry.Path, ClientVersion); } else { dataFile = new StringsFile(fileBytes, fileEntry.Path); } } catch (Exceptions.DataFileStringIdNotFound dataFileStringIdNotFound) { Debug.WriteLine(dataFileStringIdNotFound.ToString()); ExceptionLogger.LogException(dataFileStringIdNotFound); continue; } catch (Exception ex) { Debug.WriteLine(ex.ToString()); ExceptionLogger.LogException(ex); Console.WriteLine(String.Format("Critical Error: Failed to load data file {0} (ClientVersion = {1})", fileEntry.Name, ClientVersion)); continue; } if (!dataFile.HasIntegrity) { String failedParse = "Error: Failed to load data file: " + dataFile.StringId; Debug.WriteLine(failedParse); // Console.WriteLine randomly (more often than not) just doesn't output to the Ouput window in VS during debugging Console.WriteLine(failedParse); continue; } if (dataFile.Attributes.IsEmpty) continue; try { DataFiles.Add(dataFile.StringId, dataFile); DataFileDelegators.Add(dataFile.StringId, dataFile.Delegator); // not sure if we need this still... } catch (Exception e) { Debug.WriteLine("Critical Error: Cannot add table data file to dictionary: " + dataFile + "\n" + e); Console.WriteLine("Critical Error: Cannot add table data file to dictionary: " + dataFile + "\n" + e); } } Debug.WriteLine("Loaded {0} {1} data files.", DataFiles.Count, ClientVersion); return true; }
public static bool CookStringFile(string stringPath) { byte[] stringsBuffer = null; try { stringsBuffer = File.ReadAllBytes(stringPath); } catch (Exception ex) { ExceptionLogger.LogException(ex); Console.WriteLine(String.Format("Error reading file {0}", stringPath)); return false; } StringsFile stringsFile = new StringsFile(stringsBuffer, Path.GetFileName(stringPath).ToUpper()); if (stringsFile.HasIntegrity == false) { Console.WriteLine(String.Format("Failed to parse strings file {0}", stringPath)); return false; } Console.WriteLine(String.Format("Cooking {0}", Path.GetFileNameWithoutExtension(stringPath))); stringsBuffer = stringsFile.ToByteArray(); if (stringsBuffer == null) { Console.WriteLine(String.Format("Failed to serialize strings file {0}", stringsFile.StringId)); return false; } String writeToPath = stringPath + ".cooked"; try { File.WriteAllBytes(writeToPath, stringsBuffer); } catch (Exception ex) { ExceptionLogger.LogException(ex); Console.WriteLine(String.Format("Failed to write cooked file {0} ", writeToPath)); return false; } return true; }
/// <summary> /// Loads all of the available Excel and Strings files to a hashtable. /// </summary> /// <returns>Returns true on success.</returns> public bool LoadTableFiles(bool ignorePatchedOut = false) { // want excel files and strings files foreach (PackFileEntry fileEntry in FileEntries.Values.Where(fileEntry => fileEntry.Name.EndsWith(ExcelFile.Extension) || (fileEntry.Name.EndsWith(StringsFile.Extention) && fileEntry.Path.Contains(Language)))) { byte[] fileBytes = GetFileBytes(fileEntry, ignorePatchedOut); if (fileBytes == null) { Debug.WriteLine("Warning: Failed to read file bytes in LoadTableFiles(). FileEntry = " + fileEntry.Name); continue; } //if (fileEntry.Name.Contains("stats")) //{ // int bp = 0; //} // parse file data DataFile dataFile; try { if (fileEntry.Name.EndsWith(ExcelFile.Extension)) { dataFile = new ExcelFile(fileBytes, fileEntry.Path, ClientVersion); } else { dataFile = new StringsFile(fileBytes, fileEntry.Path); } } catch (Exceptions.DataFileStringIdNotFound dataFileStringIdNotFound) { Debug.WriteLine(dataFileStringIdNotFound.ToString()); ExceptionLogger.LogException(dataFileStringIdNotFound); continue; } catch (Exception ex) { Debug.WriteLine(ex.ToString()); ExceptionLogger.LogException(ex); Console.WriteLine(String.Format("Critical Error: Failed to load data file {0} (ClientVersion = {1})", fileEntry.Name, ClientVersion)); continue; } if (!dataFile.HasIntegrity) { String failedParse = "Error: Failed to load data file: " + dataFile.StringId; Debug.WriteLine(failedParse); // Console.WriteLine randomly (more often than not) just doesn't output to the Ouput window in VS during debugging Console.WriteLine(failedParse); continue; } if (dataFile.Attributes.IsEmpty) { continue; } try { DataFiles.Add(dataFile.StringId, dataFile); DataFileDelegators.Add(dataFile.StringId, dataFile.Delegator); // not sure if we need this still... } catch (Exception e) { Debug.WriteLine("Critical Error: Cannot add table data file to dictionary: " + dataFile + "\n" + e); Console.WriteLine("Critical Error: Cannot add table data file to dictionary: " + dataFile + "\n" + e); } } Debug.WriteLine("Loaded {0} {1} data files.", DataFiles.Count, ClientVersion); return(true); }