private static BdatStringTable ReadTable(byte[] file, int offset) { if (BitConverter.ToUInt32(file, offset) != 0x54414442) { return(null); } int namesOffset = BitConverter.ToUInt16(file, offset + 6); var tableName = Stuff.GetUTF8Z(file, offset + namesOffset); var members = BdatTable.ReadTableMembers(file, offset); var table = new BdatStringTable { Name = tableName, BaseId = BitConverter.ToUInt16(file, offset + 18), Members = members, Items = ReadItems(file, offset, members) }; int id = table.BaseId; foreach (BdatStringItem item in table.Items) { item.Table = tableName; item.Id = id++; } return(table); }
private static void ReadTable(byte[] file, int offset, BdatCollection tables) { if (BitConverter.ToUInt32(file, offset) != 0x54414442) { return; } int namesOffset = BitConverter.ToUInt16(file, offset + 6); var tableName = Stuff.GetUTF8Z(file, offset + namesOffset); var itemType = TypeMap.GetTableType(tableName); var tableType = typeof(BdatTable <>).MakeGenericType(itemType); var table = (IBdatTable)Activator.CreateInstance(tableType); table.Name = tableName; table.BaseId = BitConverter.ToUInt16(file, offset + 18); table.Members = BdatTable.ReadTableMembers(file, offset); table.Items = ReadItems(file, offset, itemType); Fields[tableName].SetValue(tables, table); }