Code:
struct Player
{
public:
Table* p_Table() { return *(Table**)(this + 0x4); }
Actor* p_LocalOwner() { return *(Actor**)(this + 0x8); }
};
struct Table
{
char space[0x14];
Actor** Players;
};
struct Actor
{
char _0x0000[8];
D3DXVECTOR3 Position; //0x0008
char _0x0014[48];
float Health; //0x0044
char _0x0048[744];
D3DXMATRIX ViewMatrix; //0x0330
char _0x0370[1208];
wchar_t * Name[16]; //0x0828
char _0x0838[8];
};
struct Render
{
char pad_0x0000[0x20];
IDirect3DDevice9* pDevice;
int Width;
int Height;
};
struct cMatrix
{
D3DXMATRIX Matrix; //0x0000
char _0x0040[1024];
};
Player* pBase = (Player*)(pUtils.modBase.dwBase + 0xA88B2C); //C7 05 ? ? ? ? ? ? ? ? 68 ? ? ? ? 0F 11 05 ? ? ? ? C7 05 ? ? ? ? ? ? ? ? C6 05 ? ? ? ? ?
Render* pRender = *(Render**)(pUtils.modBase.dwBase + 0xA89198); //8B 0D ? ? ? ? 8D 44 24 18 50
cMatrix* pMatrix = *(cMatrix**)(pUtils.modBase.dwBase + 0xA91D00); //03 05 ? ? ? ? 50
Usage:
Code:
void function::CallEsp(LPDIRECT3DDEVICE9 pDevice)
{
Player* pBase = (Player*)(pUtils.modBase.dwBase + 0xA88B2C);
if (!pBase)
return;
Render* pRender = *(Render**)(pUtils.modBase.dwBase + 0xA89198);
if (!pRender)
return;
auto pLocal = pBase->p_LocalOwner();
if (!pLocal || !pBase->p_Table())
return;
for (int i = 0; i < 32; i++)
{
auto pPlayer = pBase->p_Table()->Players[i];
if (!pPlayer)
continue;
D3DXVECTOR3 vPlayer = pPlayer->Position, vScreen;
if (WorldToScreen(vPlayer, vScreen))
{
pMenu.sWriteText(vScreen.x, vScreen.y, D3DCOLOR_ARGB(255, 000, 255, 000), "%X - %0.2f", pPlayer, pPlayer->Health);
}
}
}