HRESULT WINAPI EndScene_Detour(LPDIRECT3DDEVICE9 Device_Interface)
{
DrawConsole( Device_Interface );
/* // View NewLSuface
RECT rectx;
rectx.left = Viewport.Width - (Viewport.Width/4);
rectx.top = 0;
rectx.right = Viewport.Width;
rectx.bottom = (Viewport.Height/4);
Device_Interface->GetRenderTarget( 0,&originalSurface );
Device_Interface->StretchRect( NewLSurface, NULL,
originalSurface, &rectx, D3DTEXF_NONE );
if( originalSurface ){
originalSurface->Release();
originalSurface = NULL;
}*/
int PixelCtr = 0;
POINT ClosestTarget;
ClosestTarget.x = -1;
ClosestTarget.y = -1;
/* Lock the small rendertarget to get 2d coords . auto edge included . */
if( NumberOfObjects > 0 && btIngame )
{
Device_Interface->StretchRect( NewLSurface, NULL,
NewSurface, NULL, D3DTEXF_NONE );
}
/* Draw Crosshair */
if( !btConsole && XHair && btIngame ){
int Len = 15;
Line[0].x = (float)((Viewport.Width/2));
Line[0].y = (float)((Viewport.Height/2) - Len);
Line[1].x = (float)((Viewport.Width/2));
Line[1].y = (float)((Viewport.Height/2) + Len);
pLine->Begin();
pLine->Draw(Line,2,XHairColor);
pLine->End();
Line[0].x = (float)((Viewport.Width/2) - Len);
Line[0].y = (float)((Viewport.Height/2));
Line[1].x = (float)((Viewport.Width/2) + Len);
Line[1].y = (float)((Viewport.Height/2));
pLine->Begin();
pLine->Draw(Line,2,XHairColor);
pLine->End();
}
/* Draw Circle */
if( FOV > 0 && !btConsole && btIngame ){
pLine->Begin();
pLine->Draw(LineX,Count,D3DXCOLOR(1.0, 0.0, 0.0, 1.0));
pLine->End();
}
if( NumberOfObjects > 0 && btIngame )
{
if( NewSurface->LockRect( &LOCKEDRECT, NULL,
D3DLOCK_READONLY ) == S_OK )
{
for( long scy = (long)1; scy <= (long)
( Viewport.Height / (int) +Scale ); scy++ )
{
for( long scx = (long)1; scx <= (long)
( Viewport.Width / (int) +Scale); scx++ )
{
AimAt[ PixelCtr ].x = -1;
AimAt[ PixelCtr ].y = -1;
ColorArray[ PixelCtr ] = -1;
pBits = ( LPBYTE ) LOCKEDRECT.pBits;
pBits += ( ( scy * LOCKEDRECT.Pitch )
+ ( scx * ( BITSPERPIXEL / 8 ) ) );
pColor = ( D3DCOLOR* ) pBits;
if( *pColor != NULL )
{
AimAt[ PixelCtr ].x = scx;
AimAt[ PixelCtr ].y = scy;
ColorArray[ PixelCtr ] = *pColor;
if( PixelCtr < 400000 )
PixelCtr++;
}
}
}
NewSurface->UnlockRect( );
}
/* loop through the pixel data to get colors */
int ClosestPosition = 0;
if( FOV )
ClosestPosition = +FOV;
else
ClosestPosition = (int)+Viewport.Width;
for( int i = 0; i < NumberOfObjects; i++ )
{
ColorDetector = 0x00;
TempX[i] = -1;
TempY[i] = -1;
for( int j = 0; j <= PixelCtr; j++ )
{
if( ColorArray[j] == color[i] && !ColorDetector )
{
FirstPos = j;
ColorDetector = 0x01;
}
if( ColorArray[j] == color[i] && ColorDetector )
{
LastPos = j;
}
}
if( ColorDetector )
{
TempX[i] = ( DWORD )( AimAt[FirstPos].x + AimAt[LastPos].x ) / 2;
TempY[i] = ( DWORD )( AimAt[FirstPos].y + AimAt[LastPos].y ) / 2;
TempX[i] *= Scale;
TempY[i] *= Scale;
if( +GetDistance( TempX[i], Viewport.Width/2, TempY[i],
Viewport.Height/2 ) < +ClosestPosition ){
ClosestTarget.x = TempX[i];
ClosestTarget.y = TempY[i];
}
}
}
}
if( btIngame && NumberOfObjects > 0 )
{
/* Draw esp on all objects */
for( int i = 0; i < NumberOfObjects; i++ )
{
if( TempX[i] != -1 && TempY[i] != -1 && !btConsole && ESP )
{
int Len = 4;
LineA[0].x = (float)(TempX[i] - Len);
LineA[0].y = (float)(TempY[i] - Len);
LineA[1].x = (float)(TempX[i] + Len);
LineA[1].y = (float)(TempY[i] + Len);
pLine->Begin();
pLine->Draw(LineA,2,ESPColor);
pLine->End();
LineB[0].x = (float)(TempX[i] + Len);
LineB[0].y = (float)(TempY[i] - Len);
LineB[1].x = (float)(TempX[i] - Len);
LineB[1].y = (float)(TempY[i] + Len);
pLine->Begin();
pLine->Draw(LineB,2,ESPColor);
pLine->End();
}
}
/* Aim at closest position */
if( ClosestTarget.x != -1 && ClosestTarget.y != -1 && !btConsole && AIM )
{
POINT Target;
if((DWORD)ClosestTarget.x > (Viewport.Width/2)){
Target.x = ClosestTarget.x - (Viewport.Width/2);
Target.x /= 4;
Target.x = +Target.x;
}
if((DWORD)ClosestTarget.x < (Viewport.Width/2)){
Target.x = (Viewport.Width/2) - ClosestTarget.x;
Target.x /= 4;
Target.x = -Target.x;
}
if((DWORD)ClosestTarget.x == (Viewport.Width/2)){
Target.x = 0;
}
if((DWORD)ClosestTarget.y > (Viewport.Height/2)){
Target.y = ClosestTarget.y - (Viewport.Height/2);
Target.y /= 4;
Target.y = +Target.y;
}
if((DWORD)ClosestTarget.y < (Viewport.Height/2)){
Target.y = (Viewport.Height/2) - ClosestTarget.y;
Target.y /= 4;
Target.y = -Target.y;
}
if((DWORD)ClosestTarget.y == (Viewport.Height/2)){
Target.y = 0;
}
// Use with ingame sensitivity below 1.4 in BF2
if( GetKeyState( VK_XBUTTON1 )<0 )
mouse_event( MOUSEEVENTF_MOVE, Target.x,
Target.y, 0, NULL );
}
/* Clear RenderTarget */
Device_Interface->GetRenderTarget( 0,&originalSurface );
Device_Interface->GetDepthStencilSurface( &originalDStencilSurface );
Device_Interface->SetRenderTarget( 0,NewLSurface );
Device_Interface->SetDepthStencilSurface( originalDStencilSurface );
Device_Interface->Clear( 0, NULL, D3DCLEAR_TARGET , WhiteColor, 0.0f, 0 );
Device_Interface->SetRenderTarget( 0,originalSurface );
Device_Interface->SetDepthStencilSurface( originalDStencilSurface );
if( originalSurface )
if(originalSurface->Release() == S_OK)
originalSurface = NULL;
if( originalDStencilSurface )
if(originalDStencilSurface->Release() == S_OK)
originalDStencilSurface = NULL;
}
return EndScene_Pointer(Device_Interface);
}