private static MetaStructure MakeStructureWithSimpleData() { var structureWithSimpleTypesInfo = new StructureInfo_GTA5_pc(); var structureWithSimpleTypes = new MetaStructure(null, structureWithSimpleTypesInfo); structureWithSimpleTypes.Values = new Dictionary <int, IMetaValue>(); structureWithSimpleTypes.Values.Add(unchecked ((int)0x36C55540), new MetaBoolean(false)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x707975FF), new MetaBoolean(true)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x96142337), new MetaByte_A(-128)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xD4D9059D), new MetaByte_A(-127)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x710D0955), new MetaByte_A(126)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x860ACDD8), new MetaByte_A(127)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xCDFD7789), new MetaByte_B(0)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x7DCCF225), new MetaByte_B(1)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xA0AB9B78), new MetaByte_B(254)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x3A223898), new MetaByte_B(255)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x2F07F270), new MetaInt16_A(-32768)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x83E5053E), new MetaInt16_A(-32767)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x86F3BC1E), new MetaInt16_A(32766)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x2C916F02), new MetaInt16_A(32767)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x1972DD39), new MetaInt16_B(0)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x1433E9A2), new MetaInt16_B(1)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xABF22E97), new MetaInt16_B(65534)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xCAD920FA), new MetaInt16_B(65535)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x96AA9C22), new MetaInt32_A(-2147483648)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xBE498F77), new MetaInt32_A(-2147483647)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xDEA66123), new MetaInt32_A(2147483646)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xA7A347FE), new MetaInt32_A(2147483647)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x5940A2C4), new MetaInt32_B(0)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x7AE8E34B), new MetaInt32_B(1)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x48758F24), new MetaInt32_B(4294967294)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x2DCCF53B), new MetaInt32_B(4294967295)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x7C6BAA24), new MetaFloat(1.2f)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xC81C39E6), new MetaFloat(12.0f)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xC599B2B0), new MetaFloat4_XYZ(1.2f, 3.4f, 5.6f)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xA2B4F045), new MetaFloat4_XYZ(12.0f, 34.0f, 56.0f)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xE0B18333), new MetaFloat4_XYZW(1.2f, 3.4f, 5.6f, 7.8f)); structureWithSimpleTypes.Values.Add(unchecked ((int)0xA7E3D660), new MetaFloat4_XYZW(12.0f, 34.0f, 56.0f, 78.0f)); structureWithSimpleTypes.Values.Add(unchecked ((int)0x3B8AF0C2), new MetaArrayOfBytes(new byte[] { 0, 1, 254, 255 })); var charinfo = new StructureEntryInfo_GTA5_pc(); charinfo.ReferenceKey = 64; structureWithSimpleTypes.Values.Add(unchecked ((int)0x8FF34AB5), new MetaArrayOfChars(charinfo, "A String")); structureWithSimpleTypes.Values.Add(unchecked ((int)0x17525AB1), new MetaInt32_Hash(unchecked ((int)0xF63A8BC0))); structureWithSimpleTypes.Values.Add(unchecked ((int)0x10D59C62), new MetaInt32_Hash(0)); return(structureWithSimpleTypes); }
public MetaArrayOfBytes(StructureEntryInfo_GTA5_pc info) { this.info = info; }
public MetaArrayOfChars(StructureEntryInfo_GTA5_pc inf, string value) { this.info = inf; this.Value = value; }
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 MetaStructure ParseStructure(XmlNode node, MetaStructureXml info) { MetaStructure resultStructure = null; foreach (var x in strList) { if (x.StructureKey == info.Key) { resultStructure = new MetaStructure(null, x); } } resultStructure.Values = new Dictionary <int, IMetaValue>(); foreach (var xmlEntry in info.Entries) { XmlNode xmlNode = null; foreach (XmlNode x in node.ChildNodes) { var hash = GetHashForName(x.Name); if (hash == xmlEntry.NameHash) { xmlNode = x; } } StructureEntryInfo_GTA5_pc entryInfo = null; foreach (var x in resultStructure.info.Entries) { if (x.EntryNameHash == xmlEntry.NameHash) { entryInfo = x; } } var type = (StructureEntryDataType)xmlEntry.Type; if (type == StructureEntryDataType.Array) { var arrayType = (StructureEntryDataType)xmlEntry.ArrayType.Type; if (arrayType == StructureEntryDataType.StructurePointer) { MetaArray arrayValue = ReadPointerArray(xmlNode); arrayValue.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arrayValue); } if (arrayType == StructureEntryDataType.Structure) { MetaArray arryVal = ReadStructureArray(xmlNode, xmlEntry.ArrayType.TypeHash); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } if (arrayType == StructureEntryDataType.UnsignedByte) { MetaArray arryVal = ReadByteArray(xmlNode); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } if (arrayType == StructureEntryDataType.UnsignedShort) { MetaArray arryVal = ReadShortArray(xmlNode); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } if (arrayType == StructureEntryDataType.UnsignedInt) { MetaArray arryVal = ReadIntArray(xmlNode); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } if (arrayType == StructureEntryDataType.Float) { MetaArray arryVal = ReadFloatArray(xmlNode); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } if (arrayType == StructureEntryDataType.Float_XYZ) { MetaArray arryVal = ReadFloatVectorArray(xmlNode); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } if (arrayType == StructureEntryDataType.Hash) { MetaArray arryVal = ReadHashArray(xmlNode); arryVal.info = resultStructure.info.Entries[entryInfo.ReferenceTypeIndex]; resultStructure.Values.Add(xmlEntry.NameHash, arryVal); } } if (type == StructureEntryDataType.Boolean) { resultStructure.Values.Add(xmlEntry.NameHash, ReadBoolean(xmlNode)); } if (type == StructureEntryDataType.SignedByte) { resultStructure.Values.Add(xmlEntry.NameHash, ReadSignedByte(xmlNode)); } if (type == StructureEntryDataType.UnsignedByte) { resultStructure.Values.Add(xmlEntry.NameHash, ReadUnsignedByte(xmlNode)); } if (type == StructureEntryDataType.SignedShort) { resultStructure.Values.Add(xmlEntry.NameHash, ReadSignedShort(xmlNode)); } if (type == StructureEntryDataType.UnsignedShort) { resultStructure.Values.Add(xmlEntry.NameHash, ReadUnsignedShort(xmlNode)); } if (type == StructureEntryDataType.SignedInt) { resultStructure.Values.Add(xmlEntry.NameHash, ReadSignedInt(xmlNode)); } if (type == StructureEntryDataType.UnsignedInt) { resultStructure.Values.Add(xmlEntry.NameHash, ReadUnsignedInt(xmlNode)); } if (type == StructureEntryDataType.Float) { resultStructure.Values.Add(xmlEntry.NameHash, ReadFloat(xmlNode)); } if (type == StructureEntryDataType.Float_XYZ) { resultStructure.Values.Add(xmlEntry.NameHash, ReadFloatXYZ(xmlNode)); } if (type == StructureEntryDataType.Float_XYZW) { resultStructure.Values.Add(xmlEntry.NameHash, ReadFloatXYZW(xmlNode)); } if (type == StructureEntryDataType.ByteEnum) { resultStructure.Values.Add(xmlEntry.NameHash, ReadByteEnum(xmlNode, entryInfo.ReferenceKey)); } if (type == StructureEntryDataType.IntEnum) { resultStructure.Values.Add(xmlEntry.NameHash, ReadIntEnum(xmlNode, entryInfo.ReferenceKey)); } if (type == StructureEntryDataType.ShortFlags) { resultStructure.Values.Add(xmlEntry.NameHash, ReadShortFlags(xmlNode, entryInfo.ReferenceKey)); } if (type == StructureEntryDataType.IntFlags1) { resultStructure.Values.Add(xmlEntry.NameHash, ReadIntFlags1(xmlNode, entryInfo.ReferenceKey)); } if (type == StructureEntryDataType.IntFlags2) { resultStructure.Values.Add(xmlEntry.NameHash, ReadIntFlags2(xmlNode, entryInfo.ReferenceKey)); } if (type == StructureEntryDataType.ArrayOfBytes) { var byteArrayValue = new MetaArrayOfBytes(); byteArrayValue.Value = ByteFromString(xmlNode.InnerText); resultStructure.Values.Add(xmlEntry.NameHash, byteArrayValue); } if (type == StructureEntryDataType.ArrayOfChars) { var charArrayValue = new MetaArrayOfChars(entryInfo); charArrayValue.Value = xmlNode.InnerText; resultStructure.Values.Add(xmlEntry.NameHash, charArrayValue); } if (type == StructureEntryDataType.Hash) { var hashValue = new MetaInt32_Hash(); if (xmlNode.InnerText.Trim().Length > 0) { hashValue.Value = GetHashForName(xmlNode.InnerText); } resultStructure.Values.Add(xmlEntry.NameHash, hashValue); } if (type == StructureEntryDataType.CharPointer) { var charPointerValue = new MetaCharPointer(); charPointerValue.Value = xmlNode.InnerText; if (charPointerValue.Value.Equals("")) { charPointerValue.Value = null; } resultStructure.Values.Add(xmlEntry.NameHash, charPointerValue); } if (type == StructureEntryDataType.DataBlockPointer) { var dataBlockValue = new MetaDataBlockPointer(entryInfo); dataBlockValue.Data = ByteFromString(xmlNode.InnerText); if (dataBlockValue.Data.Length == 0) { dataBlockValue.Data = null; } resultStructure.Values.Add(xmlEntry.NameHash, dataBlockValue); } if (type == StructureEntryDataType.Structure) { var xmlInfo = FindAndCheckStructure(xmlEntry.TypeHash, xmlNode); var structureValue = ParseStructure(xmlNode, xmlInfo); resultStructure.Values.Add(xmlEntry.NameHash, structureValue); } } return(resultStructure); }
public MetaDataBlockPointer(StructureEntryInfo_GTA5_pc info, byte[] data) { this.info = info; this.Data = data; }
public MetaDataBlockPointer(StructureEntryInfo_GTA5_pc info) { this.info = info; }