Virtual Hook System

Adding Modules to help with scripting/coding plugins.
User avatar
Archive-Poster
Posts: 1090
Gender:
United States of America

Virtual Hook System

Post by Archive-Poster »

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:

Code: Select all

void OnAmxxAttach()
{
    checkCompiler();
} 
Example of use

Code: Select all

#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

Code: Select all

//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

Code: Select all

//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:

Code: Select all

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
}; 
Attachments
virtual_hook.zip
(4.63 KiB) Downloaded 2 times

Who is online

Users browsing this forum: No registered users and 1 guest