Начинающий
- Статус
- Оффлайн
- Регистрация
- 14 Июл 2025
- Сообщения
- 9
- Реакции
- 0
Добрый день, уважаемые пользователи! До обновления Ainm Graph 2 У меня была функция для чтения модификатора слоя, она работала через GameTrace довольно хорошо, но после обновления, все сломалось. Вот как я получал модификатор слоя:
1) Паттерн для чтения слоя (В самом низу Init())
А вот функция получения материала. Сразу говорю, я сделал return 0.7f для того, чтобы авол хоть как-то работал.
До обновления все работало. Кто сможет помоч мне, буду благодарен


1) Паттерн для чтения слоя (В самом низу Init())
C++:
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++:
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;
}
}
До обновления все работало. Кто сможет помоч мне, буду благодарен