public void AssertDataBlockPointer(MetaDataBlockPointer expectedDataBlockPointer, MetaDataBlockPointer actualDataBlockPointer) { Assert.AreEqual(expectedDataBlockPointer.Data, actualDataBlockPointer.Data); }
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); }