Advertisement
OvidiuS

MakeVirtualHook

Feb 1st, 2013
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1.     void MakeVirtualHook()
  2.     {
  3.             edict_t *pEdict = CREATE_ENTITY();
  4.             edict_t *pEntity = CREATE_ENTITY();
  5.      
  6.      
  7.             CALL_GAME_ENTITY(PLID, "player", &pEdict->v);
  8.             CALL_GAME_ENTITY(PLID, "weapon_knife", &pEntity->v);
  9.            
  10.             if (pEdict->pvPrivateData == NULL)
  11.             {
  12.                     REMOVE_ENTITY(pEdict);
  13.                     return;
  14.             }
  15.      
  16.             if (pEntity->pvPrivateData == NULL)
  17.             {
  18.                     REMOVE_ENTITY(pEntity);
  19.                     return;
  20.             }
  21.      
  22.     #ifdef _WIN32
  23.             void **vtable = *((void***)((char*)pEdict->pvPrivateData));
  24.             void **vtable = *((void***)((char*)pEntity->pvPrivateData));
  25.     #elif __linux__
  26.             void **vtable = *((void***)(((char*)pEdict->pvPrivateData) + 0x94));
  27.             void **vtable = *((void***)(((char*)pEntity->pvPrivateData) + 0x94));
  28.     #endif
  29.            
  30.             REMOVE_ENTITY(pEdict);
  31.             REMOVE_ENTITY(pEntity);
  32.            
  33.             if(vtable == NULL)
  34.                     return;
  35.            
  36.             int **ivtable = (int **)vtable;
  37.            
  38.             pOrigFuncSpawn = (void *)ivtable[VirtFuncSpawn];
  39.             pOrigFuncTakeDamage = (void *)ivtable[VirtFuncTakeDamage];
  40.             pOrigFuncTraceAttack = (void *)ivtable[VirtFuncTraceAttack];
  41.             pOrigFuncKilled = (void *)ivtable[VirtFuncKilled];
  42.             pOrigFuncPlayerPostThink = (void *)ivtable[VirtFuncPlayerPostThink];
  43.             pOrigFuncResetMaxSpeed = (void *)ivtable[VirtFuncResetMaxSpeed];
  44.             pOrigFuncDeploy = (void *)ivtable[VirtFuncDeploy];
  45.            
  46.     #ifdef _WIN32
  47.             DWORD OldFlags;
  48.      
  49.             VirtualProtect(&ivtable[VirtFuncSpawn], sizeof(int *), PAGE_READWRITE, &OldFlags);
  50.             VirtualProtect(&ivtable[VirtFuncTakeDamage], sizeof(int *), PAGE_READWRITE, &OldFlags);
  51.             VirtualProtect(&ivtable[VirtFuncTraceAttack], sizeof(int *), PAGE_READWRITE, &OldFlags);
  52.             VirtualProtect(&ivtable[VirtFuncKilled], sizeof(int *), PAGE_READWRITE, &OldFlags);
  53.             VirtualProtect(&ivtable[VirtFuncPlayerPostThink], sizeof(int *), PAGE_READWRITE, &OldFlags);
  54.             VirtualProtect(&ivtable[VirtFuncResetMaxSpeed], sizeof(int *), PAGE_READWRITE, &OldFlags);
  55.             VirtualProtect(&ivtable[VirtFuncDeploy], sizeof(int *), PAGE_READWRITE, &OldFlags);
  56.     #elif __linux__
  57.             mprotect(&ivtable[VirtFuncSpawn], sizeof(int*), PROT_READ | PROT_WRITE);
  58.             mprotect(&ivtable[VirtFuncTakeDamage], sizeof(int*), PROT_READ | PROT_WRITE);
  59.             mprotect(&ivtable[VirtFuncTraceAttack], sizeof(int*), PROT_READ | PROT_WRITE);
  60.             mprotect(&ivtable[VirtFuncKilled], sizeof(int*), PROT_READ | PROT_WRITE);
  61.             mprotect(&ivtable[VirtFuncPlayerPostThink], sizeof(int*), PROT_READ | PROT_WRITE);
  62.             mprotect(&ivtable[VirtFuncResetMaxSpeed], sizeof(int*), PROT_READ | PROT_WRITE);
  63.             mprotect(&ivtable[VirtFuncDeploy], sizeof(int*), PROT_READ | PROT_WRITE);
  64.     #endif
  65.      
  66.             ivtable[VirtFuncSpawn] = (int *)HookSpawn;
  67.             ivtable[VirtFuncTakeDamage] = (int *)HookTakeDamage;
  68.             ivtable[VirtFuncTraceAttack] = (int *)HookTraceAttack;
  69.             ivtable[VirtFuncKilled] = (int *)HookKilled;
  70.             ivtable[VirtFuncPlayerPostThink] = (int *)HookPlayerPostThink;
  71.             ivtable[VirtFuncResetMaxSpeed] = (int *)HookResetMaxSpeed;
  72.             ivtable[VirtFuncDeploy] = (int *)HookDeploy;
  73.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement