Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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;
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        /// <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);
        }