public Enhancement Read()
        {
            var enhancement = new Enhancement();

            enhancement.Index       = _reader.ReadInt32();
            enhancement.Name        = _reader.ReadString();
            enhancement.ShortName   = _reader.ReadString();
            enhancement.Description = _reader.ReadString();
            enhancement.TypeId      = _reader.ReadInt32();
            enhancement.SubTypeId   = _reader.ReadInt32();
            enhancement.ClassIds    = new int[_reader.ReadInt32() + 1];
            for (var index = 0; index < enhancement.ClassIds.Length; index++)
            {
                enhancement.ClassIds[index] = _reader.ReadInt32();
            }
            enhancement.Image               = _reader.ReadString();
            enhancement.EnhancementSetId    = _reader.ReadInt32();
            enhancement.EnhancementSetName  = _reader.ReadString();
            enhancement.EffectChance        = _reader.ReadSingle();
            enhancement.LevelMin            = _reader.ReadInt32();
            enhancement.LevelMax            = _reader.ReadInt32();
            enhancement.Unique              = _reader.ReadBoolean();
            enhancement.MutuallyExclusiveId = _reader.ReadInt32();
            enhancement.BuffMode            = _reader.ReadInt32();
            enhancement.Effects             = new EnhancementEffect[_reader.ReadInt32() + 1];
            for (var index = 0; index < enhancement.Effects.Length; index++)
            {
                enhancement.Effects[index] = _enhancementEffectReader.Read();
            }
            enhancement.UniqueIdentifier = _reader.ReadString();
            enhancement.Recipe           = _reader.ReadString();
            enhancement.Superior         = _reader.ReadBoolean();
            return(enhancement);
        }
 public void Write(Enhancement enhancement)
 {
     _writer.Write(enhancement.Index);
     _writer.Write(enhancement.Name);
     _writer.Write(enhancement.ShortName);
     _writer.Write(enhancement.Description);
     _writer.Write(enhancement.TypeId);
     _writer.Write(enhancement.SubTypeId);
     _writer.Write(enhancement.ClassIds.Length - 1);
     for (int index = 0; index < enhancement.ClassIds.Length; ++index)
     {
         _writer.Write(enhancement.ClassIds[index]);
     }
     _writer.Write(enhancement.Image);
     _writer.Write(enhancement.EnhancementSetId);
     _writer.Write(enhancement.EnhancementSetName);
     _writer.Write(enhancement.EffectChance);
     _writer.Write(enhancement.LevelMin);
     _writer.Write(enhancement.LevelMax);
     _writer.Write(enhancement.Unique);
     _writer.Write(enhancement.MutuallyExclusiveId);
     _writer.Write(enhancement.BuffMode);
     _writer.Write(enhancement.Effects.Length - 1);
     for (int index = 0; index < enhancement.Effects.Length; ++index)
     {
         _enhancementEffectWriter.Write(enhancement.Effects[index]);
     }
     _writer.Write(enhancement.UniqueIdentifier);
     _writer.Write(enhancement.Recipe);
     _writer.Write(enhancement.Superior);
 }