Пример #1
0
 public static byte[] Write(NPCDialogSection npcDialogSection)
 {
     using (BitWriter writer = new BitWriter())
     {
         writer.WriteUInt16(npcDialogSection.Header ?? (UInt16)0x7701);
         writer.WriteUInt16(npcDialogSection.Length ?? (UInt16)0x34);
         var skippedProperties = new string[] { "Header", "Length" };
         var start             = writer.Position;
         foreach (var npcDialogSectionProperty in typeof(NPCDialogSection).GetProperties())
         {
             if (skippedProperties.Contains(npcDialogSectionProperty.Name))
             {
                 continue;
             }
             NPCDialogDifficulty npcDialogDifficulty = (NPCDialogDifficulty)npcDialogSectionProperty.GetValue(npcDialogSection);
             foreach (var property in typeof(NPCDialogDifficulty).GetProperties())
             {
                 NPCDialogData npcDialogData = (NPCDialogData)property.GetValue(npcDialogDifficulty);
                 int           position      = writer.Position;
                 writer.WriteBit(npcDialogData.Introduction);
                 writer.SeekBits(position + (0x18 * 8));
                 writer.WriteBit(npcDialogData.Congratulations);
                 writer.SeekBits(position + 1);
             }
         }
         writer.SeekBits(start + (0x30 * 8));
         return(writer.ToArray());
     }
 }
Пример #2
0
        public static NPCDialogSection Read(byte[] bytes)
        {
            NPCDialogSection npcDialogSection = new NPCDialogSection();

            using (BitReader reader = new BitReader(bytes))
            {
                npcDialogSection.Header = reader.ReadUInt16();
                npcDialogSection.Length = reader.ReadUInt16();
                Type     type = typeof(NPCDialogDifficulty);
                BitArray bits = new BitArray(reader.ReadBytes(0x30));
                //Introductions
                var skippedProperties = new string[] { "Header", "Length" };
                foreach (var npcDialogSectionProperty in typeof(NPCDialogSection).GetProperties())
                {
                    if (skippedProperties.Contains(npcDialogSectionProperty.Name))
                    {
                        continue;
                    }
                    NPCDialogDifficulty npcDialogDifficulty = new NPCDialogDifficulty();
                    int idx = 0;
                    foreach (var property in typeof(NPCDialogDifficulty).GetProperties())
                    {
                        NPCDialogData data = new NPCDialogData();
                        data.Introduction    = bits[idx];
                        data.Congratulations = bits[idx + (0x18 * 8)];
                        idx++;
                        property.SetValue(npcDialogDifficulty, data);
                    }
                    npcDialogSectionProperty.SetValue(npcDialogSection, npcDialogDifficulty);
                }
                return(npcDialogSection);
            }
        }