PasterAlmir С++ Участник Статус Оффлайн Регистрация 27 Фев 2019 Сообщения 1,123 Реакции[?] 391 Поинты[?] 46K 14 Дек 2019 Автор темы #1
Dreammm Dreammmless. Эксперт Статус Оффлайн Регистрация 19 Мар 2019 Сообщения 2,957 Реакции[?] 962 Поинты[?] 1K 14 Дек 2019 #2 на
PasterAlmir С++ Участник Статус Оффлайн Регистрация 27 Фев 2019 Сообщения 1,123 Реакции[?] 391 Поинты[?] 46K 14 Дек 2019 Автор темы #3 Dreammm написал(а): на Посмотреть вложение 51744 Нажмите для раскрытия... Не рабочий
DAEGER AGGRESSIVE ØŊE ŁØVE Начинающий Статус Оффлайн Регистрация 4 Фев 2019 Сообщения 193 Реакции[?] 19 Поинты[?] 0 14 Дек 2019 #4 Старый GetCSWpnData с паттерном заменяешь на следующий код C++: WeaponInfo_t* GetCSWpnData() { return Utils::CallVTable< WeaponInfo_t * (__thiscall*)(void*) >(this, 457)(this); } В utils.h добавляешь следующий код Код: template <typename T> static T CallVTable(void* pAddr, int iIndex) { return (*reinterpret_cast<T**>(pAddr))[iIndex]; }
Старый GetCSWpnData с паттерном заменяешь на следующий код C++: WeaponInfo_t* GetCSWpnData() { return Utils::CallVTable< WeaponInfo_t * (__thiscall*)(void*) >(this, 457)(this); } В utils.h добавляешь следующий код Код: template <typename T> static T CallVTable(void* pAddr, int iIndex) { return (*reinterpret_cast<T**>(pAddr))[iIndex]; }