Actually IsHittingShield() would looks like like in css ( code not from me, somewhere on internet ) :
Code:
bool CCSPlayer::IsHittingShield( const Vector &vecDirection, trace_t *ptr )
{
/*
if ( HasShield() == false )
return false;
if ( ptr->hitgroup == HITGROUP_SHIELD )
return true;
if ( m_bShieldDrawn == false )
return false;
Vector2D vec2LOS;
float flDot;
Vector vForward;
AngleVectors( GetAbsAngles(), &vForward );
vec2LOS = vecDirection.Make2D();
vec2LOS = vec2LOS.Normalize();
flDot = DotProduct ( vec2LOS , vForward.Make2D() );
if ( flDot < -0.87f )
return true;
*/
return false;
}
Code:
void CCSPlayer::TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr )
{
bool bShouldBleed = true;
bool bShouldSpark = false;
bool bHitShield = IsHittingShield( vecDir, ptr );
CBasePlayer *pAttacker = (CBasePlayer*)ToBasePlayer( info.GetAttacker() );
if ( ( GetTeamNumber() == pAttacker->GetTeamNumber() ) )
bShouldBleed = false;
if ( m_takedamage != DAMAGE_YES )
return;
m_LastHitGroup = ptr->hitgroup;
float flDamage = info.GetDamage();
if ( bHitShield )
{
/*
flDamage = 0;
bShouldBleed = false;
if ( RANDOM_LONG( 0, 1 ) )
EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/ric_metal-1.wav", 1, ATTN_NORM );
else
EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/ric_metal-2.wav", 1, ATTN_NORM );
UTIL_Sparks( ptr->vecEndPos );
pev->punchangle.x = flDamage * RANDOM_FLOAT ( -0.15, 0.15 );
pev->punchangle.z = flDamage * RANDOM_FLOAT ( -0.15, 0.15 );
if (pev->punchangle.x < 4)
pev->punchangle.x = -4;
if (pev->punchangle.z < -5)
pev->punchangle.z = -5;
else if (pev->punchangle.z > 5)
pev->punchangle.z = 5;
*/
}
else
{
switch ( ptr->hitgroup )
{
}
}
[...]
}
When you see in the CS disassembled the code seems to be the same. That's why I don't understand why TraceAttack is not called.
__________________