This is the vtbl for CBasePlayer.
PHP Code:
struct _vt_CBasePlayer {
void (* CBasePlayer__Spawn)(_CBasePlayer* self);
void (* CBasePlayer__Precache)(_CBasePlayer* self);
void (* CBaseEntity__Restart)(_CBaseEntity* self);
void (* CBaseMonster__KeyValue)(_CBaseMonster* self, KeyValueData_s*);
int (* CBasePlayer__Save)(_CBasePlayer* self, _CSave&);
int (* CBasePlayer__Restore)(_CBasePlayer* self, _CRestore&);
int (* CBasePlayer__ObjectCaps)(_CBasePlayer* self);
void (* CBaseEntity__Activate)(_CBaseEntity* self);
void (* CBaseEntity__SetObjectCollisionBox)(_CBaseEntity* self);
int (* CBasePlayer__Classify)(_CBasePlayer* self);
void (* CBaseEntity__DeathNotice)(_CBaseEntity* self, entvars_s*);
void (* CBasePlayer__TraceAttack)(_CBasePlayer* self, entvars_s*, float, Vector&, TraceResult*, int);
int (* CBasePlayer__TakeDamage)(_CBasePlayer* self, entvars_s*, entvars_s*, float, int);
int (* CBasePlayer__TakeHealth)(_CBasePlayer* self, float, int);
void (* CBasePlayer__Killed)(_CBasePlayer* self, entvars_s*, int);
int (* CBaseMonster__BloodColor)(_CBaseMonster* self);
void (* CBaseEntity__TraceBleed)(_CBaseEntity* self, float, Vector&, TraceResult*, int);
BOOL (* CBaseEntity__IsTriggered)(_CBaseEntity* self, _CBaseEntity*);
_CBaseMonster* (* CBaseEntity__MyMonsterPointer)(_CBaseEntity* self);
_CBaseMonster* (* CBaseEntity__MySquadMonsterPointer)(_CBaseEntity* self);
int (* CBaseToggle__GetToggleState)(_CBaseToggle* self);
void (* CBasePlayer__AddPoints)(_CBasePlayer* self, int, int);
void (* CBasePlayer__AddPointsToTeam)(_CBasePlayer* self, int, int);
BOOL (* CBasePlayer__AddPlayerItem)(_CBasePlayer* self, _CBasePlayerItem*);
BOOL (* CBasePlayer__RemovePlayerItem)(_CBasePlayer* self, _CBasePlayerItem*);
int (* CBasePlayer__GiveAmmo)(_CBasePlayer* self, int, char*, int);
float (* CBaseToggle__GetDelay)(_CBaseToggle* self);
int (* CBaseEntity__IsMoving)(_CBaseEntity* self);
void (* CBaseEntity__OverrideReset)(_CBaseEntity* self);
int (* CBaseEntity__DamageDecal)(_CBaseEntity* self, int);
void (* CBaseEntity__SetToggleState)(_CBaseEntity* self, int);
void (* CBasePlayer__StartSneaking)(_CBasePlayer* self);
void (* CBasePlayer__StopSneaking)(_CBasePlayer* self);
BOOL (* CBaseEntity__OnControls)(_CBaseEntity* self, entvars_s*);
BOOL (* CBasePlayer__IsSneaking)(_CBasePlayer* self);
BOOL (* CBasePlayer__IsAlive)(_CBasePlayer* self);
BOOL (* CBaseEntity__IsBSPModel)(_CBaseEntity* self);
BOOL (* CBaseEntity__ReflectGauss)(_CBaseEntity* self);
BOOL (* CBaseEntity__HasTarget)(_CBaseEntity* self, unsigned int);
BOOL (* CBaseEntity__IsInWorld)(_CBaseEntity* self);
BOOL (* CBasePlayer__IsPlayer)(_CBasePlayer* self);
BOOL (* CBasePlayer__IsNetClient)(_CBasePlayer* self);
const char* (* CBasePlayer__TeamID)(_CBasePlayer* self);
_CBaseEntity* (* CBaseEntity__GetNextTarget)(_CBaseEntity* self);
void (* CBaseEntity__Think)(_CBaseEntity* self);
void (* CBaseEntity__Touch)(_CBaseEntity* self, _CBaseEntity*);
void (* CBaseEntity__Use)(_CBaseEntity* self, _CBaseEntity*, _CBaseEntity*, USE_TYPE, float);
void (* CBaseEntity__Blocked)(_CBaseEntity* self, _CBaseEntity*);
_CBaseEntity* (* CBaseEntity__Respawn)(_CBaseEntity* self);
void (* CBaseEntity__UpdateOwner)(_CBaseEntity* self);
BOOL (* CBasePlayer__FBecomeProne)(_CBasePlayer* self);
Vector& (* CBaseEntity__Center)(_CBaseEntity* self);
Vector& (* CBaseEntity__EyePosition)(_CBaseEntity* self);
Vector& (* CBaseEntity__EarPosition)(_CBaseEntity* self);
Vector& (* CBasePlayer__BodyTarget)(_CBasePlayer* self, Vector const&);
int (* CBasePlayer__Illumination)(_CBasePlayer* self);
BOOL (* CBaseEntity__FVisible)(_CBaseEntity* self, _CBaseEntity*);
BOOL (* CBaseEntity__FVisibleVector)(_CBaseEntity* self, Vector const&);
void (* CBaseAnimating__HandleAnimEvent)(_CBaseAnimating* self, MonsterEvent_t*);
float (* CBaseMonster__ChangeYaw)(_CBaseMonster* self, int);
BOOL (* CBaseMonster__HasHumanGibs)(_CBaseMonster* self);
BOOL (* CBaseMonster__HasAlienGibs)(_CBaseMonster* self);
void (* CBaseMonster__FadeMonster)(_CBaseMonster* self);
void (* CBaseMonster__GibMonster)(_CBaseMonster* self);
Activity (* CBaseMonster__GetDeathActivity)(_CBaseMonster* self);
void (* CBaseMonster__BecomeDead)(_CBaseMonster* self);
BOOL (* CBasePlayer__ShouldFadeOnDeath)(_CBasePlayer* self);
int (* CBaseMonster__IRelationship)(_CBaseMonster* self, _CBaseEntity*);
void (* CBaseMonster__PainSound)(_CBaseMonster* self);
void (* CBasePlayer__ResetMaxSpeed)(_CBasePlayer* self);
void (* CBaseMonster__ReportAIState)(_CBaseMonster* self);
void (* CBaseMonster__MonsterInitDead)(_CBaseMonster* self);
void (* CBaseMonster__Look)(_CBaseMonster* self, int);
_CBaseEntity* (* CBaseMonster__BestVisibleEnemy)(_CBaseMonster* self);
BOOL (* CBaseMonster__FInViewCone)(_CBaseMonster* self, _CBaseEntity*);
BOOL (* CBaseMonster__FInViewCone2)(_CBaseMonster* self, Vector*);
void (* CBasePlayer__Jump)(_CBasePlayer* self);
void (* CBasePlayer__Duck)(_CBasePlayer* self);
void (* CBasePlayer__PreThink)(_CBasePlayer* self);
void (* CBasePlayer__PostThink)(_CBasePlayer* self);
int (* CBasePlayer__GetGunPosition)(_CBasePlayer* self);
int (* CBasePlayer__IsBot)(_CBasePlayer* self);
void (* CBasePlayer__UpdateClientData)(_CBasePlayer* self);
void (* CBasePlayer__ImpulseCommands)(_CBasePlayer* self);
void (* CBasePlayer__RoundRespawn)(_CBasePlayer* self);
void (* CBasePlayer__GetAutoaimVector)(_CBasePlayer* self, _CBasePlayer* pOther, float fAngle);
void (* CBasePlayer__Blind)(_CBasePlayer* self, float, float, float, int);
void (* CBasePlayer__OnTouchingWeapon)(_CBasePlayer* self, _CWeaponBox*);
};
You can hook Blind changing edict->pvPrivateData->vtable->Blind value to point to your custom function then you have to call the original Blind.
Also you can do hook/unhook over the function (symbol for linux: _ZN11CBasePlayer5BlindEfffi)
Prototype:
PHP Code:
void Blind(class CBasePlayer *const this, float duration, float holdTime, float fadeTime, int alpha);
__________________