#include "SDK.h"
#define _Sleep Sleep
#define _CreateThread CreateThread
#define _GetModuleHandle GetModuleHandle
#define _GetProcAddress GetProcAddress
#define _CreateInterfaceFn CreateInterfaceFn
CClient gClient;
CClient* g_pHookedClient = new CClient;
_CreateInterfaceFn g_AppSysFactory = NULL;
_CreateInterfaceFn ClientFactory = NULL;
_CreateInterfaceFn EngineFactory = NULL;
_CreateInterfaceFn PhysicFactory = NULL;
_CreateInterfaceFn FileSystemFactory = NULL;
_CreateInterfaceFn StudioFactory = NULL;
_CreateInterfaceFn MaterialFactory = NULL;
_CreateInterfaceFn VGUIFactory = NULL;
void* AppSysFactory( const char* pszName, int* piRetnCode )
{
void* lpReturn = g_AppSysFactory( pszName, piRetnCode );
D

NCE
(
vgui::VGui_InitInterfacesList( "CLIENT", &g_AppSysFactory, 1 );
if( vgui::VGui_InitInterfacesList("CLIENT", &g_AppSysFactory, 1) == false )
add_log( "Failed to initialize VGUI" );
if ( lpReturn )
{
if( strcmp( pszName, "VGUI_Surface030" ) )
{
CombatARms.m_pSurface = (vgui::ISurface*)lpReturn;
add_log( "CombatArms.m_pSurface: [0x%.8X]", (DWORD)CombatArms.m_pSurface);
CombatArms.m_pMatSurface = ( IMatSystemSurface* )vgui::surface();
add_log( "CombatArms.m_pMatSurface: [0x%.8X]", (DWORD)CombatArms.m_pMatSurface);
}
}
);
return ( void* )lpReturn;
}
int __stdcall new_Init( _CreateInterfaceFn appSystemFactory, _CreateInterfaceFn physicsFactory, CGlobalVarsBase *pGlobals )
{
g_AppSysFactory = appSystemFactory;
CombatArms.m_pGlobals = pGlobals;
return gClient.Init( AppSysFactory, physicsFactory, pGlobals );
}
void HookClient( void )
{
ClientFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("client.dll"), "CreateInterface" );
EngineFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("engine.dll"), "CreateInterface" );
PhysicFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("vphysics.dll"), "CreateInterface" );
FileSystemFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("FileSystem_Steam.dll"), "CreateInterface" );
StudioFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("StudioRender.dll"), "CreateInterface" );
MaterialFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("MaterialSystem.dll"), "CreateInterface" );
VGUIFactory = (_CreateInterfaceFn) _GetProcAddress( _GetModuleHandle("vguimatsurface.dll"), "CreateInterface" );
if( CombatArms.m_pClient == NULL )
{
CombatArms.m_pClient = (IBaseClientDLL*)ClientFactory( CLIENT_DLL_INTERFACE_VERSION , NULL );
add_log( "CombatArms.m_pClient: [0x%.8X]", (DWORD)CombatArms.m_pClient );
if( CombatArms.m_pClient )
{
DWORD dwOld = NULL;
DWORD dwOld1 = NULL;
DWORD dwOld2 = NULL;
PDWORD* m_pdwClient = (PDWORD*)ClientFactory( CLIENT_DLL_INTERFACE_VERSION , NULL );
if ( m_pdwClient )
{
memcpy( (void*) &gClient,(void*)*m_pdwClient , sizeof (CClient) );
g_pHookedClient = (CClient*)*m_pdwClient;
add_log( "m_pdwClient: [0x%.8X] ----------> g_pHookedClient: [0x%.8X]", (DWORD)m_pdwClient, (DWORD)g_pHookedClient);
if( g_pHookedClient )
{
if( VirtualProtect( (LPVOID)&g_pHookedClient->Init, 4, PAGE_EXECUTE_READWRITE, &dwOld ) )
g_pHookedClient->Init = &new_Init;
if( VirtualProtect( (LPVOID)&g_pHookedClient->CreateMove, 4, PAGE_EXECUTE_READWRITE, &dwOld1 ) )
g_pHookedClient->CreateMove = &new_CreateMove;
if( VirtualProtect( (LPVOID)&g_pHookedClient->HudUpdate, 4, PAGE_EXECUTE_READWRITE, &dwOld2 ) )
g_pHookedClient->HudUpdate = &new_HudUpdate;
if ( CombatArms.m_pInput == NULL )
{
PDWORD pdwAddress = ( PDWORD ) ((( DWORD ) gClient.CreateMove ) + 0x20 );
PDWORD pdwTable = ( PDWORD ) *pdwAddress;
CombatArms.m_pInput = ( CInput* ) *pdwTable;
add_log( "CombatArms.m_pInput: [0x%.8X]", (DWORD)CombatArms.m_pInput);
}
if( CombatArms.m_pPrediction == NULL )
{
CombatArms.m_pPrediction = (IPrediction*)ClientFactory("VClientPrediction001" , NULL);
add_log( "CombatArms.m_pPrediction: [0x%.8X]", (DWORD)CombatArms_pPrediction);
}
if( CombatArms.m_pEntList == NULL )
{
CombatARms.m_pEntList = (IClientEntityList*)ClientFactory("VClientEntityLi st003", NULL);
add_log( "CombatArms.m_pEntList: [0x%.8X]", (DWORD)CombatArms.m_pEntList);
}
}
}
}
}
if( CombatArms.m_pEngine == NULL )
{
CombatArms.m_pEngine = (IVEngineClient*)EngineFactory("VEngineClient012", NULL);
add_log( "CombatArms.m_pEngine: [0x%.8X]", (DWORD)CombatArms.m_pEngine);
}
if( CombatArms.m_pEnginevgui == NULL )
{
CombatArms.m_pEnginevgui = (IEngineVGui*)EngineFactory("VEngineVGui001", NULL);
add_log( "CombatArms.m_pEnginevgui: [0x%.8X]", (DWORD)CombatArms.m_pEnginevgui);
}
if( CombatArms.m_pEnginetrace == NULL )
{
CombatArms.m_pEnginetrace = (IEngineTrace*)EngineFactory("EngineTraceClient003 ", NULL);
add_log( "CombatArms.m_pEnginetrace: [0x%.8X]", (DWORD)CombatArms.m_pEnginetrace);
}
if( CombatArms.m_pEffects == NULL )
{
CombatArms.m_pEffects = (IVEfx*)EngineFactory("VEngineEffects001", NULL);
add_log( "CombatArms.m_pEffects: [0x%.8X]", (DWORD)CombatArms.m_pEffects);
}
if( CombatArms.m_pStudioRender == NULL )
{
CombatArms.m_pStudioRender = (IStudioRender *)StudioFactory(STUDIO_RENDER_INTERFACE_VERSION, NULL);
add_log( "CombatArms.m_pStudioRender: [0x%.8X]", (DWORD)CombatArms.m_pStudioRender);
}
if( CombatArms.m_pFileSystem == NULL )
{
CombatArms.m_pFileSystem = (IFileSystem*)FileSystemFactory("VFileSystem012", NULL);//FILESYSTEM_INTERFACE_VERSION
add_log( "CombatArms.m_pFileSystem: [0x%.8X]", (DWORD)CombatArms.m_pFileSystem);
}
if( CombatArms.m_pRender == NULL )
{
CombatArms.m_pRender = (IVRenderView*)EngineFactory("VEngineRenderView012 ", NULL);//VENGINE_RENDERVIEW_INTERFACE_VERSION
add_log( "CombatArms.m_pRender: [0x%.8X]", (DWORD)CombatArms.m_pRender);
}
if( CombatArms.m_pPhysicAPI == NULL )
{
CombatArms.m_pPhysicAPI = (IPhysicsSurfaceProps *)PhysicFactory(VPHYSICS_SURFACEPROPS_INTERFACE_VE RSION, NULL);
add_log( "CombatArms.m_pPhysicAPI: [0x%.8X]", (DWORD)CombatArms.m_pPhysicAPI);
}
if( CombatArms.m_pCvar == NULL )
{
CombatArms.m_pCvar = (ICvar *)EngineFactory(VENGINE_CVAR_INTERFACE_VERSION, NULL);
add_log( "CombatArms.m_pCvar: [0x%.8X]", (DWORD)CombatArms.m_pCvar);
}
if( CombatArms.m_pModelRender == NULL )
{
CombatArms.m_pModelRender = (IVModelRender*)EngineFactory("VEngineModel012", NULL);//VENGINE_HUDMODEL_INTERFACE_VERSION
add_log( "CombatArms.m_pModelRender: [0x%.8X]", (DWORD)CombatArms.m_pModelRender);
}
if( CombatArms.m_pMaterialSystem == NULL )
{
CombatArms.m_pMaterialSystem = (IMaterialSystem*)MaterialFactory("VMaterialSystem 076", NULL);
add_log( "CombatArms.m_pMaterialSystem: [0x%.8X]", (DWORD)CombatArms.m_pMaterialSystem );
}
if( CombatArms.m_pModelinfo == NULL )
{
CombatArms.m_pModelinfo = (IVModelInfoClient*)EngineFactory( "VModelInfoClient003", NULL );
add_log( "CombatArms.m_pModelinfo: [0x%.8X]", (DWORD)CombatArms.m_pModelinfo);
}
if( CombatArms.m_pDebugOverlay == NULL )
{
CombatArms.m_pDebugOverlay = (IVDebugOverlay*)EngineFactory( "VDebugOverlay003", NULL );
add_log( "CombatArms.m_pDebugOverlay: [0x%.8X]", (DWORD)CombatArms.m_pDebugOverlay);
}
if( CombatArms.m_pGameEventManager == NULL )
{
CombatArms.m_pGameEventManager = (IGameEventManager2*) EngineFactory( "GAMEEVENTSMANAGER002", NULL );
add_log( "CombatArms.m_pGameEventManager: [0x%.8X]", (DWORD)CombatArms.m_pGameEventManager);
}
}
DWORD dwWaitThread ( LPVOID lpArgs )
{
HMODULE hClient = NULL; // don't init to a value to get the thread to lock if the module is loaded for 100 ms
for ( ; hClient == NULL ; _Sleep(100) )// once there are console connect tools out we should set this down
hClient = _GetModuleHandle("client.dll");
HookClient();
return 0;
}
void LaunchHookThread ( void )
{
DWORD dwThreadID = NULL;
HANDLE hThread = _CreateThread( NULL, NULL,(LPTHREAD_START_ROUTINE) dwWaitThread , NULL, NULL, &dwThreadID);
}
Bookmarks