New Member
04-14-2016
, 05:37
Virtual Hook System
#1
Virtual Hook System by Juli
This is ready system to hook virtual functions, which will allow catch any virtual event in the gaming world. There is support for the new and old builds (you don't need to bother about offsets and their differences in the old and new builds, it was all done instead of you).
Installation
The first step is to call the check build function (at all, check compiler, but let will be so). For this, catch
OnMetaAttach also
OnAmxxAttach function, in which we call the necessary function:
PHP Code:
void OnAmxxAttach () { checkCompiler (); }
Example of use
PHP Code:
#include "amxxmodule.h" #include "virtual_hook.h" VIRTUAL_CALLBACK ( void ) PlayerTakeDamage ( void * pthis VIRTUAL_ARG , entvars_t * pInflictor , entvars_t * pAttacker , float fDamage , int iDamagebits ); virtualHook pTakeDamage ( "player" , virtualHookName :: takedamage , ( void *) PlayerTakeDamage ); void OnAmxxAttach () { checkCompiler (); } void ServerActivate ( edict_s * a , int b , int c ) { pTakeDamage . registerHook (); } void ServerDeactivate () { pTakeDamage . removeHook (); } VIRTUAL_CALLBACK ( void ) PlayerTakeDamage ( void * pthis VIRTUAL_ARG , entvars_t * pInflictor , entvars_t * pAttacker , float fDamage , int iDamagebits ) { //pre VIRTUAL_CALL < void >( pTakeDamage . getAddress (), pthis , pInflictor , pAttacker , fDamage , iDamagebits ); //call original function in gamedll //post edict_t * pVictim = UTIL_PrivateToEdict ( pthis ); //get this edict const char * szName = STRING ( pVictim -> v . netname ); //get this player name CENTER_SAY ( PLID , "Player %s received damage" , szName ); //say to all in center }
Available functions of the class
PHP Code:
//register this virtual function bool registerHook (); //remove this virtual function bool removeHook (); /*got address this virtual function you need to call, by using the VIRTUAL_CALL function*/ void * getAddress (); //got state this function (registered or no registered) bool getState ();
Additional functions
PHP Code:
//got offset necessary function inline int getVirtualOffset ( int hookid ); //mentioned in paragraph "Installation" inline void checkCompiler ( void ); //for call the original function at address template < typename ReturnType > inline ReturnType VIRTUAL_CALL ( void * address , /*arguments required function*/ ); inline edict_t * UTIL_PrivateToEdict ( void * pvPrivateData ); inline edict_t * UTIL_EntvarsToEdict ( entvars_t * pthis ); inline int UTIL_EdictToIndex ( edict_t * pthis ); inline int UTIL_EntvarToIndex ( entvars_t * pthis ); inline int UTIL_PrivateToIndex ( void * pthis );
P.S. : The arguments necessary virtual functions can be seen in the comments to
virtualHookName enum:
Spoiler
PHP Code:
enum virtualHookName { base , pev , spawn , //Function params: function(void *this) | Return type: void precache , //Function params: function(void *this) | Return type: void keyvalue , //Function params: function(void *this, int kvd_handle) | Return type: void objectcaps , //Function params: function(void *this) | Return type: int activate , //Function params: function(void *this) | Return type: void setobjectcollisionbox , //Function params: function(void *this) | Return type: void classify , //Function params: function(void *this) | Return type: int deathnotice , //Function params: function(void *this, entvars_t *idchild) | Return type: void traceattack , //Function params: function(void *this, entvars_t *attacker, float damage, float direction[3], int traceresult, int damagebits) | Return type: void takedamage , //Function params: function(void *this, entvars_t *inflictor, entvars_t *attacker, float damage, int damagebits) | Return type: int takehealth , //Function params: function(void *this, float health, int damagebits) | Return type: int killed , //Function params: function(void *this, entvars_t *attacker, int shouldgib) | Return type: void bloodcolor , //Function params: function(void *this) | Return type: int tracebleed , //Function params: function(void *this, float damage, float direction[3], int trace_handle, int damagebits) | Return type: void istriggered , //Function params: function(void *this, void *activator) | Return type: int mymonsterpointer , //Function params: function(void *this) | Return type: void mysquadmonsterpointer , //Function params: function(void *this) | Return type: void gettogglestate , //Function params: function(void *this) | Return type: int addpoints , //Function params: function(void *this, int points, int cangonegative) | Return type: void addpointstoteam , //Function params: function(void *this, int points, int cangonegative) | Return type: void addplayeritem , //Function params: function(void *this, void *other) | Return type: int removeplayeritem , //Function params: function(void *this, void *other) | Return type: int giveammo , //Function params: function(void *this, int amount, const char *name, int max) | Return type: int getdelay , //Function params: function(void *this) | Return type: float ismoving , //Function params: function(void *this) | Return type: int overridereset , //Function params: function(void *this) | Return type: void damagedecal , //Function params: function(void *this, int damagebits) | Return type: int settogglestate , //Function params: function(void *this, int state) | Return type: void startsneaking , //Function params: function(void *this) | Return type: void stopsneaking , //Function params: function(void *this) | Return type: void oncontrols , //Function params: function(void *this, int idon) | Return type: int issneaking , //Function params: function(void *this) | Return type: int isalive , //Function params: function(void *this) | Return type: int isbspmodel , //Function params: function(void *this) | Return type: int reflectgauss , //Function params: function(void *this) | Return type: int hastarget , //Function params: function(void *this, int strindex) | Return type: int isinworld , //Function params: function(void *this) | Return type: int isplayer , //Function params: function(void *this) | Return type: int isnetclient , //Function params: function(void *this) | Return type: int teamid , //Function params: function(void *this) | Return type: char getnexttarget , //Function params: function(void *this) | Return type: void think , //Function params: function(void *this) | Return type: void touch , //Function params: function(void *this, void *other) | Return type: void use, //Function params: function(void *this, void *caller, void *activator, int use_type, float value) | Return type: void blocked , //Function params: function(void *this, void *other) | Return type: void respawn , //Function params: function(void *this) | Return type: void updateowner , //Function params: function(void *this) | Return type: void fbecomeprone , //Function params: function(void *this) | Return type: int center , //Function params: function(void *this) | Return type: Vector eyeposition , //Function params: function(void *this) | Return type: Vector earposition , //Function params: function(void *this) | Return type: Vector bodytarget , //Function params: function(void *this, Vector *srcvector) | Return type: Vector illumination , //Function params: function(void *this) | Return type: int fvisible , //Function params: function(void *this, void *other) | Return type: int fvecvisible , //Function params: function(void *this, Vector *origin) | Return type: int player_jump , //Function params: function(void *this) | Return type: void player_duck , //Function params: function(void *this) | Return type: void player_prethink , //Function params: function(void *this) | Return type: void player_postthink , //Function params: function(void *this) | Return type: void player_getgunposition , //Function params: function(void *this) | Return type: Vector player_shouldfadeondeath , //Function params: function(void *this) | Return type: int player_impulsecommands , //Function params: function(void *this) | Return type: void player_updateclientdata , //Function params: function(void *this) | Return type: void item_addtoplayer , //Function params: function(void *this, void *player) | Return type: int item_addduplicate , //Function params: function(void *this, void *original) | Return type: int item_getiteminfo , //Function params: function(void *this) | Return type: int item_candeploy , //Function params: function(void *this) | Return type: int item_deploy , //Function params: function(void *this) | Return type: int item_canholster , //Function params: function(void *this) | Return type: void item_holster , //Function params: function(void *this) | Return type: void item_updateiteminfo , //Function params: function(void *this) | Return type: void item_preframe , //Function params: function(void *this) | Return type: void item_postframe , //Function params: function(void *this) | Return type: void item_drop , //Function params: function(void *this) | Return type: void item_kill , //Function params: function(void *this) | Return type: void item_attachtoplayer , //Function params: function(void *this, void *player) | Return type: void item_primaryammoindex , //Function params: function(void *this) | Return type: int item_secondaryammoindex , //Function params: function(void *this) | Return type: int item_updateclientdata , //Function params: function(void *this, void *player) | Return type: int item_getweaponptr , //Function params: function(void *this) | Return type: void item_itemslot , //Function params: function(void *this) | Return type: int weapon_extractammo , //Function params: function(void *this, void *target) | Return type: int weapon_extractclipammo , //Function params: function(void *this, void *target) | Return type: int weapon_addweapon , //Function params: function(void *this) | Return type: int weapon_playemptysound , //Function params: function(void *this) | Return type: int weapon_resetemptysound , //Function params: function(void *this) | Return type: void weapon_sendweaponanim , //Function params: function(void *this, int anim, int skiplocal, int body) | Return type: void weapon_isusable , //Function params: function(void *this) | Return type: int weapon_primaryattack , //Function params: function(void *this) | Return type: void weapon_secondaryattack , //Function params: function(void *this) | Return type: void weapon_reload , //Function params: function(void *this) | Return type: void weapon_weaponidle , //Function params: function(void *this) | Return type: void weapon_retireweapon , //Function params: function(void *this) | Return type: void weapon_shouldweaponidle , //Function params: function(void *this) | Return type: int weapon_usedecrement , //Function params: function(void *this) | Return type: int cstrike_restart , //Function params: function(void *this) | Return type: void cstrike_roundrespawn , //Function params: function(void *this) | Return type: void cstrike_item_candrop , //Function params: function(void *this) | Return type: int cstrike_item_getmaxspeed , //Function params: function(void *this) | Return type: float end // No use me };
Last edited by Juli_; 04-14-2016 at 09:58 .