rendered paste body//=========================================================// TraceAttack//=========================================================void CBasePlayer::TraceAttack( const CTakeDamageInfo &inputInfo, const Vector &vecDir, trace_t *ptr ){ if ( m_takedamage ) { CTakeDamageInfo info = inputInfo; // -------------------------------------------------- // If an NPC check if friendly fire is disallowed // -------------------------------------------------- CAI_BaseNPC *pNPC = info.GetAttacker()->MyNPCPointer(); if ( pNPC && (pNPC->CapabilitiesGet() & bits_CAP_NO_HIT_PLAYER) && pNPC->IRelationType( this ) != D_HT ) { return; } // Prevent team damage here so blood doesn't appear if ( info.GetAttacker()->IsPlayer() ) { if ( !g_pGameRules->FPlayerCanTakeDamage( this, info.GetAttacker() ) ) return; } SetLastHitGroup( ptr->hitgroup ); switch ( ptr->hitgroup ) { case HITGROUP_GENERIC: break; case HITGROUP_HEAD: info.ScaleDamage( sk_player_head.GetFloat() ); break; case HITGROUP_CHEST: info.ScaleDamage( sk_player_chest.GetFloat() ); break; case HITGROUP_STOMACH: info.ScaleDamage( sk_player_stomach.GetFloat() ); break; case HITGROUP_LEFTARM: case HITGROUP_RIGHTARM: info.ScaleDamage( sk_player_arm.GetFloat() ); break; case HITGROUP_LEFTLEG: case HITGROUP_RIGHTLEG: info.ScaleDamage( sk_player_leg.GetFloat() ); break; default: break; } SpawnBlood(ptr->endpos, vecDir, BloodColor(), info.GetDamage());// a little surface blood. TraceBleed( info.GetDamage(), vecDir, ptr, info.GetDamageType() ); AddMultiDamage( info, this ); }}