aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/SpellAuras.cpp76
-rw-r--r--src/game/SpellMgr.cpp12
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;
}