Hook as post, if you want callback be called after some sanity checks. It will filter probably most of cases.
Code:
void CBasePlayer::Jump(void)
{
if (pev->flags & FL_WATERJUMP)
return;
if (pev->waterlevel >= 2)
return;
if (!(m_afButtonPressed & IN_JUMP))
return;
if (!(pev->flags & FL_ONGROUND) || !pev->groundentity)
return;
...
__________________