public void CalculateStructureSize(PluginDataBlock dataBlock) { int num2; int pointer = 0x3b9ac9ff; for (num2 = 0; num2 < Plugin_Data_Blocks.Count; num2++) { if ((Plugin_Data_Blocks[num2].Pointer > dataBlock.Pointer) && (Plugin_Data_Blocks[num2].Pointer < pointer)) { pointer = Plugin_Data_Blocks[num2].Pointer; } } for (num2 = 0; num2 < Plugin_Scanning_Regions.Count; num2++) { if (((Plugin_Scanning_Regions[num2].Offset + Plugin_Scanning_Regions[num2].Size) > dataBlock.Pointer) && ((Plugin_Scanning_Regions[num2].Offset + Plugin_Scanning_Regions[num2].Size) < pointer)) { pointer = Plugin_Scanning_Regions[num2].Offset + Plugin_Data_Blocks[num2].Size; } } if (pointer == 0x3b9ac9ff) { dataBlock.Size = 0; } else { dataBlock.Size = (pointer - dataBlock.Pointer) / dataBlock.Count; } }
/// <summary> /// This function maps our children reflexives and idents for the given datablock /// </summary> /// <param name="dataBlock">The datablock to map children reflexives/idents for.</param> public void MapChildren(PluginDataBlock dataBlock) { //Loop through each plugin data block foreach (PluginDataBlock db in Plugin_Data_Blocks) { if (db.Data_Block_Type == PluginDataBlock.DataBlockType.Reflexive) { //If its in our chunks for this block if (db.Offset >= dataBlock.Pointer && db.Offset < dataBlock.Pointer + (dataBlock.Count * dataBlock.Size)) { //Set our offset in parent ((Reflexive_DataBlock)db).Offset_In_Parent = (db.Offset - dataBlock.Pointer) % dataBlock.Size; //Add it to our list dataBlock.Reflexive_Data_Blocks.Add((Reflexive_DataBlock)db); } } } //Loop for each ident foreach (Tag_Ident ident in Tag_Idents) { //If its in our chunks for this block if (ident.Offset >= dataBlock.Pointer && ident.Offset < dataBlock.Pointer + (dataBlock.Count * dataBlock.Size)) { //Set our offset in parent ident.Offset_In_Parent = (ident.Offset - dataBlock.Pointer) % dataBlock.Size; //Add it to our list dataBlock.Tag_Idents.Add(ident); } } }
public void MapChildren(PluginDataBlock dataBlock) { foreach (PluginDataBlock block in Plugin_Data_Blocks) { if ((block.Data_Block_Type == PluginDataBlock.DataBlockType.Reflexive) && ((block.Offset >= dataBlock.Pointer) && (block.Offset < (dataBlock.Pointer + (dataBlock.Count * dataBlock.Size))))) { ((Reflexive_DataBlock)block).Offset_In_Parent = (block.Offset - dataBlock.Pointer) % dataBlock.Size; dataBlock.Reflexive_Data_Blocks.Add((Reflexive_DataBlock)block); } } foreach (Tag_Ident ident in Tag_Idents) { if ((ident.Offset >= dataBlock.Pointer) && (ident.Offset < (dataBlock.Pointer + (dataBlock.Count * dataBlock.Size)))) { ident.Offset_In_Parent = (ident.Offset - dataBlock.Pointer) % dataBlock.Size; dataBlock.Tag_Idents.Add(ident); } } foreach (Tag_Void @void in Tag_Voids) { if ((@void.Offset >= dataBlock.Pointer) && (@void.Offset < (dataBlock.Pointer + (dataBlock.Count * dataBlock.Size)))) { @void.Offset_In_Parent = (@void.Offset - dataBlock.Pointer) % dataBlock.Size; dataBlock.Tag_Voids.Add(@void); } } }
/// <summary> /// This function calculates the size of the given datablock /// </summary> /// <param name="dataBlock">The datablock to calculate size for.</param> public void CalculateStructureSize(PluginDataBlock dataBlock) { //Create our integer for the closest number after the datablock int closestNumber = 999999999; //Loop through each plugin data block for (int i = 0; i < Plugin_Data_Blocks.Count; i++) { //If we find a closer number, set it. if (Plugin_Data_Blocks[i].Pointer > dataBlock.Pointer && Plugin_Data_Blocks[i].Pointer < closestNumber) { closestNumber = Plugin_Data_Blocks[i].Pointer; } } //Loop through each scan region for (int i = 0; i < Plugin_Scanning_Regions.Count; i++) { //If we find a closer number, set it. if (Plugin_Scanning_Regions[i].Offset + Plugin_Scanning_Regions[i].Size > dataBlock.Pointer && Plugin_Scanning_Regions[i].Offset + Plugin_Scanning_Regions[i].Size < closestNumber) { closestNumber = Plugin_Scanning_Regions[i].Offset + Plugin_Data_Blocks[i].Size; } } //If we didn't find anything, throw our exception. if (closestNumber == 999999999) { dataBlock.Size = 0; } else { //Set our size dataBlock.Size = (closestNumber - dataBlock.Pointer) / dataBlock.Count; } }