diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-01-14 09:23:34 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2018-01-14 09:23:34 -0300 |
| commit | f1986c6aafdf2457902a7a4cc7acc903cbbdc7bb (patch) | |
| tree | 16d186ec1f2ace71ab3611a06f3c7ff5fe346f18 /src/server/game/Spells/SpellEffects.cpp | |
| parent | 24cf532557b07dbcd90180dea098fa2c86576152 (diff) | |
Core/Entities: implement secondary damage for some weapons and removal of old voodoo
- Fixed correct Retaliation damage spell according to sniffs is 20240
- CalcArmorReducedDamage insisted on dealing a minimum of 1 damage even if damage was 0
- CalculateDamage was zero-phobic too: it defaulted to arbitrary max 5 damage
Closes #19081
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 11848bf9a93..05ac456ec59 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -613,8 +613,14 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) if (Player* caster = m_caster->ToPlayer()) { // Add Ammo and Weapon damage plus RAP * 0.1 - float dmg_min = caster->GetWeaponDamageRange(RANGED_ATTACK, MINDAMAGE); - float dmg_max = caster->GetWeaponDamageRange(RANGED_ATTACK, MAXDAMAGE); + float dmg_min = 0.f; + float dmg_max = 0.f; + for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i) + { + dmg_min += caster->GetWeaponDamageRange(RANGED_ATTACK, MINDAMAGE, i); + dmg_max += caster->GetWeaponDamageRange(RANGED_ATTACK, MAXDAMAGE, i); + } + if (dmg_max == 0.0f && dmg_min > dmg_max) damage += int32(dmg_min); else @@ -629,12 +635,18 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) // Hammer of the Righteous if (m_spellInfo->SpellFamilyFlags[1]&0x00040000) { - float min_damage = m_caster->GetFloatValue(UNIT_FIELD_MINDAMAGE); - float max_damage = m_caster->GetFloatValue(UNIT_FIELD_MAXDAMAGE); - if (Player* player = m_caster->ToPlayer()) // UNIT_FIELD_MINDAMAGE/MAXDAMAGE already include damage bonuses, so try to get them without damage bonuses - player->CalculateMinMaxDamage(BASE_ATTACK, false, false, min_damage, max_damage); + float minTotal = 0.f; + float maxTotal = 0.f; - float average = (min_damage + max_damage) / 2; + float tmpMin, tmpMax; + for (uint8 i = 0; i < MAX_ITEM_PROTO_DAMAGES; ++i) + { + m_caster->CalculateMinMaxDamage(BASE_ATTACK, false, false, tmpMin, tmpMax, i); + minTotal += tmpMin; + maxTotal += tmpMax; + } + + float average = (minTotal + maxTotal) / 2; // Add main hand dps * effect[2] amount int32 count = m_caster->CalculateSpellDamage(unitTarget, m_spellInfo, EFFECT_2); damage += count * int32(average * IN_MILLISECONDS) / m_caster->GetAttackTime(BASE_ATTACK); @@ -3336,7 +3348,6 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) // Add melee damage bonuses (also check for negative) uint32 damageBonusDone = m_caster->MeleeDamageBonusDone(unitTarget, eff_damage, m_attackType, m_spellInfo); - m_damage += unitTarget->MeleeDamageBonusTaken(m_caster, damageBonusDone, m_attackType, m_spellInfo); } |
