View Single Post
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 07-01-2009 , 17:03   Re: Detecting when shield is hit (not just aiming at it)
Reply With Quote #20

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.
__________________
Arkshine is offline