/// <summary>
        ///
        /// </summary>
        internal void UpdatePointers()
        {
            PointerEventActionType.UpdatePointers();
            PointerIsMotionPlay.UpdatePointers();
            PointerEventActionTask.UpdatePointers();

            PointerPlayerStatus.UpdatePointers();
            PointerPlayerHP.UpdatePointers();
            PointerPlayerPosition.UpdatePointers();

            PointerRankManager.UpdatePointers();
            PointerInventory.UpdatePointers();

            try
            {
                PointerEnemyCount.UpdatePointers();
                PointerEnemyEntryList.UpdatePointers();

                GenerateEnemyEntries();

                PointerInventoryCount.UpdatePointers();
                PointerInventoryEntryList.UpdatePointers();
                GenerateItemEntries();
            }
            catch
            {
                // May fail in main menu
            }
        }
Exemple #2
0
 /// <summary>
 ///
 /// </summary>
 internal void UpdatePointers()
 {
     if (Process.GetProcessesByName("re7").FirstOrDefault() == null)
     {
         return;
     }
     if (!connected)
     {
         Initialize(Process.GetProcessesByName("re7").FirstOrDefault().Id); return;
     }
     else
     {
         PointerMrEverythingCount.UpdatePointers();
         PointerDA.UpdatePointers();
         PointerMapName.UpdatePointers();
         PointerHP.UpdatePointers();
         PointerBagCount.UpdatePointers();
         PointerInventoryCount.UpdatePointers();
         PointerInventorySlotSelected.UpdatePointers();
         PointerEnemyEntryCount.UpdatePointers();
         GenerateEnemyEntries(); // This has to be here for the next part.
         for (int i = 0; i < PointerEnemyEntries.Length; ++i)
         {
             PointerEnemyEntries[i].UpdatePointers();
         }
     }
 }
        private unsafe void GenerateItemEntries()
        {
            bool success;

            fixed(int *p = &InventoryTableCount)
            success = PointerInventoryCount.TryDerefInt(0x1C, p);

            PointerInventoryEntries       = new MultilevelPointer[MAX_ITEMS];
            PointerInventoryEntriesCustom = new MultilevelPointer[MAX_ITEMS];

            // Skip the first 28 bytes and read the rest as a byte array
            // This can be done because the pointers are stored sequentially in an array
            byte[] inventoryEntriesPtrByteArr = PointerInventoryEntryList.DerefByteArray(0x20, MAX_ITEMS * sizeof(IntPtr));

            // Do a block copy to convert the byte array to an IntPtr array
            IntPtr[] inventoryEntriesPtrArr = new IntPtr[MAX_ITEMS];
            Buffer.BlockCopy(inventoryEntriesPtrByteArr, 0, inventoryEntriesPtrArr, 0, inventoryEntriesPtrByteArr.Length);

            for (int i = 0; i < PointerInventoryEntries.Length; ++i)
            {
                PointerInventoryEntries[i]       = new MultilevelPointer(memoryAccess, IntPtr.Add(inventoryEntriesPtrArr[i], 0x58));
                PointerInventoryEntriesCustom[i] = new MultilevelPointer(memoryAccess, IntPtr.Add(inventoryEntriesPtrArr[i], 0x58), 0x90);
            }
        }
Exemple #4
0
        internal IGameMemoryRE7 Refresh()
        {
            if (PointerMapName.BaseAddress != IntPtr.Zero)
            {
                var bytes = PointerMapName.DerefByteArray(0x0, 48);
                gameMemoryValues.MapName = System.Text.Encoding.Unicode.GetString(bytes);
            }
            else
            {
                gameMemoryValues.MapName = "Menu";
            }

            gameMemoryValues.MrEverything = PointerMrEverythingCount.DerefInt(0x28);
            gameMemoryValues.CurrentDA    = PointerDA.DerefFloat(0xF8);
            gameMemoryValues.CurrentHP    = PointerHP.DerefFloat(0x24);
            gameMemoryValues.MaxHP        = PointerHP.DerefFloat(0x20);

            if (gameMemoryValues.CurrentHP == 1000 && !isReset)
            {
                isReset = true;
                memoryAccess.SetFloatAt(IntPtr.Add(PointerHP.Address, 0x20), 1500);
            }


            if (PointerBagCount.Address != IntPtr.Zero)
            {
                gameMemoryValues.PlayerInventorySlots = (PointerBagCount.DerefInt(0x78) * 4) + 12;
            }
            else
            {
                gameMemoryValues.PlayerInventorySlots = 12;
            }


            gameMemoryValues.PlayerInventoryCount = PointerInventoryCount.DerefInt(0x28);

            // Enemy HP

            GenerateEnemyEntries();
            if (gameMemoryValues.EnemyHealth == null || gameMemoryValues.EnemyHealth.Length < EnemyTableCount)
            {
                gameMemoryValues.EnemyHealth = new EnemyHP[EnemyTableCount];
                gameMemoryValues.EnemyCount  = gameMemoryValues.EnemyHealth.Length;
                for (int i = 0; i < gameMemoryValues.EnemyHealth.Length; ++i)
                {
                    gameMemoryValues.EnemyHealth[i] = new EnemyHP();
                }
            }
            for (int i = 0; i < gameMemoryValues.EnemyHealth.Length; ++i)
            {
                if (i < PointerEnemyEntries.Length && PointerEnemyEntries[i].Address != IntPtr.Zero)
                { // While we're within the size of the enemy table, set the values.
                    gameMemoryValues.EnemyHealth[i].ID        = PointerEnemyEntries[i].DerefUShort(0x48);
                    gameMemoryValues.EnemyHealth[i].MaximumHP = PointerEnemyEntries[i].DerefFloat(0x20);
                    gameMemoryValues.EnemyHealth[i].CurrentHP = PointerEnemyEntries[i].DerefFloat(0x24);
                }
                else
                { // We're beyond the current size of the enemy table. It must have shrunk because it was larger before but for the sake of performance, we're not going to constantly recreate the array any time the size doesn't match. Just blank out the remaining array values.
                    gameMemoryValues.EnemyHealth[i].ID        = 0;
                    gameMemoryValues.EnemyHealth[i].MaximumHP = 0;
                    gameMemoryValues.EnemyHealth[i].CurrentHP = 0;
                }
            }


            gameMemoryValues.PlayerCurrentSelectedInventorySlots = PointerInventorySlotSelected.DerefInt(0x24);

            GetItems();

            HasScanned = true;
            return(gameMemoryValues);
        }