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);
        }
Ejemplo n.º 2
0
        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);
        }