typedef HRESULT(WINAPI* m_pEndSceneHook)(IDirect3DDevice9*);
m_pEndSceneHook EndSceneOrig;
VMTHookManager* VmtHook = new VMTHookManager;
LPDIRECT3DDEVICE9 pDevice;
IGFW* pFrameWork;
bool Create = false;
HRESULT WINAPI pEndScene(IDirect3DDevice9* m_pDevice)
{
if (!Create)
{
while (!pD3D9) { pD3D9 = pD3D9; }
D3DXCreateLine(pD3D9, &pLine);
pD3D9->GetViewport(&Viewport);
ScreenWidth = Viewport.Width;
ScreenHeight = Viewport.Height;
ScreenCenterX = (ScreenWidth / 2);
ScreenCenterY = (ScreenHeight / 2);
Create = true;
}
if (GetAsyncKeyState(VK_PRIOR) & 1)
{
IActor* MePlayer = NULL;
IGFW* pFrameWork = IGFW::GetGameFramework();
IEntitySystem* pEntSys = pSSGE->pGetEntitySystem();
// Lets loop the entites
IEntityIt* pEntIt = pEntSys->GetEntityIterator();
if (pFrameWork->GetClientActor(&MePlayer))
{
if (MePlayer && pEntIt)
for (; IEntity * pEnt = pEntIt->Next(); )
{
if (IActor * LocPlayer = pFrameWork->GetIActorSystem()->GetActor(pEnt->GetID()))
{
Vec3 EnemyPos = GetPlayerPos(pEnt);
Vec3 Out;
if (MePlayer != LocPlayer)
if (M1Team(MePlayer, LocPlayer) && (!GetDeadPlayer(LocPlayer)))
{
if ((WorldToScreen(EnemyPos, &Out) && (!GetDeadPlayer(LocPlayer))) && (M1Team(MePlayer, LocPlayer)))
{
Box3D(pEnt, Yellow, pD3D9);
}
}
}
}
}
}
return EndSceneOrig(m_pDevice);
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD64 dwReason, LPVOID)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
Beep(500, 1000);
VmtHook->bInitialize((PDWORD64*)SSGE::GetSSGE()->pGetRender()->GetDirectDevice());
EndSceneOrig = (m_pEndSceneHook)VmtHook->dwHookMethod((DWORD64)pEndScene, 42);
break;
case DLL_PROCESS_DETACH:
FreeLibraryAndExitThread(hModule, 0);
break;
}
}