コード例 #1
0
 private void ReadTypeDescriptors(Stream s)
 {
     typeDescriptors = new List <StreamingPartitionTypeDescriptor>();
     for (int i = 0; i < Header.typeDescriptorCount; i++)
     {
         StreamingPartitionTypeDescriptor f = new StreamingPartitionTypeDescriptor();
         f.typeNameHash = Helpers.ReadInt(s);
         foreach (KeyWordDicStruct key in keyWordDic)
         {
             if (key.hash == f.typeNameHash)
             {
                 f._name = key.keyword;
                 break;
             }
         }
         f.layoutDescriptorIndex = Helpers.ReadInt(s);
         f.fieldCount            = (byte)s.ReadByte();
         f.alignment             = (byte)s.ReadByte();
         f.typeFlags             = Helpers.ReadUShort(s);
         f._type                 = (byte)((f.typeFlags >> 4) & 0x1F);
         f.instanceSize          = Helpers.ReadUShort(s);
         f.secondaryInstanceSize = Helpers.ReadUShort(s);
         f._index                = i;
         typeDescriptors.Add(f);
     }
 }
コード例 #2
0
        private Field ReadField(Stream s, int idx)
        {
            Field res = new Field();

            res.Descriptor = fieldDescriptors[idx];
            List <Field> list;

            byte[] buff;
            res.offset = s.Position;
            switch (res.Descriptor._type)
            {
            case 0:
            case 2:
                res.data = ReadType(s, res.Descriptor.fieldTypeIndex);
                break;

            case 3:
                uint u = Helpers.ReadUInt(s);
                res.data = u;
                break;

            case 4:
                int index = Helpers.ReadInt(s);
                list = new List <Field>();
                if (index < 0)
                {
                    res.data = list;
                    break;
                }
                long pos = s.Position;
                s.Seek(Header._arraySectionstart + arrayList[index].offset, 0);
                StreamingPartitionTypeDescriptor tp = typeDescriptors[arrayList[index].typeDescriptorIndex];
                for (int i = 0; i < arrayList[index].elementCount; i++)
                {
                    list.Add(ReadField(s, tp.layoutDescriptorIndex));
                }
                s.Seek(pos, 0);
                res.data = list;
                break;

            case 7:
                int offset = Helpers.ReadInt(s);
                if (offset == -1)
                {
                    res.data = "";
                    break;
                }
                stbl.Seek(offset, 0);
                res.data = Helpers.ReadNullString(stbl);
                break;

            case 8:
                offset = Helpers.ReadInt(s);
                StreamingPartitionTypeDescriptor cdesc = typeDescriptors[res.Descriptor.fieldTypeIndex];
                string value = "";
                if (cdesc.fieldCount != 0)
                {
                    for (int i = cdesc.layoutDescriptorIndex; i < cdesc.layoutDescriptorIndex + cdesc.fieldCount; i++)
                    {
                        if (fieldDescriptors[i].fieldOffset == offset)
                        {
                            value = fieldDescriptors[i]._name;
                            break;
                        }
                    }
                }
                res.data = value;
                break;

            case 0xa:
            case 0xb:
            case 0xc:
                res.data = (byte)s.ReadByte();
                break;

            case 0xd:
            case 0xe:
                res.data = Helpers.ReadUShort(s);
                break;

            case 0xf:
            case 0x10:
                res.data = Helpers.ReadUInt(s);
                break;

            case 0x13:
                res.data = Helpers.ReadFloat(s);
                break;

            case 0x11:
            case 0x12:
            case 0x14:
                res.data = Helpers.ReadULong(s);
                break;

            case 0x15:
                buff = new byte[0x10];
                s.Read(buff, 0, 0x10);
                res.data = buff;
                break;

            case 0x16:
                buff = new byte[0x14];
                s.Read(buff, 0, 0x14);
                res.data = buff;
                break;

            case 0x17:
                break;

            default:
                break;
            }
            return(res);
        }
コード例 #3
0
ファイル: EBXStream.cs プロジェクト: tirnoney/DAIToolsWV
 private void ReadTypeDescriptors(Stream s)
 {
     typeDescriptors = new List<StreamingPartitionTypeDescriptor>();
     for (int i = 0; i < Header.typeDescriptorCount; i++)
     {
         StreamingPartitionTypeDescriptor f = new StreamingPartitionTypeDescriptor();
         f.typeNameHash = Helpers.ReadInt(s);
         foreach (KeyWordDicStruct key in keyWordDic)
             if (key.hash == f.typeNameHash)
             {
                 f._name = key.keyword;
                 break;
             }
         f.layoutDescriptorIndex = Helpers.ReadInt(s);
         f.fieldCount = (byte)s.ReadByte();
         f.alignment = (byte)s.ReadByte();
         f.typeFlags = Helpers.ReadUShort(s);
         f._type = (byte)((f.typeFlags >> 4) & 0x1F);
         f.instanceSize = Helpers.ReadUShort(s);
         f.secondaryInstanceSize = Helpers.ReadUShort(s);
         f._index = i;
         typeDescriptors.Add(f);
     }
 }