AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
DamageInfo Class Reference

#include "Unit.h"

Public Member Functions

 DamageInfo (Unit *_attacker, Unit *_victim, uint32 _damage, SpellInfo const *_spellInfo, SpellSchoolMask _schoolMask, DamageEffectType _damageType, uint32 cleanDamage=0)
 
 DamageInfo (CalcDamageInfo const &dmgInfo)
 
 DamageInfo (CalcDamageInfo const &dmgInfo, uint8 damageIndex)
 
 DamageInfo (SpellNonMeleeDamage const &spellNonMeleeDamage, DamageEffectType damageType, WeaponAttackType attackType, uint32 hitMask)
 
 DamageInfo (SpellNonMeleeDamage const &spellNonMeleeDamage, DamageEffectType damageType, WeaponAttackType attackType, SpellMissInfo missInfo)
 
void ModifyDamage (int32 amount)
 
void AbsorbDamage (uint32 amount)
 
void ResistDamage (uint32 amount)
 
void BlockDamage (uint32 amount)
 
UnitGetAttacker () const
 
UnitGetVictim () const
 
SpellInfo const * GetSpellInfo () const
 
SpellSchoolMask GetSchoolMask () const
 
DamageEffectType GetDamageType () const
 
WeaponAttackType GetAttackType () const
 
uint32 GetDamage () const
 
uint32 GetAbsorb () const
 
uint32 GetResist () const
 
uint32 GetBlock () const
 
uint32 GetHitMask () const
 
void AddHitMask (uint32 hitMask)
 
uint32 GetUnmitigatedDamage () const
 

Private Member Functions

 DamageInfo (DamageInfo const &dmg1, DamageInfo const &dmg2)
 

Private Attributes

Unit *const m_attacker
 
Unit *const m_victim
 
uint32 m_damage
 
SpellInfo const *const m_spellInfo
 
SpellSchoolMask const m_schoolMask
 
DamageEffectType const m_damageType
 
WeaponAttackType m_attackType
 
uint32 m_absorb
 
uint32 m_resist
 
uint32 m_block
 
uint32 m_cleanDamage
 
uint32 m_hitMask
 

Detailed Description

Constructor & Destructor Documentation

◆ DamageInfo() [1/6]

DamageInfo::DamageInfo ( DamageInfo const &  dmg1,
DamageInfo const &  dmg2 
)
private
120 : m_attacker(dmg1.m_attacker), m_victim(dmg1.m_victim), m_damage(dmg1.m_damage + dmg2.m_damage), m_spellInfo(dmg1.m_spellInfo), m_schoolMask(SpellSchoolMask(dmg1.m_schoolMask | dmg2.m_schoolMask)),
121 m_damageType(dmg1.m_damageType), m_attackType(dmg1.m_attackType), m_absorb(dmg1.m_absorb + dmg2.m_absorb), m_resist(dmg1.m_resist + dmg2.m_resist), m_block(dmg1.m_block),
122 m_cleanDamage(dmg1.m_cleanDamage + dmg1.m_cleanDamage), m_hitMask(dmg1.m_hitMask | dmg2.m_hitMask)
123{
124}
SpellSchoolMask
Definition SharedDefines.h:283
uint32 m_resist
Definition Unit.h:347
Unit *const m_attacker
Definition Unit.h:339
WeaponAttackType m_attackType
Definition Unit.h:345
SpellInfo const *const m_spellInfo
Definition Unit.h:342
uint32 m_block
Definition Unit.h:348
uint32 m_absorb
Definition Unit.h:346
uint32 m_cleanDamage
Definition Unit.h:349
uint32 m_damage
Definition Unit.h:341
uint32 m_hitMask
Definition Unit.h:350
SpellSchoolMask const m_schoolMask
Definition Unit.h:343
DamageEffectType const m_damageType
Definition Unit.h:344
Unit *const m_victim
Definition Unit.h:340

◆ DamageInfo() [2/6]

DamageInfo::DamageInfo ( Unit _attacker,
Unit _victim,
uint32  _damage,
SpellInfo const *  _spellInfo,
SpellSchoolMask  _schoolMask,
DamageEffectType  _damageType,
uint32  cleanDamage = 0 
)
explicit
107 : m_attacker(_attacker), m_victim(_victim), m_damage(_damage), m_spellInfo(_spellInfo), m_schoolMask(_schoolMask),
108 m_damageType(_damageType), m_attackType(BASE_ATTACK), m_cleanDamage(cleanDamage), m_hitMask(0)
109{
110 m_absorb = 0;
111 m_resist = 0;
112 m_block = 0;
113}
@ BASE_ATTACK
Definition Unit.h:216

References m_absorb, m_block, and m_resist.

◆ DamageInfo() [3/6]

DamageInfo::DamageInfo ( CalcDamageInfo const &  dmgInfo)
explicit
115 : DamageInfo(DamageInfo(dmgInfo, 0), DamageInfo(dmgInfo, 1))
116{
117}
Definition Unit.h:337

◆ DamageInfo() [4/6]

DamageInfo::DamageInfo ( CalcDamageInfo const &  dmgInfo,
uint8  damageIndex 
)
127 : m_attacker(dmgInfo.attacker), m_victim(dmgInfo.target), m_damage(dmgInfo.damages[damageIndex].damage), m_spellInfo(nullptr), m_schoolMask(SpellSchoolMask(dmgInfo.damages[damageIndex].damageSchoolMask)),
128 m_damageType(DIRECT_DAMAGE), m_attackType(dmgInfo.attackType), m_absorb(dmgInfo.damages[damageIndex].absorb), m_resist(dmgInfo.damages[damageIndex].resist), m_block(dmgInfo.blocked_amount),
129 m_cleanDamage(dmgInfo.cleanDamage), m_hitMask(0)
130{
131 switch (dmgInfo.TargetState)
132 {
135 break;
138 break;
139 }
140
141 if (dmgInfo.HitInfo & (HITINFO_PARTIAL_ABSORB | HITINFO_FULL_ABSORB))
143
144 if (dmgInfo.HitInfo & HITINFO_FULL_RESIST)
146
147 if (m_block)
149
150 bool const damageNullified = (dmgInfo.HitInfo & (HITINFO_FULL_ABSORB | HITINFO_FULL_RESIST)) != 0
152
153 switch (dmgInfo.hitOutCome)
154 {
155 case MELEE_HIT_MISS:
157 break;
158 case MELEE_HIT_DODGE:
160 break;
161 case MELEE_HIT_PARRY:
163 break;
164 case MELEE_HIT_EVADE:
166 break;
167 case MELEE_HIT_BLOCK:
170 case MELEE_HIT_NORMAL:
171 if (!damageNullified)
173 break;
174 case MELEE_HIT_CRIT:
175 if (!damageNullified)
177 break;
178 default:
179 break;
180 }
181}
@ PROC_HIT_BLOCK
Definition SpellMgr.h:263
@ PROC_HIT_FULL_RESIST
Definition SpellMgr.h:260
@ PROC_HIT_FULL_BLOCK
Definition SpellMgr.h:270
@ PROC_HIT_MISS
Definition SpellMgr.h:259
@ PROC_HIT_EVADE
Definition SpellMgr.h:264
@ PROC_HIT_DODGE
Definition SpellMgr.h:261
@ PROC_HIT_IMMUNE
Definition SpellMgr.h:265
@ PROC_HIT_ABSORB
Definition SpellMgr.h:267
@ PROC_HIT_PARRY
Definition SpellMgr.h:262
@ PROC_HIT_CRITICAL
Definition SpellMgr.h:258
@ PROC_HIT_NORMAL
Definition SpellMgr.h:257
@ VICTIMSTATE_IS_IMMUNE
Definition Unit.h:92
@ VICTIMSTATE_BLOCKS
Definition Unit.h:90
@ HITINFO_PARTIAL_ABSORB
Definition Unit.h:105
@ HITINFO_FULL_RESIST
Definition Unit.h:106
@ HITINFO_FULL_ABSORB
Definition Unit.h:104
@ DIRECT_DAMAGE
Definition Unit.h:255
@ MELEE_HIT_CRUSHING
Definition Unit.h:293
@ MELEE_HIT_BLOCK
Definition Unit.h:292
@ MELEE_HIT_CRIT
Definition Unit.h:293
@ MELEE_HIT_NORMAL
Definition Unit.h:293
@ MELEE_HIT_EVADE
Definition Unit.h:292
@ MELEE_HIT_DODGE
Definition Unit.h:292
@ MELEE_HIT_MISS
Definition Unit.h:292
@ MELEE_HIT_PARRY
Definition Unit.h:292
@ MELEE_HIT_GLANCING
Definition Unit.h:293

References CalcDamageInfo::HitInfo, HITINFO_FULL_ABSORB, HITINFO_FULL_RESIST, HITINFO_PARTIAL_ABSORB, CalcDamageInfo::hitOutCome, m_block, m_hitMask, MELEE_HIT_BLOCK, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_DODGE, MELEE_HIT_EVADE, MELEE_HIT_GLANCING, MELEE_HIT_MISS, MELEE_HIT_NORMAL, MELEE_HIT_PARRY, PROC_HIT_ABSORB, PROC_HIT_BLOCK, PROC_HIT_CRITICAL, PROC_HIT_DODGE, PROC_HIT_EVADE, PROC_HIT_FULL_BLOCK, PROC_HIT_FULL_RESIST, PROC_HIT_IMMUNE, PROC_HIT_MISS, PROC_HIT_NORMAL, PROC_HIT_PARRY, CalcDamageInfo::TargetState, VICTIMSTATE_BLOCKS, and VICTIMSTATE_IS_IMMUNE.

◆ DamageInfo() [5/6]

DamageInfo::DamageInfo ( SpellNonMeleeDamage const &  spellNonMeleeDamage,
DamageEffectType  damageType,
WeaponAttackType  attackType,
uint32  hitMask 
)
184 : m_attacker(spellNonMeleeDamage.attacker), m_victim(spellNonMeleeDamage.target), m_damage(spellNonMeleeDamage.damage),
185 m_spellInfo(spellNonMeleeDamage.spellInfo), m_schoolMask(SpellSchoolMask(spellNonMeleeDamage.schoolMask)), m_damageType(damageType),
186 m_attackType(attackType), m_absorb(spellNonMeleeDamage.absorb), m_resist(spellNonMeleeDamage.resist), m_block(spellNonMeleeDamage.blocked),
187 m_cleanDamage(spellNonMeleeDamage.cleanDamage), m_hitMask(hitMask)
188{
189 if (spellNonMeleeDamage.blocked)
191 if (spellNonMeleeDamage.absorb)
193}

References SpellNonMeleeDamage::absorb, SpellNonMeleeDamage::blocked, m_hitMask, PROC_HIT_ABSORB, and PROC_HIT_BLOCK.

◆ DamageInfo() [6/6]

DamageInfo::DamageInfo ( SpellNonMeleeDamage const &  spellNonMeleeDamage,
DamageEffectType  damageType,
WeaponAttackType  attackType,
SpellMissInfo  missInfo 
)
196 : m_attacker(spellNonMeleeDamage.attacker), m_victim(spellNonMeleeDamage.target), m_damage(spellNonMeleeDamage.damage),
197 m_spellInfo(spellNonMeleeDamage.spellInfo), m_schoolMask(SpellSchoolMask(spellNonMeleeDamage.schoolMask)), m_damageType(damageType),
198 m_attackType(attackType), m_absorb(spellNonMeleeDamage.absorb), m_resist(spellNonMeleeDamage.resist), m_block(spellNonMeleeDamage.blocked),
199 m_cleanDamage(spellNonMeleeDamage.cleanDamage), m_hitMask(PROC_HIT_NONE)
200{
201 // Compute hitMask from SpellMissInfo
202 if (missInfo != SPELL_MISS_NONE)
203 {
204 switch (missInfo)
205 {
206 case SPELL_MISS_MISS:
208 break;
211 break;
212 case SPELL_MISS_DODGE:
214 break;
215 case SPELL_MISS_PARRY:
217 break;
218 case SPELL_MISS_BLOCK:
220 break;
221 case SPELL_MISS_EVADE:
223 break;
227 break;
230 break;
233 break;
236 break;
237 default:
238 break;
239 }
240 }
241 else
242 {
243 // On block
244 if (spellNonMeleeDamage.blocked)
246 // On absorb
247 if (spellNonMeleeDamage.absorb)
249 // On crit
250 if (spellNonMeleeDamage.HitInfo & SPELL_HIT_TYPE_CRIT)
252 else
254 }
255}
@ SPELL_HIT_TYPE_CRIT
Definition SharedDefines.h:1540
@ SPELL_MISS_PARRY
Definition SharedDefines.h:1527
@ SPELL_MISS_IMMUNE
Definition SharedDefines.h:1530
@ SPELL_MISS_ABSORB
Definition SharedDefines.h:1533
@ SPELL_MISS_DODGE
Definition SharedDefines.h:1526
@ SPELL_MISS_IMMUNE2
Definition SharedDefines.h:1531
@ SPELL_MISS_NONE
Definition SharedDefines.h:1523
@ SPELL_MISS_RESIST
Definition SharedDefines.h:1525
@ SPELL_MISS_MISS
Definition SharedDefines.h:1524
@ SPELL_MISS_EVADE
Definition SharedDefines.h:1529
@ SPELL_MISS_REFLECT
Definition SharedDefines.h:1534
@ SPELL_MISS_BLOCK
Definition SharedDefines.h:1528
@ SPELL_MISS_DEFLECT
Definition SharedDefines.h:1532
@ PROC_HIT_NONE
Definition SpellMgr.h:256
@ PROC_HIT_DEFLECT
Definition SpellMgr.h:266
@ PROC_HIT_REFLECT
Definition SpellMgr.h:268

References SpellNonMeleeDamage::absorb, SpellNonMeleeDamage::blocked, SpellNonMeleeDamage::HitInfo, m_hitMask, PROC_HIT_ABSORB, PROC_HIT_BLOCK, PROC_HIT_CRITICAL, PROC_HIT_DEFLECT, PROC_HIT_DODGE, PROC_HIT_EVADE, PROC_HIT_FULL_RESIST, PROC_HIT_IMMUNE, PROC_HIT_MISS, PROC_HIT_NORMAL, PROC_HIT_PARRY, PROC_HIT_REFLECT, SPELL_HIT_TYPE_CRIT, SPELL_MISS_ABSORB, SPELL_MISS_BLOCK, SPELL_MISS_DEFLECT, SPELL_MISS_DODGE, SPELL_MISS_EVADE, SPELL_MISS_IMMUNE, SPELL_MISS_IMMUNE2, SPELL_MISS_MISS, SPELL_MISS_NONE, SPELL_MISS_PARRY, SPELL_MISS_REFLECT, and SPELL_MISS_RESIST.

Member Function Documentation

◆ AbsorbDamage()

void DamageInfo::AbsorbDamage ( uint32  amount)
264{
265 amount = std::min(amount, GetDamage());
266 m_absorb += amount;
267 m_damage -= amount;
268}
uint32 GetDamage() const
Definition Unit.h:373

References GetDamage(), m_absorb, and m_damage.

Referenced by spell_mage_fire_frost_ward::Absorb(), Unit::CalcAbsorbResist(), and spell_valanar_kinetic_bomb_absorb_aura::OnAbsorb().

◆ AddHitMask()

void DamageInfo::AddHitMask ( uint32  hitMask)
inline
379{ m_hitMask |= hitMask; }

References m_hitMask.

Referenced by Unit::CalcAbsorbResist().

◆ BlockDamage()

void DamageInfo::BlockDamage ( uint32  amount)
278{
279 amount = std::min(amount, GetDamage());
280 m_block += amount;
281 m_damage -= amount;
282}

References GetDamage(), m_block, and m_damage.

◆ GetAbsorb()

◆ GetAttacker()

◆ GetAttackType()

WeaponAttackType DamageInfo::GetAttackType ( ) const
inline

◆ GetBlock()

uint32 DamageInfo::GetBlock ( ) const
inline
376{ return m_block; };

References m_block.

Referenced by Unit::AttackerStateUpdate().

◆ GetDamage()

uint32 DamageInfo::GetDamage ( ) const
inline
373{ return m_damage; };

References m_damage.

Referenced by spell_shield_generator_aura::Absorb(), spell_yogg_saron_protective_gaze_aura::Absorb(), spell_charge_shield_bomber_aura::Absorb(), spell_black_temple_spell_absorption_aura::Absorb(), spell_dk_anti_magic_shell_raid::Absorb(), spell_dk_anti_magic_shell_self::Absorb(), spell_dk_anti_magic_zone::Absorb(), spell_dk_spell_deflection::Absorb(), spell_dk_will_of_the_necropolis::Absorb(), spell_dru_moonkin_form_passive::Absorb(), spell_dru_primal_tenacity::Absorb(), spell_pri_guardian_spirit::Absorb(), spell_rog_cheat_death::Absorb(), spell_rog_nerves_of_steel::Absorb(), spell_sha_astral_shift::Absorb(), spell_mage_fire_frost_ward::Absorb(), spell_pal_ardent_defender::Absorb(), AbsorbDamage(), Unit::AttackerStateUpdate(), BlockDamage(), Unit::CalcAbsorbResist(), Unit::CalculateMeleeDamage(), Unit::CalculateSpellDamageTaken(), SpellProcSpellTypeMaskTest::CalculateSpellTypeMask(), spell_pri_lightwell_renew::CheckDropCharge(), AuraEffect::CheckEffectProc(), spell_deathbringer_blood_link_aura::CheckProc(), spell_ignis_brittle_aura::CheckProc(), spell_dk_scent_of_blood_trigger::CheckProc(), spell_dk_unholy_blight::CheckProc(), spell_dk_necrosis::CheckProc(), spell_item_shadowmourne::CheckProc(), spell_item_proc_below_pct_damaged::CheckProc(), spell_pal_seal_of_righteousness::CheckProc(), spell_sha_nature_guardian::CheckProc(), spell_warl_siphon_life::CheckProc(), spell_warl_fel_synergy::CheckProc(), spell_warr_t3_prot_8p_bonus::CheckProc(), Unit::DealDamage(), Unit::DealDamageShieldDamage(), Spell::EffectEnvironmentalDMG(), Player::EnvironmentalDamage(), AuraEffect::HandleBreakableCCAuraProc(), AuraEffect::HandlePeriodicDamageAurasTick(), AuraEffect::HandlePeriodicHealthLeechAuraTick(), spell_soul_deflection::HandleProc(), spell_reliquary_of_souls_aura_of_desire_aura::HandleProc(), spell_black_temple_consuming_strikes_aura::HandleProc(), spell_gen_petrified_bark::HandleProc(), spell_gen_overlords_brand::HandleProc(), spell_gen_overlords_brand_dot::HandleProc(), spell_item_blood_draining_enchant::HandleProc(), spell_mage_ignite::HandleProc(), spell_anetheron_vampiric_aura::HandleProc(), spell_the_lich_king_dark_hunger_aura::HandleProc(), spell_oculus_temporal_rift_aura::HandleProc(), spell_yogg_saron_grim_reprisal_aura::HandleProc(), spell_twisted_reflection::HandleProc(), spell_dk_blood_gorged::HandleProc(), spell_dk_unholy_blight::HandleProc(), spell_dk_necrosis::HandleProc(), spell_dru_t10_balance_4p_bonus::HandleProc(), spell_gen_vampiric_touch::HandleProc(), spell_gen_earth_shield_toc::HandleProc(), spell_hun_piercing_shots::HandleProc(), spell_item_necrotic_touch::HandleProc(), spell_item_frozen_shadoweave::HandleProc(), spell_item_pet_healing::HandleProc(), spell_pal_righteous_vengeance::HandleProc(), spell_pri_vampiric_embrace::HandleProc(), spell_pri_blessed_recovery::HandleProc(), spell_sha_spirit_hunt::HandleProc(), spell_sha_lightning_overload::HandleProc(), spell_sha_t8_elemental_4p_bonus::HandleProc(), spell_sha_t9_elemental_4p_bonus::HandleProc(), spell_warl_seed_of_corruption_dummy::HandleProc(), spell_warl_seed_of_corruption_generic::HandleProc(), spell_warl_soul_leech::HandleProc(), spell_dk_wandering_plague_aura::HandleProc(), spell_gen_vampiric_might::HandleProc(), spell_gen_mirrored_soul::HandleProc(), ModifyDamage(), spell_valanar_kinetic_bomb_absorb_aura::OnAbsorb(), spell_xt002_exposed_heart::OnProc(), spell_blood_queen_essence_of_the_blood_queen_aura::OnProc(), spell_pal_eye_for_an_eye::OnProc(), spell_warl_siphon_life::OnProc(), spell_warl_fel_synergy::OnProc(), Unit::ProcSkillsAndAuras(), and ResistDamage().

◆ GetDamageType()

DamageEffectType DamageInfo::GetDamageType ( ) const
inline

◆ GetHitMask()

◆ GetResist()

◆ GetSchoolMask()

◆ GetSpellInfo()

◆ GetUnmitigatedDamage()

uint32 DamageInfo::GetUnmitigatedDamage ( ) const

◆ GetVictim()

Unit * DamageInfo::GetVictim ( ) const
inline
368{ return m_victim; };

References m_victim.

Referenced by Unit::CalcAbsorbResist().

◆ ModifyDamage()

void DamageInfo::ModifyDamage ( int32  amount)
258{
259 amount = std::min(amount, int32(GetDamage()));
260 m_damage += amount;
261}
std::int32_t int32
Definition Define.h:103

References GetDamage(), and m_damage.

Referenced by AuraEffect::HandlePeriodicHealthLeechAuraTick().

◆ ResistDamage()

void DamageInfo::ResistDamage ( uint32  amount)
271{
272 amount = std::min(amount, GetDamage());
273 m_resist += amount;
274 m_damage -= amount;
275}

References GetDamage(), m_damage, and m_resist.

Referenced by Unit::CalcAbsorbResist().

Member Data Documentation

◆ m_absorb

uint32 DamageInfo::m_absorb
private

◆ m_attacker

Unit* const DamageInfo::m_attacker
private

Referenced by GetAttacker().

◆ m_attackType

WeaponAttackType DamageInfo::m_attackType
private

Referenced by GetAttackType().

◆ m_block

uint32 DamageInfo::m_block
private

◆ m_cleanDamage

uint32 DamageInfo::m_cleanDamage
private

Referenced by GetUnmitigatedDamage().

◆ m_damage

◆ m_damageType

DamageEffectType const DamageInfo::m_damageType
private

Referenced by GetDamageType().

◆ m_hitMask

uint32 DamageInfo::m_hitMask
private

◆ m_resist

uint32 DamageInfo::m_resist
private

◆ m_schoolMask

SpellSchoolMask const DamageInfo::m_schoolMask
private

Referenced by GetSchoolMask().

◆ m_spellInfo

SpellInfo const* const DamageInfo::m_spellInfo
private

Referenced by GetSpellInfo().

◆ m_victim

Unit* const DamageInfo::m_victim
private

Referenced by GetVictim().


The documentation for this class was generated from the following files: