class CTakeDamageInfo { public: CTakeDamageInfo(); virtual ~CTakeDamageInfo(); CTakeDamageInfo( CBaseEntity *pInflictor, CBaseEntity *pAttacker, float flDamage, int bitsDamageType, int iKillType = 0 ); // Inflictor is the weapon or rocket (or player) that is dealing the damage. CBaseEntity* GetInflictor() const; void SetInflictor( CBaseEntity *pInflictor ); // Attacker is the character who originated the attack (like a player or an AI). CBaseEntity* GetAttacker() const; void SetAttacker( CBaseEntity *pAttacker ); float GetDamage() const; void SetDamage( float flDamage ); float GetMaxDamage() const; void SetMaxDamage( float flMaxDamage ); void ScaleDamage( float flScaleAmount ); void AddDamage( float flAddAmount ); void SubtractDamage( float flSubtractAmount ); float GetBaseDamage() const; bool BaseDamageIsValid() const; Vector GetDamageForce() const; void SetDamageForce( const Vector &damageForce ); void ScaleDamageForce( float flScaleAmount ); Vector GetDamagePosition() const; void SetDamagePosition( const Vector &damagePosition ); Vector GetReportedPosition() const; void SetReportedPosition( const Vector &reportedPosition ); int GetDamageType() const; void SetDamageType( int bitsDamageType ); void AddDamageType( int bitsDamageType ); int GetCustomKill() const; void SetCustomKill( int iKillType ); int GetAmmoType() const; void SetAmmoType( int iAmmoType ); void Set( CBaseEntity *pInflictor, CBaseEntity *pAttacker, float flDamage, int bitsDamageType, int iKillType = 0 ); void AdjustPlayerDamageInflictedForSkillLevel(); void AdjustPlayerDamageTakenForSkillLevel(); private: void CopyDamageToBaseDamage(); protected: void Init( CBaseEntity *pInflictor, CBaseEntity *pAttacker, const Vector &damageForce, const Vector &damagePosition, const Vector &reportedPosition, float flDamage, int bitsDamageType, int iKillType ); Vector m_vecDamageForce; Vector m_vecDamagePosition; Vector m_vecReportedPosition; // Position players are told damage is coming from EHANDLE m_hInflictor; EHANDLE m_hAttacker; float m_flDamage; float m_flMaxDamage; float m_flBaseDamage; // The damage amount before skill leve adjustments are made. Used to get uniform damage forces. int m_bitsDamageType; int m_iCustomKillType; int m_iAmmoType; // AmmoType of the weapon used to cause this damage, if any }; void CTakeDamageInfo::Init( CBaseEntity *pInflictor, CBaseEntity *pAttacker, const Vector &damageForce, const Vector &damagePosition, const Vector &reportedPosition, float flDamage, int bitsDamageType, int iKillType ) { m_hInflictor = pInflictor; if ( pAttacker ) { m_hAttacker = pAttacker; } else { m_hAttacker = pInflictor; } m_flDamage = flDamage; m_flBaseDamage = FLT_MAX; m_bitsDamageType = bitsDamageType; m_iCustomKillType = iKillType; m_flMaxDamage = flDamage; m_vecDamageForce = damageForce; m_vecDamagePosition = damagePosition; m_vecReportedPosition = reportedPosition; m_iAmmoType = -1; } CTakeDamageInfo::CTakeDamageInfo() { Init( NULL, NULL, vec3_origin, vec3_origin, vec3_origin, 0, 0, 0 ); } CTakeDamageInfo::~CTakeDamageInfo(){} CTakeDamageInfo::CTakeDamageInfo( CBaseEntity *pInflictor, CBaseEntity *pAttacker, float flDamage, int bitsDamageType, int iKillType ) { Init( pInflictor, pAttacker, vec3_origin, vec3_origin, vec3_origin, flDamage, bitsDamageType, iKillType ); }