diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Unit.cpp | 75 |
1 files changed, 66 insertions, 9 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 28a82e4cd8a..bc6d714bf6c 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9253,7 +9253,8 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 if(pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this)) DoneTotalMod *= (100.0f+(*i)->GetAmount())/100.0f; } - else // Tundra Stalker + // Tundra Stalker + else { // Frost Fever (target debuff) if (pVictim->GetAura(SPELL_AURA_MOD_HASTE, SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT, 0, 0, 0x2)) @@ -9262,12 +9263,12 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 } break; } - case 7293: // Rage of Rivendare + // Rage of Rivendare + case 7293: { if (pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT, 0,0x02000000,0)) { - SpellChainNode const* chain = spellmgr.GetSpellChainNode((*i)->GetId()); - if (chain) + if (SpellChainNode const *chain = spellmgr.GetSpellChainNode((*i)->GetId())) DoneTotalMod *= (chain->rank * 2.0f + 100.0f)/100.0f; } break; @@ -9401,6 +9402,10 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 mod = dummy->GetAmount(); TakenTotalMod *= (mod+100.0f)/100.0f; } + // Ebon Plague + if (AuraEffect *dummy = pVictim->GetDummyAura(SPELLFAMILY_DEATHKNIGHT, 1933, 1)) + if(dummy->GetMiscValue() & GetSpellSchoolMask(spellProto)) + TakenTotalMod *= (dummy->GetAmount()+100.0f)/100.0f; } // From caster spells @@ -10359,11 +10364,60 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage, WeaponAttackType att // SPELL_AURA_MOD_DAMAGE_PERCENT_DONE included in weapon damage // SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT included in weapon damage - AuraEffectList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS); + // SPELL_AURA_MOD_DAMAGE_PERCENT_DONE for non-physical spells like Scourge Strike, Frost Strike, this is NOT included in weapon damage + if (spellProto) + if (GetSpellSchoolMask(spellProto) != SPELL_SCHOOL_MASK_NORMAL) + { + AuraEffectList const &mModDamagePercentDone = GetAurasByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); + for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i) + if (((*i)->GetMiscValue() & GetSpellSchoolMask(spellProto)) && !((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)) + DoneTotalMod *= ((*i)->GetAmount()+100.0f)/100.0f; + } + + AuraEffectList const &mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS); for (AuraEffectList::const_iterator i = mDamageDoneVersus.begin(); i != mDamageDoneVersus.end(); ++i) if(creatureTypeMask & uint32((*i)->GetMiscValue())) DoneTotalMod *= ((*i)->GetAmount()+100.0f)/100.0f; + // done scripted mod (take it from owner) + Unit *owner = GetOwner() ? GetOwner() : this; + AuraEffectList const &mOverrideClassScript= owner->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for (AuraEffectList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + { + if (!(*i)->isAffectedOnSpell(spellProto)) + continue; + switch ((*i)->GetMiscValue()) + { + // Tundra Stalker + // Merciless Combat + case 7277: + { + // Merciless Combat + if ((*i)->GetSpellProto()->SpellIconID == 2656) + { + if (pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this)) + DoneTotalMod *= (100.0f+(*i)->GetAmount())/100.0f; + } + // Tundra Stalker + else + { + // Frost Fever (target debuff) + if (pVictim->GetAura(SPELL_AURA_MOD_HASTE, SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT, 0, 0, 0x2)) + DoneTotalMod *= ((*i)->GetAmount()+100.0f)/100.0f; + } + break; + } + // Rage of Rivendare + case 7293: + { + if (pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT, 0,0x02000000,0)) + if (SpellChainNode const *chain = spellmgr.GetSpellChainNode((*i)->GetId())) + DoneTotalMod *= (chain->rank * 2.0f + 100.0f)/100.0f; + break; + } + } + } + // ..taken AuraEffectList const& mModDamagePercentTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN); for (AuraEffectList::const_iterator i = mModDamagePercentTaken.begin(); i != mModDamagePercentTaken.end(); ++i) @@ -10407,6 +10461,11 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage, WeaponAttackType att TakenTotalMod *= (mod+100.0f)/100.0f; } break; + // Ebon Plague + case 1933: + if ((*i)->GetMiscValue() & (spellProto ? GetSpellSchoolMask(spellProto) : 0)) + TakenTotalMod *= ((*i)->GetAmount()+100.0f)/100.0f; + break; } } @@ -10449,11 +10508,9 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage, WeaponAttackType att float tmpDamage = float(int32(*pdamage) + DoneFlatBenefit) * DoneTotalMod; // apply spellmod to Done damage - if(spellProto) - { - if(Player* modOwner = GetSpellModOwner()) + if (spellProto) + if (Player* modOwner = GetSpellModOwner()) modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_DAMAGE, tmpDamage); - } tmpDamage = (tmpDamage + TakenFlatBenefit)*TakenTotalMod; |