Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void MakeVirtualHook()
- {
- edict_t *pEdict = CREATE_ENTITY();
- edict_t *pEntity = CREATE_ENTITY();
- CALL_GAME_ENTITY(PLID, "player", &pEdict->v);
- CALL_GAME_ENTITY(PLID, "weapon_knife", &pEntity->v);
- if (pEdict->pvPrivateData == NULL)
- {
- REMOVE_ENTITY(pEdict);
- return;
- }
- if (pEntity->pvPrivateData == NULL)
- {
- REMOVE_ENTITY(pEntity);
- return;
- }
- #ifdef _WIN32
- void **vtable = *((void***)((char*)pEdict->pvPrivateData));
- void **vtable = *((void***)((char*)pEntity->pvPrivateData));
- #elif __linux__
- void **vtable = *((void***)(((char*)pEdict->pvPrivateData) + 0x94));
- void **vtable = *((void***)(((char*)pEntity->pvPrivateData) + 0x94));
- #endif
- REMOVE_ENTITY(pEdict);
- REMOVE_ENTITY(pEntity);
- if(vtable == NULL)
- return;
- int **ivtable = (int **)vtable;
- pOrigFuncSpawn = (void *)ivtable[VirtFuncSpawn];
- pOrigFuncTakeDamage = (void *)ivtable[VirtFuncTakeDamage];
- pOrigFuncTraceAttack = (void *)ivtable[VirtFuncTraceAttack];
- pOrigFuncKilled = (void *)ivtable[VirtFuncKilled];
- pOrigFuncPlayerPostThink = (void *)ivtable[VirtFuncPlayerPostThink];
- pOrigFuncResetMaxSpeed = (void *)ivtable[VirtFuncResetMaxSpeed];
- pOrigFuncDeploy = (void *)ivtable[VirtFuncDeploy];
- #ifdef _WIN32
- DWORD OldFlags;
- VirtualProtect(&ivtable[VirtFuncSpawn], sizeof(int *), PAGE_READWRITE, &OldFlags);
- VirtualProtect(&ivtable[VirtFuncTakeDamage], sizeof(int *), PAGE_READWRITE, &OldFlags);
- VirtualProtect(&ivtable[VirtFuncTraceAttack], sizeof(int *), PAGE_READWRITE, &OldFlags);
- VirtualProtect(&ivtable[VirtFuncKilled], sizeof(int *), PAGE_READWRITE, &OldFlags);
- VirtualProtect(&ivtable[VirtFuncPlayerPostThink], sizeof(int *), PAGE_READWRITE, &OldFlags);
- VirtualProtect(&ivtable[VirtFuncResetMaxSpeed], sizeof(int *), PAGE_READWRITE, &OldFlags);
- VirtualProtect(&ivtable[VirtFuncDeploy], sizeof(int *), PAGE_READWRITE, &OldFlags);
- #elif __linux__
- mprotect(&ivtable[VirtFuncSpawn], sizeof(int*), PROT_READ | PROT_WRITE);
- mprotect(&ivtable[VirtFuncTakeDamage], sizeof(int*), PROT_READ | PROT_WRITE);
- mprotect(&ivtable[VirtFuncTraceAttack], sizeof(int*), PROT_READ | PROT_WRITE);
- mprotect(&ivtable[VirtFuncKilled], sizeof(int*), PROT_READ | PROT_WRITE);
- mprotect(&ivtable[VirtFuncPlayerPostThink], sizeof(int*), PROT_READ | PROT_WRITE);
- mprotect(&ivtable[VirtFuncResetMaxSpeed], sizeof(int*), PROT_READ | PROT_WRITE);
- mprotect(&ivtable[VirtFuncDeploy], sizeof(int*), PROT_READ | PROT_WRITE);
- #endif
- ivtable[VirtFuncSpawn] = (int *)HookSpawn;
- ivtable[VirtFuncTakeDamage] = (int *)HookTakeDamage;
- ivtable[VirtFuncTraceAttack] = (int *)HookTraceAttack;
- ivtable[VirtFuncKilled] = (int *)HookKilled;
- ivtable[VirtFuncPlayerPostThink] = (int *)HookPlayerPostThink;
- ivtable[VirtFuncResetMaxSpeed] = (int *)HookResetMaxSpeed;
- ivtable[VirtFuncDeploy] = (int *)HookDeploy;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement