Code:
bool DeltaEnable;
float MouseDeltaX = 0.0000f, MouseDeltaY = 0.0000f, MouseDeltaZ = 0.0000f;
_declspec (naked) void DeltaX()
{
if (DeltaEnable)
{
__asm
{
fld dword ptr[MouseDeltaX]
retn
}
}
else
__asm
{
fld dword ptr[ecx + 0x14]
retn
}
}
_declspec (naked) void DeltaY()
{
if (DeltaEnable)
{
__asm
{
fld dword ptr[MouseDeltaY]
retn
}
}
else
__asm
{
fld dword ptr[ecx + 0x18]
retn
}
}
int HookDelta = 0;
void InitDelta()
{
DWORD InputMouse = (DWORD)GetModuleHandleA("i3InputDx.dll");
int LocalX, LocalY, SetScreenCenterX, SetScreenCenterY, Priority, AimKey, BoneIndex = -1;
D3DXVECTOR3 OnWorld, OnScreen;
D3DVIEWPORT9 pViewer;
pDevice->GetViewport(&pViewer);
SetScreenCenterX = (pViewer.Width / 2.0f);
SetScreenCenterY = (pViewer.Height / 2.0f);
DWORD Player = *(DWORD*)g_pPlayer;
if((Player != 0x000000))
{
if(HookDelta == 0)
{
HookDelta = 1;
CreateDetour((DWORD)DeltaX,(DWORD)InputMouse + 0xA0AF0,Detour_Type_0xE9, 5); //A0AF0
CreateDetour((DWORD)DeltaY,(DWORD)InputMouse + 0xA0B00,Detour_Type_0xE9, 5);
}
Priority = GetNearestToCrosshair();
DeltaEnable = false;
if(Priority > -1)
{
if (cPlayer->GetBone2(Priority,7))
{
if (GetAsyncKeyState(VK_SHIFT))
DeltaEnable = true;
else
DeltaEnable = false;
if (WorldToDelta(OnWorld, OnScreen))
{
LocalX = OnScreen.x;
LocalY = OnScreen.y;
if (LocalX != SetScreenCenterX && LocalY != SetScreenCenterY)
{
MouseDeltaX = LocalX - SetScreenCenterX;
MouseDeltaY = LocalY - SetScreenCenterY;
}
else
{
MouseDeltaX = 0.00f;
MouseDeltaY = 0.00f;
}
}
}
}
}
}
Code:
bool DeviceReset = true;
#define pD3DdeviceX LPDIRECT3DDEVICE9
DWORD GetDevice__EndScene;
DWORD Return_EndScene;
DWORD retMyDIP;
HMODULE Module_d3d9;
LPDIRECT3DDEVICE9 ReadyDevice;
pD3DdeviceX g_pDevice = 0;
void PostReset(LPDIRECT3DDEVICE9 pDevice)
{
D3DXCreateFontA(pDevice, 14, 0, FW_BOLD, 0, 0, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont);
D3DXCreateLine(pDevice, &pLine);
}
void PreReset(pD3DdeviceX pDevice)
{
if (pFont)
{
pFont = NULL;
}
if (g_pDevice != pDevice)
{
g_pDevice = pDevice;
}
if (pFont)
{
pFont->Release();
pFont = NULL;
pFont = FALSE;
}
pFont = NULL;
}
void PresetDevice()
{
PreReset(pDevice);
DeviceReset = true;
ReadyDevice = pDevice;
}
bool bCreateFont = true;
void FontReset()
{
pFont->OnLostDevice();
pFont->OnResetDevice();
pLine->OnLostDevice();
pLine->OnResetDevice();
}
void Render()
{
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
if (DeviceReset == true)
{
if (pDevice != ReadyDevice)
{
DeviceReset = false;
PresetDevice();
}
}
if (DeviceReset == true)
{
if (pFont == NULL)
{
PostReset(pDevice);
ReadyDevice = pDevice;
}
else
{
//Loop
FontReset();
}
}
}
__declspec(naked) void MidFunction_EndScene()
{
__asm
{
mov edi, edi
push ebp
mov ebp, esp
mov pDevice, esi
pushad
call[Render]
popad
jmp[Return_EndScene]
}
}
BYTE HOOK_PAT_8[] = { "\x8B\xFF\x55\x8B\xEC\xFF\x75\x08\x8B\x01\x6A\x3E\xFF\x90\xF4\x00" };
CHAR HOOK_MAS_8[] = { "xxxxxxxxxxxxxxx?" };
BYTE HOOK_PAT_7[] = { "\x8B\xFF\x55\x8B\xEC\x8B\x55\x08\x8B\x01\x8B\x80\xF4\x00\x00\x00\x52\x6A\x3E\xFF\xD0\x5D\xC2\x04\x00" };
CHAR HOOK_MAS_7[] = { "xxxxxxxxxxxxxxxxxxxxxxxxx" };
bool CheckWindowsVersion(DWORD dwMajorVersion, DWORD dwMinorVersion, DWORD dwProductType)
{
OSVERSIONINFOEX VersionInfo;
ZeroMemory(&VersionInfo, sizeof(OSVERSIONINFOEX));
VersionInfo.dwOSVersionInfoSize = sizeof(VersionInfo);
GetVersionEx((OSVERSIONINFO*) &VersionInfo);
if (VersionInfo.dwMajorVersion == dwMajorVersion)
{
if (VersionInfo.dwMinorVersion == dwMinorVersion)
{
if (VersionInfo.wProductType == dwProductType)
{
return (TRUE);
}
}
}
return (FALSE);
}
void DxHook()
{
Module_d3d9 = LoadLibraryA(STR_HOOK_D3D9);
DWORD *vtbl;
DWORD adr;
if (CheckWindowsVersion(6, 2, VER_NT_WORKSTATION)) // Windows 8 / 8.1
{
GetDevice__EndScene = FindPattern((DWORD) Module_d3d9, 0xFFFFFF, (PBYTE) HOOK_PAT_8, (PCHAR) HOOK_MAS_8);
adr = FindPattern((DWORD) Module_d3d9, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
}
else if (CheckWindowsVersion(6, 0, VER_NT_WORKSTATION) || CheckWindowsVersion(6, 1, VER_NT_WORKSTATION)) // Windows 7 / Vista
{
GetDevice__EndScene = FindPattern((DWORD) Module_d3d9, 0xFFFFFF, (PBYTE) HOOK_PAT_7, (PCHAR) HOOK_MAS_7);
adr = FindPattern((DWORD) Module_d3d9, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
}
memcpy(&vtbl, (void*) (adr + 2), 4);
Return_EndScene = GetDevice__EndScene + 0x5;
retMyDIP = vtbl[147] + 0x5;
CreateDetour((DWORD) MidFunction_EndScene, (DWORD) GetDevice__EndScene, Detour_Type_0xE9, 5);
}