private static void ReadLocaleChanges(IReader reader, byte version, Patch output)
        {
            if (version > 0)
            {
                throw new NotSupportedException("Unrecognized \"locl\" block version");
            }

            // Read language changes
            byte numLanguageChanges = reader.ReadByte();

            for (byte i = 0; i < numLanguageChanges; i++)
            {
                byte languageIndex  = reader.ReadByte();
                var  languageChange = new LanguageChange(languageIndex);

                // Read string changes
                int numStringChanges = reader.ReadInt32();
                for (int j = 0; j < numStringChanges; j++)
                {
                    int    index    = reader.ReadInt32();
                    string newValue = reader.ReadUTF8();
                    languageChange.LocaleChanges.Add(new LocaleChange(index, newValue));
                }

                output.LanguageChanges.Add(languageChange);
            }
        }
        /// <summary>
        /// Writes changes to a language in a cache file.
        /// Note that ICacheFile.SaveChanges() may need to be called after this.
        /// </summary>
        /// <param name="changes">The changes to make to the language.</param>
        /// <param name="cacheFile">The cache file to write changes to.</param>
        /// <param name="stream">The stream to write changes to.</param>
        public static void WriteLanguageChange(LanguageChange changes, ICacheFile cacheFile, IStream stream)
        {
            if (changes.LanguageIndex >= cacheFile.Languages.Count)
                throw new ArgumentException("Language changes cannot be applied to undefined languages in a cache file");

            // Load the language table and apply the changes
            var language = cacheFile.Languages[changes.LanguageIndex];
            var table = language.LoadStrings(stream);
            MakeLocaleChanges(changes.LocaleChanges, table);

            // Write the table back to the file
            language.SaveStrings(stream, table);
        }
Exemple #3
0
        /// <summary>
        ///     Writes changes to a language in a cache file.
        ///     Note that ICacheFile.SaveChanges() may need to be called after this.
        /// </summary>
        /// <param name="changes">The changes to make to the language.</param>
        /// <param name="cacheFile">The cache file to write changes to.</param>
        /// <param name="stream">The stream to write changes to.</param>
        public static void WriteLanguageChange(LanguageChange changes, ICacheFile cacheFile, IStream stream)
        {
            throw new NotImplementedException("Legacy locale patching is not supported at the moment");

            /*if (changes.LanguageIndex >= cacheFile.Languages.Count)
             * throw new ArgumentException("Language changes cannot be applied to undefined languages in a cache file");
             *
             * // Load the language table and apply the changes
             * var language = cacheFile.Languages[changes.LanguageIndex];
             * var table = language.LoadStrings(stream);
             * MakeLocaleChanges(changes.LocaleChanges, table);
             *
             * // Write the table back to the file
             * language.SaveStrings(stream, table);*/
        }
        private static void ReadLocaleChanges(IReader reader, Patch output)
        {
            // Read language changes
            byte numLanguageChanges = reader.ReadByte();

            for (byte i = 0; i < numLanguageChanges; i++)
            {
                byte languageIndex  = reader.ReadByte();
                var  languageChange = new LanguageChange(languageIndex);

                // Read string changes
                int numStringChanges = reader.ReadInt32();
                for (int j = 0; j < numStringChanges; j++)
                {
                    int    index    = reader.ReadInt32();
                    string newValue = reader.ReadUTF8();
                    languageChange.LocaleChanges.Add(new LocaleChange(index, newValue));
                }

                output.LanguageChanges.Add(languageChange);
            }
        }
        private static void ReadLocaleChanges(IReader reader, Patch output)
        {
            // ReSharper disable UnusedVariable
            var version = reader.ReadByte();
            // ReSharper restore UnusedVariable

            // Read language changes
            var numLanguageChanges = reader.ReadByte();
            for (byte i = 0; i < numLanguageChanges; i++)
            {
                var languageIndex = reader.ReadByte();
                var languageChange = new LanguageChange(languageIndex);

                // Read string changes
                var numStringChanges = reader.ReadInt32();
                for (var j = 0; j < numStringChanges; j++)
                {
                    var index = reader.ReadInt32();
                    var newValue = reader.ReadUTF8();
                    languageChange.LocaleChanges.Add(new LocaleChange(index, newValue));
                }

                output.LanguageChanges.Add(languageChange);
            }
        }
		private static void ReadLocaleChanges(IReader reader, Patch output)
		{
			// Read language changes
			byte numLanguageChanges = reader.ReadByte();
			for (byte i = 0; i < numLanguageChanges; i++)
			{
				byte languageIndex = reader.ReadByte();
				var languageChange = new LanguageChange(languageIndex);

				// Read string changes
				int numStringChanges = reader.ReadInt32();
				for (int j = 0; j < numStringChanges; j++)
				{
					int index = reader.ReadInt32();
					string newValue = reader.ReadUTF8();
					languageChange.LocaleChanges.Add(new LocaleChange(index, newValue));
				}

				output.LanguageChanges.Add(languageChange);
			}
		}