/// <summary>
        /// Writes the WzImage object to the underlying WzBinaryWriter
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="forceReadFromData">Read from data regardless of base data that's changed or not.</param>
        public void SaveImage(WzBinaryWriter writer, bool forceReadFromData = false)
        {
            if (changed || forceReadFromData)
            {
                if (reader != null && !parsed)
                {
                    this.ParseEverything = true;
                    ParseImage(forceReadFromData);
                }

                WzSubProperty imgProp  = new WzSubProperty();
                long          startPos = writer.BaseStream.Position;
                imgProp.AddPropertiesForWzImageDumping(WzProperties);
                imgProp.WriteValue(writer);
                writer.StringCache.Clear();
                size = (int)(writer.BaseStream.Position - startPos);
            }
            else
            {
                long pos = reader.BaseStream.Position;
                reader.BaseStream.Position = offset;
                writer.Write(reader.ReadBytes(size));
                reader.BaseStream.Position = pos;
            }
        }
示例#2
0
        /// <summary>
        /// Writes the WzImage object to the underlying WzBinaryWriter
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="bIsWzUserKeyDefault">Uses the default MapleStory UserKey or a custom key.</param>
        /// <param name="forceReadFromData">Read from data regardless of base data that's changed or not.</param>
        public void SaveImage(WzBinaryWriter writer, bool bIsWzUserKeyDefault = true, bool forceReadFromData = false)
        {
            if (bIsImageChanged ||
                !bIsWzUserKeyDefault || //  everything needs to be re-written when a custom UserKey is used
                forceReadFromData)      // if its not being force-read and written, it saves with the previous WZ encryption IV.
            {
                if (reader != null && !parsed)
                {
                    this.ParseEverything = true;
                    ParseImage(forceReadFromData);
                }

                WzSubProperty imgProp = new WzSubProperty();

                long startPos = writer.BaseStream.Position;
                imgProp.AddPropertiesForWzImageDumping(WzProperties);
                imgProp.WriteValue(writer);

                writer.StringCache.Clear();

                size = (int)(writer.BaseStream.Position - startPos);
            }
            else
            {
                long pos = reader.BaseStream.Position;
                reader.BaseStream.Position = offset;
                writer.Write(reader.ReadBytes(size));
                reader.BaseStream.Position = pos;
            }
        }