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()); } }
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); } }