示例#1
0
 private void MetaBuildEnumInfos(MetaInformationXml xmlInfo)
 {
     meta.EnumInfos = new ResourceSimpleArray <EnumInfo_GTA5_pc>();
     foreach (var xmlEnumInfo in xmlInfo.Enums)
     {
         var enumInfo = new EnumInfo_GTA5_pc();
         enumInfo.EnumNameHash = xmlEnumInfo.NameHash;
         enumInfo.EnumKey      = xmlEnumInfo.Key;
         enumInfo.Entries      = new ResourceSimpleArray <EnumEntryInfo_GTA5_pc>();
         foreach (var xmlEnumEntryInfo in xmlEnumInfo.Entries)
         {
             var enumEntryInfo = new EnumEntryInfo_GTA5_pc();
             enumEntryInfo.EntryNameHash = xmlEnumEntryInfo.NameHash;
             enumEntryInfo.EntryValue    = xmlEnumEntryInfo.Value;
             enumInfo.Entries.Add(enumEntryInfo);
         }
         meta.EnumInfos.Add(enumInfo);
     }
 }
        private void MetaBuildStructureInfos(MetaInformationXml xmlInfo)
        {
            strList = new ResourceSimpleArray <StructureInfo_GTA5_pc>();
            foreach (var xmlStructureInfo in xmlInfo.Structures)
            {
                var structureInfo = new StructureInfo_GTA5_pc();
                structureInfo.StructureNameHash = xmlStructureInfo.NameHash;
                structureInfo.StructureKey      = xmlStructureInfo.Key;
                structureInfo.Unknown_8h        = xmlStructureInfo.Unknown;
                structureInfo.StructureLength   = xmlStructureInfo.Length;
                structureInfo.Entries           = new ResourceSimpleArray <StructureEntryInfo_GTA5_pc>();
                foreach (var xmlStructureEntryInfo in xmlStructureInfo.Entries)
                {
                    var xmlArrayTypeStack = new Stack <MetaStructureArrayTypeXml>();
                    var xmlArrayType      = xmlStructureEntryInfo.ArrayType;
                    while (xmlArrayType != null)
                    {
                        xmlArrayTypeStack.Push(xmlArrayType);
                        xmlArrayType = xmlArrayType.ArrayType;
                    }

                    while (xmlArrayTypeStack.Count > 0)
                    {
                        xmlArrayType = xmlArrayTypeStack.Pop();
                        var arrayStructureEntryInfo = new StructureEntryInfo_GTA5_pc();
                        arrayStructureEntryInfo.EntryNameHash = 0x100;
                        arrayStructureEntryInfo.DataOffset    = 0;
                        arrayStructureEntryInfo.DataType      = (StructureEntryDataType)xmlArrayType.Type;
                        arrayStructureEntryInfo.Unknown_9h    = 0;
                        if (arrayStructureEntryInfo.DataType == StructureEntryDataType.Array)
                        {
                            arrayStructureEntryInfo.ReferenceTypeIndex = (short)(structureInfo.Entries.Count - 1);
                        }
                        else
                        {
                            arrayStructureEntryInfo.ReferenceTypeIndex = 0;
                        }
                        arrayStructureEntryInfo.ReferenceKey = xmlArrayType.TypeHash;
                        structureInfo.Entries.Add(arrayStructureEntryInfo);
                    }

                    var structureEntryInfo = new StructureEntryInfo_GTA5_pc();
                    structureEntryInfo.EntryNameHash = xmlStructureEntryInfo.NameHash;
                    structureEntryInfo.DataOffset    = xmlStructureEntryInfo.Offset;
                    structureEntryInfo.DataType      = (StructureEntryDataType)xmlStructureEntryInfo.Type;
                    structureEntryInfo.Unknown_9h    = (byte)xmlStructureEntryInfo.Unknown;
                    if (structureEntryInfo.DataType == StructureEntryDataType.Array)
                    {
                        structureEntryInfo.ReferenceTypeIndex = (short)(structureInfo.Entries.Count - 1);
                    }
                    else
                    {
                        structureEntryInfo.ReferenceTypeIndex = 0;
                    }
                    structureEntryInfo.ReferenceKey = xmlStructureEntryInfo.TypeHash;

                    structureInfo.Entries.Add(structureEntryInfo);
                }
                strList.Add(structureInfo);
            }
        }
 public MetaXmlImporter(MetaInformationXml xmlinfos)
 {
     this.xmlInfos = xmlinfos;
     MetaBuildStructureInfos(xmlinfos);
 }