aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortobmaps <spambot42@yandex.ru>2011-05-13 19:43:32 +0700
committertobmaps <spambot42@yandex.ru>2011-05-13 19:43:32 +0700
commit2d6912cd2e7ea19a781cc0cd8e4f68fda119c5ba (patch)
tree46333d7f1a64da0f50aa079385cb6d18ea16f59a /src
parent7fac55db666449f1cb2d89f1f566bca0465c5d4f (diff)
Core/Auras: Properly fix SPELL_AURA_DAMAGE_SHIELD
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp10
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp18
2 files changed, 24 insertions, 4 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 2aa78e6f5b4..265a3248428 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -1456,6 +1456,16 @@ void Unit::DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss)
uint32 damage = (*dmgShieldItr)->GetAmount();
+ int32 bonus = 0;
+ bonus += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, GetSpellSchoolMask(i_spellProto));
+ if (Unit * caster = (*dmgShieldItr)->GetCaster())
+ {
+ bonus += caster->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, GetSpellSchoolMask(i_spellProto));
+ bonus += caster->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS, GetCreatureTypeMask());
+ }
+ if (bonus)
+ AddPctN(damage, bonus);
+
// No Unit::CalcAbsorbResist here - opcode doesn't send that data - this damage is probably not affected by that
pVictim->DealDamageMods(this, damage, NULL);
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index fcfef1f9cfa..04c1eb0f3aa 100755
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -597,10 +597,20 @@ int32 AuraEffect::CalculateAmount(Unit * caster)
case SPELL_AURA_DAMAGE_SHIELD:
if (!caster)
break;
- // Thorns
- if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags[0] & 0x100)
- // 3.3% from sp bonus
- DoneActualBenefit = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) * 0.033f;
+
+ if (caster->GetTypeId() == TYPEID_PLAYER)
+ {
+ DoneActualBenefit += caster->SpellDamageBonus(GetBase()->GetUnitOwner(), GetSpellProto(), 0, SPELL_DIRECT_DAMAGE);
+ DoneActualBenefit *= caster->CalculateLevelPenalty(GetSpellProto());
+ amount += (int32)DoneActualBenefit;
+
+ // Thorns
+ if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags[0] & 0x100)
+ if (AuraEffect * aurEff = caster->GetAuraEffectOfRankedSpell(16836, 0))
+ AddPctN(amount, aurEff->GetAmount());
+
+ return amount;
+ }
break;
case SPELL_AURA_PERIODIC_DAMAGE:
if (!caster)