Code:
void DrawESP( LPDIRECT3DDEVICE9 )
{
char distance[512];
char name[512];
CPlayer* TargetPlayer = 0;
D3DXVECTOR3 vHeadPos,vFootPos;
D3DXVECTOR3 LocalViewMatrix[4];
CCamera* player_view_camera;
player_view_camera = player_manager->LocalPlayer->GetPlayerView();
GET_XAXIS_FROMMATRIX(&LocalViewMatrix[0], &player_view_camera->matrix );
GET_YAXIS_FROMMATRIX(&LocalViewMatrix[1], &player_view_camera->matrix );
GET_ZAXIS_FROMMATRIX(&LocalViewMatrix[2], &player_view_camera->matrix );
GET_ORIGIN_FROMMATRIX(&LocalViewMatrix[3], &player_view_camera->matrix );
for(int i = 0; i < 255; i++)
{
TargetPlayer = player_manager->GetPlayerByIndex(i);
if( cAim.IsValidTarget ( TargetPlayer ) && TargetPlayer != gLocalPlayer)
{
//if ( bScreenShot && ( ++iCurrentFrames < 200 ))
// continue;
// bScreenShot = 0;
if ( strcmp ( TargetPlayer->szPlayerName.c_str(), gLocalPlayer->szPlayerName.c_str() ) == 0 )
continue;
bool IsEnemy = TargetPlayer->nTeam != gLocalPlayer->nTeam;
bool bGetHead = cAim.GetBonePos(&vHeadPos, 60, TargetPlayer);
GET_ORIGIN_FROMMATRIX( &vFootPos, &TargetPlayer->playerinfo->ptr->Matrix );
D3DXVECTOR3 Length = vHeadPos - LocalViewMatrix[3];
float fDistance = D3DXVec3Length( &Length );
float fHealth = ( float ) TargetPlayer->soldierinfo->ptr->ObjectArmor->Health;
sprintf(name, "[%s]",TargetPlayer->szPlayerName.c_str());
sprintf(distance, "[%.0f]",fDistance);
UINT ps = (UINT)((fDistance*100)/850);
if (ps > 100) ps = 100; ps=100-ps;
UINT DoFade = (UINT)((ps*255)/100);
if ( bGetHead && vFootPos )
{
if ( NewWorldToScreen( &vHeadPos ) && NewWorldToScreen ( &vFootPos ))
{
bool IsVisible = cAim.IsVisible(vHeadPos,TargetPlayer, 60);
D3DCOLOR ESPCOL;
if(cVar.fVisESP)
ESPCOL = IsVisible ? D3DCOLOR_ARGB(DoFade,255,0,0) : D3DCOLOR_ARGB(DoFade,255,200,0);
else
ESPCOL = D3DCOLOR_ARGB(DoFade,255,0,0);
float RectYoffset = ((vFootPos.y+15) - vHeadPos.y);
float RectWidth = (RectYoffset/2);
float RectWidthPos = (vHeadPos.x - (RectWidth/2));
if(cVar.fNameESP)
{
if( IsEnemy )
{
cDX.DrawString( cDX.ESPFont, RectWidthPos, vHeadPos.y - ( RectYoffset / 6 ) - 10, ESPCOL, name);
}
else
{
cDX.DrawString( cDX.ESPFont, RectWidthPos, vHeadPos.y - ( RectYoffset / 6 ) - 10, D3DCOLOR_ARGB(DoFade,0,100,255), name);
}
}
if(cVar.fDistanceESP)
{
if( IsEnemy )
{
cDX.DrawString( cDX.ESPFont, RectWidthPos, vFootPos.y - ( RectYoffset / 6 ) + 15/*vFootPos.y + 15*/, ESPCOL, distance);
}
else
{
}
}
}
}
}
}
} IsValidTarget is just ( TargetPlayer->bManAlive)&&(!TargetPlayer->bManDown ) && (TargetPlayer->soldierinfo ) && ( TargetPlayer->playerinfo->ptr ) && ( TargetPlayer->soldierinfo->ptr )
there is small calculation done for getting text centered based on taken bonepos, also there is ESP Fade effect (thanks tetsuo). You can also easily add boundingboxes wich are via bonepos just use ur imagination and see how name and distance esp are done.
whats this ?
if ( strcmp ( TargetPlayer->szPlayerName.c_str(), gLocalPlayer->szPlayerName.c_str() ) == 0 )
continue;
above code prevents esp drawn to localplayer...
credits: Me, Umezawa, Cardoow
+ uc-forum in general and ppl here who contributes their knowledge
enjoy