Making ESP Working On All OS
1th Step loop all players and draw text on player positions :
HRESULT DoEsp(LPDIRECT3DDEVICE9 pDevice)
{
for(int player_ = 0; player_ < 32; player_++)
{
if(!g_pBase->player || !g_pBase->local) break;
CPlayerInfo* player_info = GetPlayerInfoByIndex(player_);
CPlayerInfo* local_info = GetPlayerInfoByIndex(g_pBase->local->index);
CPlayer* pPlayer = g_pBase->player[player_];
if(player_info && pPlayer)
{
float fPlayer[3] = {0};
fPlayer[0] = pPlayer->read_coordinate.x;
fPlayer[1] = pPlayer->read_coordinate.y + 35;
fPlayer[2] = pPlayer->read_coordinate.z;
int x = 0, y = 0, z = 0;
DWORD EspColor;
if(WorldToScreen(pDevice, fPlayer, x, y))
{
if(player_info->m_Health > 0 && player_ != g_pBase->local->index)
{
if(cVars.Esp.Name) {y += 13;g_pFont->DrawTextA(x,y,EspColor,player_info->m_IngameNick,D3DFONT_CENTERED);}
}
}
}
}
return D3D_OK;
}
{
for(int player_ = 0; player_ < 32; player_++)
{
if(!g_pBase->player || !g_pBase->local) break;
CPlayerInfo* player_info = GetPlayerInfoByIndex(player_);
CPlayerInfo* local_info = GetPlayerInfoByIndex(g_pBase->local->index);
CPlayer* pPlayer = g_pBase->player[player_];
if(player_info && pPlayer)
{
float fPlayer[3] = {0};
fPlayer[0] = pPlayer->read_coordinate.x;
fPlayer[1] = pPlayer->read_coordinate.y + 35;
fPlayer[2] = pPlayer->read_coordinate.z;
int x = 0, y = 0, z = 0;
DWORD EspColor;
if(WorldToScreen(pDevice, fPlayer, x, y))
{
if(player_info->m_Health > 0 && player_ != g_pBase->local->index)
{
if(cVars.Esp.Name) {y += 13;g_pFont->DrawTextA(x,y,EspColor,player_info->m_IngameNick,D3DFONT_CENTERED);}
}
}
}
}
return D3D_OK;
}
Our worldtoscreen
D3DVIEWPORT9 vp;
bool WorldToScreen(LPDIRECT3DDEVICE9 pDevice, float* fPlayer, int &x, int &y)
{
if( !pDevice )
return NULL;
D3DXVECTOR3 vWorldLocation(fPlayer[0],fPlayer[1],fPlayer[2]);
D3DXMatrixIdentity( &oIdentity );
D3DXVECTOR3 vScreenCoord;
D3DDISPLAYMODE pViewInfo;
pDevice->GetDisplayMode(NULL,&pViewInfo);
vp.X = 0;
vp.Y = 0;
vp.Height = pViewInfo.Height;
vp.Width = pViewInfo.Width;
vp.MinZ = 0;
vp.MaxZ = 1;
D3DXVec3Project( &vScreenCoord, &vWorldLocation, &vp, &oProjection, &oView, &oIdentity);
if(vScreenCoord.z < 1)
{
x = (int)vScreenCoord.x;
y = (int)vScreenCoord.y;
return true;
}
return false;
}
bool WorldToScreen(LPDIRECT3DDEVICE9 pDevice, float* fPlayer, int &x, int &y)
{
if( !pDevice )
return NULL;
D3DXVECTOR3 vWorldLocation(fPlayer[0],fPlayer[1],fPlayer[2]);
D3DXMatrixIdentity( &oIdentity );
D3DXVECTOR3 vScreenCoord;
D3DDISPLAYMODE pViewInfo;
pDevice->GetDisplayMode(NULL,&pViewInfo);
vp.X = 0;
vp.Y = 0;
vp.Height = pViewInfo.Height;
vp.Width = pViewInfo.Width;
vp.MinZ = 0;
vp.MaxZ = 1;
D3DXVec3Project( &vScreenCoord, &vWorldLocation, &vp, &oProjection, &oView, &oIdentity);
if(vScreenCoord.z < 1)
{
x = (int)vScreenCoord.x;
y = (int)vScreenCoord.y;
return true;
}
return false;
}
Now let's hook settransform
typedef HRESULT (WINAPI* SetTransform_t)(LPDIRECT3DDEVICE9 pDevice, D3DTRANSFORMSTATETYPE dwState, D3DMATRIX* pMatrix);
SetTransform_t pSetTransform;
HRESULT WINAPI nSetTransform(LPDIRECT3DDEVICE9 pDevice, D3DTRANSFORMSTATETYPE dwState, D3DMATRIX* pMatrix)
{
if (dwState == D3DTS_VIEW) oView = *pMatrix;
if (dwState == D3DTS_PROJECTION) oProjection = *pMatrix;
if (dwState == D3DTS_WORLD) oWorld = *pMatrix;
return pSetTransform(pDevice,dwState, pMatrix);
}
pSetTransform = (SetTransform_t)g_pMisc->DetourE9((DWORD)vTable[44], (DWORD)&nSetTransform, 5 );
SetTransform_t pSetTransform;
HRESULT WINAPI nSetTransform(LPDIRECT3DDEVICE9 pDevice, D3DTRANSFORMSTATETYPE dwState, D3DMATRIX* pMatrix)
{
if (dwState == D3DTS_VIEW) oView = *pMatrix;
if (dwState == D3DTS_PROJECTION) oProjection = *pMatrix;
if (dwState == D3DTS_WORLD) oWorld = *pMatrix;
return pSetTransform(pDevice,dwState, pMatrix);
}
pSetTransform = (SetTransform_t)g_pMisc->DetourE9((DWORD)vTable[44], (DWORD)&nSetTransform, 5 );
Fix missing definitions by youself!
Credits :
xCyniu
Credits :
xCyniu
