예제 #1
0
        public static RecordData ReadRecordData(this BinaryReader reader, WDC3Header header)
        {
            var record = new RecordData();

            record.Data = new byte[header.RecordSize];
            for (int i = 0; i < header.RecordSize; i++)
            {
                record.Data[i] = reader.ReadByte();
            }
            return(record);
        }
예제 #2
0
        public static Section ReadSection(this BinaryReader reader, WDC3Header header, WDC3SectionHeader sectionHeader)
        {
            var section = new Section();

            if (header.Flags.HasFlag(WDB4Flags.HasOffsetMap))
            {
                section.VariableRecordData = new byte[sectionHeader.OffsetRecordsEnd - sectionHeader.FileOffset];
                for (int i = 0; i < sectionHeader.OffsetRecordsEnd - sectionHeader.FileOffset; i++)
                {
                    section.VariableRecordData[i] = reader.ReadByte();
                }
            }
            else
            {
                section.Records = new RecordData[sectionHeader.RecordCount];
                for (int i = 0; i < sectionHeader.RecordCount; i++)
                {
                    section.Records[i] = reader.ReadRecordData(header);
                }
                section.StringData = new byte[sectionHeader.StringTableSize];
                for (int i = 0; i < sectionHeader.StringTableSize; i++)
                {
                    section.StringData[i] = reader.ReadByte();
                }
            }
            section.IdList = new uint[sectionHeader.IdListSize / sizeof(uint)];
            for (int i = 0; i < sectionHeader.IdListSize / sizeof(uint); i++)
            {
                section.IdList[i] = reader.ReadUInt32();
            }
            if (sectionHeader.CopyTableCount > 0)
            {
                section.CopyTable = new CopyTableEntry[sectionHeader.CopyTableCount];
                for (int i = 0; i < sectionHeader.CopyTableCount; i++)
                {
                    section.CopyTable[i] = reader.ReadCopyTableEntry();
                }
            }
            section.OffsetMap = new OffsetMapEntry[sectionHeader.OffsetMapIdCount];
            for (int i = 0; i < sectionHeader.OffsetMapIdCount; i++)
            {
                section.OffsetMap[i] = reader.ReadOffsetMapEntry();
            }
            if (sectionHeader.RelationshipDataSize > 0)
            {
                section.RelationshipMap = reader.ReadRelationshipMapping();
            }
            section.OffsetMapIdList = new uint[sectionHeader.OffsetMapIdCount];
            for (int i = 0; i < sectionHeader.OffsetMapIdCount; i++)
            {
                section.OffsetMapIdList[i] = reader.ReadUInt32();
            }
            return(section);
        }
예제 #3
0
 public static void Write(this BinaryWriter writer, Section section, WDC3Header header, WDC3SectionHeader sectionHeader)
 {
     if (header.Flags.HasFlag(WDB4Flags.HasOffsetMap))
     {
         for (int i = 0; i < section.VariableRecordData.Length; i++)
         {
             writer.Write(section.VariableRecordData);
         }
     }
     else
     {
         for (int i = 0; i < section.Records.Length; i++)
         {
             writer.Write(section.Records[i]);
         }
         for (int i = 0; i < sectionHeader.StringTableSize; i++)
         {
             writer.Write(section.StringData[i]);
         }
     }
     for (int i = 0; i < section.IdList.Length; i++)
     {
         writer.Write(section.IdList[i]);
     }
     if (section.CopyTable != null && section.CopyTable.Length > 0)
     {
         for (int i = 0; i < section.CopyTable.Length; i++)
         {
             writer.Write(section.CopyTable[i]);
         }
     }
     for (int i = 0; i < section.OffsetMap.Length; i++)
     {
         writer.Write(section.OffsetMap[i]);
     }
     if (section.RelationshipMap != null)
     {
         writer.Write(section.RelationshipMap);
     }
     for (int i = 0; i < section.OffsetMapIdList.Length; i++)
     {
         writer.Write(section.OffsetMapIdList[i]);
     }
 }
예제 #4
0
 public static void Write(this BinaryWriter writer, WDC3Header header)
 {
     writer.Write(header.Magic);
     writer.Write(header.RecordCount);
     writer.Write(header.FieldCount);
     writer.Write(header.RecordSize);
     writer.Write(header.StringTableSize);
     writer.Write(header.TableHash);
     writer.Write(header.LayoutHash);
     writer.Write(header.MinId);
     writer.Write(header.MaxId);
     writer.Write(header.Locale);
     writer.Write((ushort)header.Flags);
     writer.Write(header.IdIndex);
     writer.Write(header.TotalFieldCount);
     writer.Write(header.BitpackedDataOffset);
     writer.Write(header.LookupColumnCount);
     writer.Write(header.FieldStorageInfoSize);
     writer.Write(header.CommonDataSize);
     writer.Write(header.PalletDataSize);
     writer.Write(header.SectionCount);
 }