public void Read(Stream stream) { using (var reader = new BinaryReader(stream)) { FileID = reader.ReadUInt32(); this.List1 = ReadList(reader, false); this.List2 = ReadList(reader, false); this.List3 = ReadList(reader, true); var numStrings = reader.ReadUInt32(); this.Strings = new List <StringTableEntry>(); for (var i = 0; i < numStrings; i++) { var stringEntry = new StringTableEntry(); stringEntry.ID = reader.ReadUInt32(); stringEntry.Value = ReadNullTerminatedString(reader); stringEntry.Category = (StringTableType)reader.ReadByte(); this.Strings.Add(stringEntry); } } Activate(); }
public void Read(Stream stream) { using (var reader = new BinaryReader(stream)) { var fileID = reader.ReadUInt32(); this.List1 = ReadList(reader, false); this.List2 = ReadList(reader, false); this.List3 = ReadList(reader, true); var numStrings = reader.ReadUInt32(); this.Strings = new List <StringTableEntry>(); for (var i = 0; i < numStrings; i++) { var stringEntry = new StringTableEntry(); stringEntry.ID = reader.ReadUInt32(); stringEntry.Value = ReadNullTerminatedString(reader); stringEntry.Unknown = reader.ReadByte(); this.Strings.Add(stringEntry); } } var Structs = new List <Struct>(); var DerivedStructs = new List <DerivedStruct>(); foreach (var item in List1) { var fields = new List <StructField>(); foreach (var field in item.Entries) { if (field.TypeStringID == 0xA99AF3AC) { Console.WriteLine("unknown value: " + GetString(item.NameStringID) + "::" + GetString(field.NameStringID)); } fields.Add(new StructField { ID = field.NameStringID, Name = GetString(field.NameStringID), TypeID = field.TypeStringID, Classification = (StructFieldClassification)field.Unknonw, ParentID = item.NameStringID }); } Structs.Add(new Struct { ID = item.NameStringID, Name = GetString(item.NameStringID), Fields = fields.ToArray() }); } foreach (var item in List2) { var fields = new List <StructField>(); foreach (var field in item.Entries) { if (field.TypeStringID == 0xA99AF3AC) { Console.WriteLine("unknown value: " + GetString(item.NameStringID) + "::" + GetString(field.NameStringID)); } fields.Add(new StructField { ID = field.NameStringID, Name = GetString(field.NameStringID), TypeID = field.TypeStringID, Classification = (StructFieldClassification)field.Unknonw, ParentID = item.NameStringID }); } Structs.Add(new Struct { ID = item.NameStringID, Name = GetString(item.NameStringID), Fields = fields.ToArray() }); } foreach (var item in List3) { var fields = new List <DerivedStructFieldMask>(); foreach (var field in item.Entries) { if (field.TypeStringID == 0xA99AF3AC) { Console.WriteLine("unknown value: " + GetString(item.NameStringID) + "::" + GetString(field.NameStringID)); } fields.Add(new DerivedStructFieldMask { ID = field.NameStringID, Name = GetString(field.NameStringID), Type = (DerivedStructFieldMaskType)field.Unknonw }); } DerivedStructs.Add(new DerivedStruct { ID = item.NameStringID, Parent = item.ParentStringID, Name = GetString(item.NameStringID), FieldMasks = fields.ToArray() }); } this.Structs = Structs.ToArray(); this.DerivedStructs = DerivedStructs.ToArray(); foreach (var _struct in Structs) { StructsByName.Add(_struct.Name, _struct); } }