diff options
-rw-r--r-- | src/game/SpellAuras.cpp | 76 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 12 |
2 files changed, 65 insertions, 23 deletions
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 2985862afa8..15fa3bb88a3 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1531,32 +1531,62 @@ void AuraEffect::HandleShapeshiftBoosts(bool apply) } } } - if (GetMiscValue() == FORM_CAT) + switch(GetMiscValue()) { - // Nurturing Instinct - if (AuraEffect const * aurEff = m_target->GetAuraEffect(SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT, SPELLFAMILY_DRUID, 2254,0)) - { - uint32 spellId = 0; - switch (aurEff->GetId()) + case FORM_CAT: + // Nurturing Instinct + if (AuraEffect const * aurEff = m_target->GetAuraEffect(SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT, SPELLFAMILY_DRUID, 2254,0)) { - case 33872: - spellId = 47179; - break; - case 33873: - spellId = 47180; - break; + uint32 spellId = 0; + switch (aurEff->GetId()) + { + case 33872: + spellId = 47179; + break; + case 33873: + spellId = 47180; + break; + } + m_target->CastSpell(m_target, spellId, true, NULL, this); } - m_target->CastSpell(m_target, spellId, true, NULL, this); - } - } - // Survival of the Fittest - else if (GetMiscValue() == FORM_BEAR || GetMiscValue() == FORM_DIREBEAR) - { - if (AuraEffect const * aurEff = m_target->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE,SPELLFAMILY_DRUID, 961, 0)) - { - int32 bp = m_target->CalculateSpellDamage(aurEff->GetSpellProto(),2,aurEff->GetSpellProto()->EffectBasePoints[2],m_target); - m_target->CastCustomSpell(m_target, 62069,&bp, NULL, NULL, true, 0, this); - } + // Master Shapeshifter - Cat + if (AuraEffect const * aurEff = m_target->GetDummyAura(SPELLFAMILY_GENERIC, 2851, 0)) + { + int32 bp = aurEff->GetAmount(); + m_target->CastCustomSpell(m_target, 48420, &bp, NULL, NULL, true); + } + break; + case FORM_DIREBEAR: + case FORM_BEAR: + // Master Shapeshifter - Bear + if (AuraEffect const * aurEff = m_target->GetDummyAura(SPELLFAMILY_GENERIC, 2851, 0)) + { + int32 bp = aurEff->GetAmount(); + m_target->CastCustomSpell(m_target, 48418, &bp, NULL, NULL, true); + } + // Survival of the Fittest + if (AuraEffect const * aurEff = m_target->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE,SPELLFAMILY_DRUID, 961, 0)) + { + int32 bp = m_target->CalculateSpellDamage(aurEff->GetSpellProto(),2,aurEff->GetSpellProto()->EffectBasePoints[2],m_target); + m_target->CastCustomSpell(m_target, 62069,&bp, NULL, NULL, true, 0, this); + } + break; + case FORM_MOONKIN: + // Master Shapeshifter - Moonkin + if (AuraEffect const * aurEff = m_target->GetDummyAura(SPELLFAMILY_GENERIC, 2851, 0)) + { + int32 bp = aurEff->GetAmount(); + m_target->CastCustomSpell(m_target, 48421, &bp, NULL, NULL, true); + } + break; + // Master Shapeshifter - Tree of Life + case FORM_TREE: + if (AuraEffect const * aurEff = m_target->GetDummyAura(SPELLFAMILY_GENERIC, 2851, 0)) + { + int32 bp = aurEff->GetAmount(); + m_target->CastCustomSpell(m_target, 48422, &bp, NULL, NULL, true); + } + break; } } } diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index dfa25cef538..eecfcb6b1c8 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -3818,6 +3818,18 @@ void SpellMgr::LoadSpellCustomAttr() break; case 29809: // Desecration Arm - 36 instead of 37 - typo? :/ spellInfo->EffectRadiusIndex[0] = 37; + break; + // Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data + // To prevent aura staying on target after talent unlearned + case 48420: + spellInfo->Stances = 1 << (FORM_CAT - 1); + break; + case 48421: + spellInfo->Stances = 1 << (FORM_MOONKIN - 1); + break; + case 48422: + spellInfo->Stances = 1 << (FORM_TREE - 1); + break; default: break; } |