Я для себя сделал через похожие спеллы, т.к. модернизируя показатели не достиг нужного результата.
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 970d1d2..c13b014 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -6164,7 +6164,7 @@ void Aura::HandleShapeshiftBoosts(bool apply)
}
// Heart of the Wild
- if (HotWSpellId)
+ if (form == FORM_CAT || form == FORM_BEAR || form == FORM_DIREBEAR)
{
Unit::AuraList const& mModTotalStatPct = target->GetAurasByType(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE);
for(Unit::AuraList::const_iterator i = mModTotalStatPct.begin(); i != mModTotalStatPct.end(); ++i)
@@ -6172,10 +6172,26 @@ void Aura::HandleShapeshiftBoosts(bool apply)
if ((*i)->GetSpellProto()->SpellIconID == 240 && (*i)->GetModifier()->m_miscvalue == 3)
{
int32 HotWMod = (*i)->GetModifier()->m_amount;
- if(GetModifier()->m_miscvalue == FORM_CAT)
- HotWMod /= 2;
-
- target->CastCustomSpell(target, HotWSpellId, &HotWMod, NULL, NULL, true, NULL, this);
+ HotWMod /= 2;
+
+ if (form == FORM_CAT)
+ {
+ if (HotWMod == 2) {HotWSpellId = 30902;}
+ else if (HotWMod == 4) {HotWSpellId = 30903;}
+ else if (HotWMod == 6) {HotWSpellId = 30904;}
+ else if (HotWMod == 8) {HotWSpellId = 30905;}
+ else if (HotWMod == 10) {HotWSpellId = 30906;}
+ }
+ else
+ {
+ if (HotWMod == 2) {HotWSpellId = 19255;}
+ else if (HotWMod == 4) {HotWSpellId = 19256;}
+ else if (HotWMod == 6) {HotWSpellId = 19257;}
+ else if (HotWMod == 8) {HotWSpellId = 19258;}
+ else if (HotWMod == 10) {HotWSpellId = 19259;}
+ }
+
+ m_target->CastCustomSpell(m_target, HotWSpellId, NULL, NULL, NULL, true, NULL, this);
break;
}
}
@@ -6184,6 +6200,35 @@ void Aura::HandleShapeshiftBoosts(bool apply)
}
else
{
+ // Heart of the Wild (delete aura)
+ if (form == FORM_CAT || form == FORM_BEAR || form == FORM_DIREBEAR)
+ {
+ Unit::AuraList const& mModTotalStatPct = m_target->GetAurasByType(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE);
+ for(Unit::AuraList::const_iterator i = mModTotalStatPct.begin(); i != mModTotalStatPct.end(); ++i)
+ {
+ if ((*i)->GetSpellProto()->SpellIconID == 240 && (*i)->GetModifier()->m_miscvalue == 3)
+ {
+ int32 HotWMod = (*i)->GetModifier()->m_amount / 2;
+ if (form == FORM_CAT)
+ {
+ if (HotWMod == 2) {HotWSpellId = 30902;}
+ else if (HotWMod == 4) {HotWSpellId = 30903;}
+ else if (HotWMod == 6) {HotWSpellId = 30904;}
+ else if (HotWMod == 8) {HotWSpellId = 30905;}
+ else if (HotWMod == 10) {HotWSpellId = 30906;}
+ }
+ else
+ {
+ if (HotWMod == 2) {HotWSpellId = 19255;}
+ else if (HotWMod == 4) {HotWSpellId = 19256;}
+ else if (HotWMod == 6) {HotWSpellId = 19257;}
+ else if (HotWMod == 8) {HotWSpellId = 19258;}
+ else if (HotWMod == 10) {HotWSpellId = 19259;}
+ }
+ m_target->RemoveAurasDueToSpell(HotWSpellId);
+ }
+ }
+ }
if(spellId1)
target->RemoveAurasDueToSpell(spellId1);
if(spellId2)
@@ -8454,4 +8499,4 @@ void Aura::HandleAllowOnlyAbility(bool apply, bool Real)
target->UpdateDamagePhysical(BASE_ATTACK);
target->UpdateDamagePhysical(RANGED_ATTACK);
target->UpdateDamagePhysical(OFF_ATTACK);
-}
\ No newline at end of file
+}