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;
            }
        }
示例#2
0
        /// <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);
         }
     }
 }
示例#4
0
        /// <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;
            }
        }