-
Автор темы
- #1
для начала вам нужен CViewRender класс, скипайте этот шаг если он у вас уже есть
после этого нужно захватить интерфейс CViewRender
теперь нужно хукнуть RenderSmokeOverlay, его индекс - 41
и осталось лишь сделать
вот и все (я надеюсь вам хватит мозга переделать все под свой сдк) :)
Код:
class CViewSetup;
class CViewRender
{
public:
void RenderView(CViewSetup &view, CViewSetup &hud, int nClearFlags, int whatToDraw)
{
using vfunc = void(__thiscall*)(void*, CViewSetup&, CViewSetup&, int, int);
return CallVFunction<vfunc>(this, 6)(this, view, hud, nClearFlags, whatToDraw);
}
};
Код:
CViewRender* Interfaces::m_pViewRender = nullptr;
CViewRender* Interfaces::ViewRender()
{
if (!m_pViewRender)
{
m_pViewRender = **reinterpret_cast<CViewRender***>(Utils::FindSignature("client_panorama.dll", "A1 ? ? ? ? B9 ? ? ? ? C7 05 ? ? ? ? ? ? ? ? FF 10") + 1);
}
return m_pViewRender;
}
Код:
using RenderSmokeOverlay_t = void(__thiscall*)(CViewRender*, bool);
void __stdcall Hooked_RenderSmokeOverlay(bool unknown);
extern RenderSmokeOverlay_t g_fnOriginalRenderSmokeOverlay;
unique_ptr<VFTableHook> g_pViewRenderHook = nullptr;
RenderSmokeOverlay_t g_fnOriginalRenderSmokeOverlay = nullptr;
в инициализацию хуков:
g_pViewRenderHook = make_unique<VFTableHook>(Interfaces::ViewRender());
g_fnOriginalRenderSmokeOverlay = g_pViewRenderHook->Hook(41, reinterpret_cast<RenderSmokeOverlay_t>(Hooked_RenderSmokeOverlay)); // CViewRender::RenderSmokeOverlay
Код:
void __stdcall Hooked_RenderSmokeOverlay(bool unknown)
{
if(!g_Options.misc.no_smoke)
g_fnOriginalRenderSmokeOverlay(Interfaces::ViewRender(), unknown);
}
Последнее редактирование: