public REFRRecord(Record record) { baseRecord = record; var fields = record.Fields .GroupBy(f => f.Type) .ToDictionary(f => f.Key, f => f.First().DataBytes); EditorID = fields.ContainsKey("EDID") ? (ZString?)ZString.Parse(fields["EDID"]) : null; Name = new LocalFormID(fields["NAME"], 0); Data = fields.ContainsKey("DATA") ? DATAField.Parse(fields["DATA"]) : null; Bounds = fields.ContainsKey("XMBO") ? XMBOField.Parse(fields["XMBO"]) : null; }
public Record(Byte[] bytes, int offset = 0) { type = Encoding.UTF8.GetString(bytes, offset + 0, 4); dataSize = BitConverter.ToUInt32(bytes, offset + 4); flags = (RecordFlags)BitConverter.ToUInt32(bytes, offset + 8); id = new LocalFormID(bytes, offset + 12); versionControlInfo = VersionControlInfo.Parse(bytes, offset + 16); version = BitConverter.ToUInt16(bytes, offset + 20); unknown = BitConverter.ToUInt16(bytes, offset + 22); if ((flags & RecordFlags.Compressed) == RecordFlags.Compressed) { data = new List <Field>(); } else { data = Field.ParseAll(bytes, (uint)(offset + FixedSize), dataSize); } }
//public UInt16 unknown; public static RecordHeader Parse(byte[] bytes, int offset = 0) { var type = Encoding.UTF8.GetString(bytes, offset + 0, 4); var dataSize = BitConverter.ToUInt32(bytes, offset + 4); var flags = (RecordFlags)BitConverter.ToUInt32(bytes, offset + 8); var id = new LocalFormID(bytes, offset + 12); //versionControlInfo = VersionControlInfo.Parse(bytes, offset + 16); var version = BitConverter.ToUInt16(bytes, offset + 20); // var unknown = BitConverter.ToUInt16(bytes, offset + 22); return(new RecordHeader() { Type = type, DataSize = dataSize, flags = flags, Id = id, version = version, }); }