Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Как получить модификатор слоя?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Июл 2025
Сообщения
9
Реакции
0
Добрый день, уважаемые пользователи! До обновления Ainm Graph 2 У меня была функция для чтения модификатора слоя, она работала через GameTrace довольно хорошо, но после обновления, все сломалось. Вот как я получал модификатор слоя:
1) Паттерн для чтения слоя (В самом низу Init())
C++:
Expand Collapse Copy
 using fnGetSurfaceData_t = uintptr_t(__fastcall*)(void*);
 inline fnGetSurfaceData_t g_pGetSurfaceData = nullptr; // Переменная для surface

// Паттерны: (В самом низу функции будет паттерн surface)

  inline void Init() {
      if (initialized) return;

      // pTraceManager
      {
          uintptr_t addr = FindPattern("client.dll", "48 8B 1D ? ? ? ? 24 ? 0C ?");
          if (addr) {
              int32_t disp = *reinterpret_cast<int32_t*>(addr + 3);
              pTraceManager = *reinterpret_cast<void**>(addr + 7 + disp);
          }
      }

      // fnTraceShape
      {
          uintptr_t addr = FindPattern("client.dll", "48 89 5C 24 ? 48 89 4C 24 ? 55 57");
          if (addr)
              fnTraceShape = reinterpret_cast<fnTraceShape_t>(addr);
      }

      // fnInitFilter
      {
          uintptr_t addr = FindPattern("client.dll", "48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC ? 0F B6 41 ? 33 FF 24");
          if (addr)
              fnInitFilter = reinterpret_cast<fnInitFilter_t>(addr);
      }

              // fnGetSurfaceData <-- Вот он
        {
            uintptr_t addr = FindPattern("client.dll", "48 8B 0D ? ? ? ? 48 85 C9 74 07");

                g_pGetSurfaceData = reinterpret_cast<fnGetSurfaceData_t>(addr);
        }
     

      initialized = (pTraceManager != nullptr)
          && (fnTraceShape != nullptr)
          && (fnInitFilter != nullptr);

      Vars::Client::dbg_01 = initialized ? 100 : -100;
  }

А вот функция получения материала. Сразу говорю, я сделал return 0.7f для того, чтобы авол хоть как-то работал.
C++:
Expand Collapse Copy
inline float GetSurfacePenetrationModifier(void* pSurface) {
    if (!EngineTrace::g_pGetSurfaceData) return 1.0f; // <-- Это строка не срабатывает => идем дальше

    __try {
        uintptr_t pPhysData = EngineTrace::g_pGetSurfaceData(pSurface);
        if (!pPhysData) return 0.7f; // Тут тоже все выполняется => идем далее

        float modifier = *reinterpret_cast<float*>(pPhysData + 0x8); // А вот тут происходит __except

        if (!std::isfinite(modifier) || modifier < 0.01f) return 0.7f;

        return modifier;
    }
    __except (EXCEPTION_EXECUTE_HANDLER) {
        return 0.7f;
    }
}

До обновления все работало. Кто сможет помоч мне, буду благодарен 🙏🙏🙏
 
Назад
Сверху Снизу