Проседает FPS при включенном WH

Начинающий
Статус
Оффлайн
Регистрация
27 Мар 2021
Сообщения
23
Реакции[?]
2
Поинты[?]
0
У меня выполняется функция по кругу 500+ раз - чтение памяти.
Есть какие то варианты убавить нагрузку? Читать весь список нужно в любом случае.
Сама рисовка ест 4-5 кадров, чтение памяти 50-60% FPS.

Для чтения offset'ов использую данную функцию:

C++:
DWORD  offsetsM::GetPointerAddress(DWORD ptr, std::vector<DWORD> offsets)
{
    DWORD addr = ptr;
    if (&addr != nullptr)
    {
        for (int i = 0; i < offsets.size(); ++i)
        {
            if (addr != NULL)
            {
                addr = *(DWORD*)addr;
                if (addr && &addr != nullptr && addr != NULL)
                {
                    addr += offsets[i];
                }
                else
                {
                    return ptr;
                }
            }
        }
        return addr;
    }
}

C++:
    for (int i = 0; i < 512; i++)
    {
        UINT x = (UINT)i * 0x8;
        uintptr_t getadr = offsetsM::GetPointerAddress(baseAddr + 0x7CC7298, { x, 0xC, 0x0 });
        uintptr_t Adr = getadr + 0x8;
        int value = *(int*)Adr;
        if (value == 0)
        {
            uintptr_t getadrres = offsetsM::GetPointerAddress(baseAddr + 0x7CC7298, { x, 0xC, 0xF, 0xA, 0x10 });
            Vector3* mycord = (Vector3*)(baseAddr + 0x1CCCA2C);
            Vector3* cord = (Vector3*)offsetsM::GetPointerAddress(baseAddr + 0x7CC7298, { x, 0xF, 0xC8 });
            float dist = CalcDistance({ mycord->x,mycord->y,mycord->z }, { cord->x,cord->y,cord->z });
            std::stringstream ss;
            ss << dist;
            std::string str = ss.str();

            if (strcmp((char*)getadrres, (char*)"example") == 0)
            {
                Vector2 wtspos = WallHack::world_to_screen({ cord->x,cord->y,cord->z });
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y }, ImColor{ 253,233,16,255 }, "Monster");
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y + 20 }, ImColor{ 253,233,16,255 }, str.c_str());
            }
            if (strcmp((char*)getadrres, (char*)"example") == 0)
            {
                Vector2 wtspos = WallHack::world_to_screen({ cord->x,cord->y,cord->z });
                ImGui::GetOverlayDrawList()->AddCircle(ImVec2{ wtspos.x,wtspos.y}, 5, ImColor{ 255,0,0,255 }, 12, 2);
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y + 20 }, ImColor{ 255,0,0,255 }, str.c_str());
            }
            if (strcmp((char*)getadrres, (char*)"example") == 0)
            {
                Vector2 wtspos = WallHack::world_to_screen({ cord->x,cord->y,cord->z });
                ImGui::GetOverlayDrawList()->AddCircle(ImVec2{ wtspos.x,wtspos.y }, 5, ImColor{ 0,140,240,255 }, 12, 2);
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y + 20 }, ImColor{ 0,140,240,255 }, str.c_str());
            }
            if (strcmp((char*)getadrres, (char*)"example") == 0)
            {
                Vector2 wtspos = WallHack::world_to_screen({ cord->x,cord->y,cord->z });
                ImGui::GetOverlayDrawList()->AddCircle(ImVec2{ wtspos.x,wtspos.y}, 5, ImColor{ 255,117,24,255 }, 12, 2);
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y + 20 }, ImColor{ 255,117,24,255 }, str.c_str());
            }
            if (strcmp((char*)getadrres, (char*)"example") == 0)
            {
                Vector2 wtspos = WallHack::world_to_screen({ cord->x,cord->y,cord->z });
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y}, ImColor{ 139,0,255,255 }, "NPC");
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y + 20 }, ImColor{ 139,0,255,255 }, str.c_str());
            }
            if (strcmp((char*)getadrres, (char*)"example") == 0)
            {
                Vector2 wtspos = WallHack::world_to_screen({ cord->x,cord->y,cord->z });
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y }, ImColor{ 255,20,147,255 }, "Water");
                ImGui::GetBackgroundDrawList()->AddText(ImVec2{ wtspos.x,wtspos.y + 20 }, ImColor{ 255,20,147,255 }, str.c_str());
            }
        }
    }
 
Сверху Снизу