You can try to hook TraceAttack on "player", check if player was attacked with knife.
When dealing dmg with a knife stab, it hurts 65hp points, but if it's from behind, this gets mult by 3, so the total damage done it's 195hp points. There wouldn't be other greater dmg value, so you can use it to check.
Or also, you can imitate engine's way to check if player attacked behind another:
PHP Code:
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
// and later...
float flDamage = 65.0;
if( pEntity && pEntity->IsPlayer() )
{
Vector2D vec2LOS;
Vector vecForward = gpGlobals->v_forward;
UTIL_MakeVectors( m_pPlayer->pev->angles );
vec2LOS = vecForward.Make2D();
vec2LOS = vec2LOS.Normalize();
if( DotProduct( vec2LOS, gpGlobals->v_forward.Make2D() ) > 0.8 )
{
flDamage *= 3.0;
}
}
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
ClearMultiDamage();
pEntity->TraceAttack( m_pPlayer->pev, flDamage, gpGlobals->v_forward, &tr, DMG_NEVERGIB | DMG_BULLET );
ApplyMultiDamage( m_pPlayer->pev, m_pPlayer->pev );
__________________