Code:
bool WorldToScreen(LPDIRECT3DDEVICE9 pDevice, CONST D3DXVECTOR3 &vWorld, D3DXVECTOR3 *pScreen)
{
CILTDrawPrim *pDrawPrimitive = *(CILTDrawPrim **)DrawPrimitive;
D3DVIEWPORT9 D3DViewport = {0};
D3DXMATRIX matrixProjection, matrixView, matrixWorld;
pDevice->GetTransform(D3DTS_VIEW, &matrixView);
pDevice->GetTransform(D3DTS_PROJECTION, &matrixProjection);
pDevice->GetTransform(D3DTS_WORLD, &matrixWorld);
pDevice->GetViewport(&D3DViewport);
D3DXVec3Project(pScreen, &vWorld, &D3DViewport, &pDrawPrimitive->Projection, &pDrawPrimitive->View, &pDrawPrimitive->World);
return(pScreen->z < 1.0f);
}
ggg
FLOAT GetDistance(D3DXVECTOR3 Local, D3DXVECTOR3 Target)
{
FLOAT fResult[3];
SubtractVector(Target, Local, fResult);
return (sqrt((fResult[0] * fResult[0]) + (fResult[1] * fResult[1]) + (fResult[2] * fResult[2])) / 100);
}
ggggghh
VOID DrawHealthBars(INT x, INT y, WORD health, LPDIRECT3DDEVICE9 pDevice)
{
DWORD dwColor;
if(health > 100)
health = 100;
if(health > 75)
dwColor = 0xFF00FF00;
else if(health > 40)
dwColor = 0xFFFF9B00;
else
dwColor = 0xFFFF0000;
DWORD dwDrawWidth = health / 4;
if(dwDrawWidth <= 2)
dwDrawWidth = 4;
Base.FillRGB(x - 1, y - 1, 27, 5, 0xFF000000, pDevice);
Base.FillRGB(x, y, dwDrawWidth, 3, dwColor, pDevice);
}
VOID ESP(INT Names, INT Lines, INT Distances, INT Boxes, INT Warning, INT HealthBars, LPDIRECT3DDEVICE9 pDevice)
{
pDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
INT CenterX = (GetSystemMetrics(0) / 2) - 1;
INT CenterY = (GetSystemMetrics(1) / 2) - 1;
CHAR CName[50], CDistance[50];
if((Names || Lines || Distances || Boxes || Warning || HealthBars))
{
GetPlayerByIndex = (lpGetPlayerByIndex)PlayerByIndex;
unsigned long ulThis = *(unsigned long *)ClientInfoMgr;
GetLocalPlayer = (lpGetLocalPlayer)LocalPlayer;
cGameClientShell *pGameClientShell = *(cGameClientShell **)GCS;
for(INT i = 0; i < 24; i++)
{
cPlayerInfo *pLocal = GetLocalPlayer(ulThis);
cPlayerInfo *pPlayer = GetPlayerByIndex(ulThis, i, 0);
cCharacterFX *PlayerFX = (cCharacterFX *)pGameClientShell->GetSFXMgr()->SFXList[0x18].List[i];
if(pPlayer != 0 && pPlayer->Object != 0 && pPlayer->pIsDead == 0 && pLocal->pIsDead == 0)
{
D3DXVECTOR3 vPos, vFootScreen, vScreen;
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound2;
vPos.z = pPlayer->Object->Pos.z;
if(WorldToScreen(pDevice, vPos, &vScreen))
{
if(pPlayer->pTeam != pLocal->pTeam)
{
if(Names)
{
sprintf(CName, "%s", pPlayer->pName);
Directx.Texto(vScreen.x, vScreen.y, Red, TCenter, Directx.pFont, CName);
}
if(Lines)
{
Base.DrawLine(CenterX, CenterY, vScreen.x, vScreen.y, Red, pDevice);
}
if(Distances)
{
sprintf(CDistance, "%0.2f metros", GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos));
Directx.Texto(vScreen.x, vScreen.y + 15, Red, TCenter, Directx.pFont, CDistance);
}
if(Boxes)
{
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound1;
vPos.z = pPlayer->Object->Pos.z;
if(WorldToScreen(pDevice, vPos, &vFootScreen))
{
INT BoxDist = INT(0.2f * (vFootScreen.y - vScreen.y));
#pragma warning(push)
D3DRECT rectBoxes[4] =
{
{vScreen.x - BoxDist, vScreen.y , vScreen.x - BoxDist + 1, vFootScreen.y},
{vScreen.x - BoxDist, vFootScreen.y, vScreen.x + BoxDist + 1, vFootScreen.y + 1},
{vScreen.x + BoxDist, vScreen.y , vScreen.x + BoxDist + 1, vFootScreen.y},
{vScreen.x - BoxDist, vScreen.y , vScreen.x + BoxDist, vScreen.y + 1}
};
#pragma warning(pop)
pDevice->Clear(4, rectBoxes, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Red, 1.0f, 0);
}
}
if(Warning)
{
if(GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos) < 10.0f)
Directx.Texto(CenterX, 100, Red, TCenter, Directx.WarningFont, "Inimigo a menos de 10m");
}
if(HealthBars)
{
DrawHealthBars(vScreen.x - 7, vScreen.y - 5, (int)PlayerFX->wHealth, pDevice);
}
}
if(pPlayer->pTeam == pLocal->pTeam/* && pLocal->Index != PlayerFX->Index*/)
{
if(Names)
{
sprintf(CName, "%s", pPlayer->pName);
Directx.Texto(vScreen.x, vScreen.y, Blue, TCenter, Directx.pFont, CName);
}
if(Lines)
{
Base.DrawLine(CenterX, CenterY, vScreen.x, vScreen.y, Blue, pDevice);
}
if(Distances)
{
sprintf(CDistance, "%0.2f metros", GetDistance(pLocal->Object->Pos, pPlayer->Object->Pos));
Directx.Texto(vScreen.x, vScreen.y + 15, Blue, TCenter, Directx.pFont, CDistance);
}
if(Boxes)
{
vPos.x = pPlayer->Object->Pos.x;
vPos.y = pPlayer->Object->yBound1;
vPos.z = pPlayer->Object->Pos.z;
if(WorldToScreen(pDevice, vPos, &vFootScreen))
{
INT BoxDist = INT(0.2f * (vFootScreen.y - vScreen.y));
#pragma warning(push)
D3DRECT rectBoxes[4] =
{
{vScreen.x - BoxDist, vScreen.y , vScreen.x - BoxDist + 1, vFootScreen.y},
{vScreen.x - BoxDist, vFootScreen.y, vScreen.x + BoxDist + 1, vFootScreen.y + 1},
{vScreen.x + BoxDist, vScreen.y , vScreen.x + BoxDist + 1, vFootScreen.y},
{vScreen.x - BoxDist, vScreen.y , vScreen.x + BoxDist, vScreen.y + 1}
};
#pragma warning(pop)
pDevice->Clear(4, rectBoxes, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Blue, 1.0f, 0);
}
}
}
}
}
}
}
}
#endif