Energy Reload
-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сам класс IRendera: Выход через адрес, получение ширины\высоты экрана и перевод (конвертация) 3D координаты на 2D экран
namespace _IRender
{
static DWORD64 _IRendererGlobalEnvironment_ru = адрес ;
static DWORD64 getWidth_offset_ru = смещение, относительно от указателя на класс;
static DWORD64 getHeight_offset_ru = смещение, относительно от указателя на класс;
static DWORD64 v_ProjectToScreen_ru = позиция в виртуальном классе;
};
C++:
class IRenderer
{
public:
static IRenderer* Singleton()
{
return *(IRenderer**)((DWORD64)(_IRender::_IRendererGlobalEnvironment_ru);
}
int GetWidth()//Высота
{
return *(int*)((DWORD64)this + _IRender::getWidth_offset_ru);//
}
int GetHeight()//Ширина
{
return *(int*)((DWORD64)this + (_IRender::getHeight_offset_ru);//
}
bool ProjectToScreen(VecToScreen* pVecToScreen)
{
typedef bool(__thiscall* oProjectToScreen)(PVOID, VecToScreen*);
return vFun_Call<oProjectToScreen>(this,_IRender::v_ProjectToScreen_ru)(this, pVecToScreen);
}
};
{
static DWORD64 _IRendererGlobalEnvironment_ru = адрес ;
static DWORD64 getWidth_offset_ru = смещение, относительно от указателя на класс;
static DWORD64 getHeight_offset_ru = смещение, относительно от указателя на класс;
static DWORD64 v_ProjectToScreen_ru = позиция в виртуальном классе;
};
C++:
template< typename cData >
cData vFun_Call(PVOID64 BaseClass, DWORD64 vIndex)
{
PDWORD64* vPointer = (PDWORD64*)BaseClass;
PDWORD64 vFunction = *vPointer;
DWORD64 dwAddress = vFunction[vIndex];
return (cData)(dwAddress);
}
Последнее редактирование: