diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/SpellAuraDefines.h | 6 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 10 | ||||
-rw-r--r-- | src/game/Unit.cpp | 107 |
3 files changed, 76 insertions, 47 deletions
diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 9eee8f6416e..5f784ed8b85 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -329,13 +329,13 @@ enum AuraType SPELL_AURA_MOD_HONOR_GAIN_PCT = 281, SPELL_AURA_MOD_BASE_HEALTH_PCT = 282, SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells - SPELL_AURA_284, - SPELL_AURA_285, + SPELL_AURA_LINKED = 284, + SPELL_AURA_MOD_AP_FROM_STAT, SPELL_AURA_286, SPELL_AURA_DEFLECT_SPELLS, SPELL_AURA_288, SPELL_AURA_289, - SPELL_AURA_290, + SPELL_AURA_MOD_CRIT_CHANCE, SPELL_AURA_291, SPELL_AURA_292, SPELL_AURA_293, diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index aa4422e2718..58f59f429c4 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4312,8 +4312,16 @@ void Spell::SpellDamageWeaponDmg(uint32 i) case SPELLFAMILY_DEATHKNIGHT: { // Obliterate (12.5% more damage per disease) + bool consumeDiseases = true; + // Annihilation + if (AuraEffect * aurEff = m_caster->GetDummyAura(SPELLFAMILY_DEATHKNIGHT, 2710)) + { + // Do not consume diseases if roll sucesses + if (roll_chance_i(aurEff->GetAmount())) + consumeDiseases = false; + } if (m_spellInfo->SpellFamilyFlags[1] & 0x20000) - totalDamagePercentMod *= (float(CalculateDamage(2, unitTarget) * unitTarget->GetDiseasesByCaster(m_caster->GetGUID(), true) / 2) + 100.0f) / 100.f; + totalDamagePercentMod *= (float(CalculateDamage(2, unitTarget) * unitTarget->GetDiseasesByCaster(m_caster->GetGUID(), consumeDiseases) / 2) + 100.0f) / 100.f; break; } } diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1c9c8f57260..84299185595 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9067,7 +9067,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 } else // Tundra Stalker { - if (pVictim->GetAura(SPELL_AURA_DUMMY, SPELLFAMILY_DEATHKNIGHT,0, 0x04000000,0)) + if (pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DEATHKNIGHT,0, 0x4000000,0)) DoneTotalMod *= ((*i)->GetAmount()+100.0f)/100.0f; break; } @@ -9100,56 +9100,77 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 } } - // Custom scripted damage - // Judgement of Vengeance/ Judgement of Corruption - if((spellProto->SpellFamilyFlags[1] & 0x400000) && spellProto->SpellIconID==2292) + // Custom scripted damage + switch(spellProto->SpellFamilyName) { - // Get stack of Holy Vengeance/Blood Corruption on the target added by caster - uint32 stacks = 0; - Unit::AuraEffectList const& auras = pVictim->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); - for(Unit::AuraEffectList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) - if(((*itr)->GetId() == 31803 || (*itr)->GetId() == 53742) && (*itr)->GetCasterGUID()==GetGUID()) + case SPELLFAMILY_MAGE: + // Ice Lance + if (spellProto->SpellIconID == 186) { - stacks = (*itr)->GetParentAura()->GetStackAmount(); - break; + if (pVictim->HasAuraState(AURA_STATE_FROZEN, spellProto, this)) + DoneTotalMod *= 3.0f; } - // + 10% for each application of Holy Vengeance/Blood Corruption on the target - if(stacks) - DoneTotalMod *= (1.0f + (float)stacks / 10.0f) ; - } - - // Ice Lance - if (spellProto->SpellFamilyName == SPELLFAMILY_MAGE && spellProto->SpellIconID == 186) - { - if (pVictim->HasAuraState(AURA_STATE_FROZEN, spellProto, this)) - DoneTotalMod *= 3.0f; - } - - // Glyph of Shadow Word: Pain - if (spellProto->SpellFamilyName == SPELLFAMILY_PRIEST && spellProto->SpellFamilyFlags[0] & 0x800000) - { - // Increase Mind Flay damage - if (AuraEffect * aurEff = GetDummyAura(55687)) - // if Shadow Word: Pain present - if (pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0,0, GetGUID())) - DoneTotalMod *= (aurEff->GetAmount() + 100.0f) / 100.f; - } - // Torment the weak - if (spellProto->SpellFamilyName== SPELLFAMILY_MAGE && (spellProto->SpellFamilyFlags[0]&0x20200021 || spellProto->SpellFamilyFlags[1]& 0x9000)) - { - if(pVictim->HasAuraType(SPELL_AURA_MOD_DECREASE_SPEED)) - { - AuraEffectList const& mDumyAuras = GetAurasByType(SPELL_AURA_DUMMY); - for(AuraEffectList::const_iterator i = mDumyAuras.begin(); i != mDumyAuras.end(); ++i) + // Torment the weak + if (spellProto->SpellFamilyFlags[0]&0x20200021 || spellProto->SpellFamilyFlags[1]& 0x9000) { - if ((*i)->GetSpellProto()->SpellIconID == 3263) + if(pVictim->HasAuraType(SPELL_AURA_MOD_DECREASE_SPEED)) { - DoneTotalMod *=float((*i)->GetAmount() + 100.f) / 100.f; - break; + AuraEffectList const& mDumyAuras = GetAurasByType(SPELL_AURA_DUMMY); + for(AuraEffectList::const_iterator i = mDumyAuras.begin(); i != mDumyAuras.end(); ++i) + if ((*i)->GetSpellProto()->SpellIconID == 3263) + { + DoneTotalMod *=float((*i)->GetAmount() + 100.f) / 100.f; + break; + } } } - } + break; + + // Glyph of Shadow Word: Pain + case SPELLFAMILY_PRIEST: + if (spellProto->SpellFamilyFlags[0] & 0x800000) + { + // Increase Mind Flay damage + if (AuraEffect * aurEff = GetDummyAura(55687)) + // if Shadow Word: Pain present + if (pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_PRIEST, 0x8000, 0,0, GetGUID())) + DoneTotalMod *= (aurEff->GetAmount() + 100.0f) / 100.f; + } + break; + + case SPELLFAMILY_PALADIN: + // Judgement of Vengeance/ Judgement of Corruption + if((spellProto->SpellFamilyFlags[1] & 0x400000) && spellProto->SpellIconID==2292) + { + // Get stack of Holy Vengeance/Blood Corruption on the target added by caster + uint32 stacks = 0; + Unit::AuraEffectList const& auras = pVictim->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); + for(Unit::AuraEffectList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) + if(((*itr)->GetId() == 31803 || (*itr)->GetId() == 53742) && (*itr)->GetCasterGUID()==GetGUID()) + { + stacks = (*itr)->GetParentAura()->GetStackAmount(); + break; + } + // + 10% for each application of Holy Vengeance/Blood Corruption on the target + if(stacks) + DoneTotalMod *= (10.0f + (float)stacks) / 10.0f; + } + break; + case SPELLFAMILY_DEATHKNIGHT: + // Improved Icy Touch + if (spellProto->SpellFamilyFlags[0] & 0x2) + { + if (AuraEffect * aurEff = GetDummyAura(SPELLFAMILY_DEATHKNIGHT, 2721)) + DoneTotalMod *= (100.0f + aurEff->GetAmount()) / 100.0f ; + } + // Glacier Rot + if (spellProto->SpellFamilyFlags[0] & 0x2 || spellProto->SpellFamilyFlags[1] & 0x6) + { + if (AuraEffect * aurEff = GetDummyAura(SPELLFAMILY_DEATHKNIGHT, 196)) + DoneTotalMod *= (100.0f + aurEff->GetAmount()) / 100.0f; + } + break; } // ..taken |