aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-01-14 09:23:34 -0300
committerariel- <ariel-@users.noreply.github.com>2018-01-14 09:23:34 -0300
commitf1986c6aafdf2457902a7a4cc7acc903cbbdc7bb (patch)
tree16d186ec1f2ace71ab3611a06f3c7ff5fe346f18 /src/server/game/Spells/SpellEffects.cpp
parent24cf532557b07dbcd90180dea098fa2c86576152 (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.cpp27
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);
}