Вообщем, для себя реализовал так:
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 4e8df4f..34b8237 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -5867,7 +5867,6 @@ void Aura::HandleShapeshiftBoosts(bool apply)
{
case FORM_CAT:
spellId1 = 3025;
- HotWSpellId = 24900;
MasterShaperSpellId = 48420;
break;
case FORM_TREE:
@@ -5884,13 +5883,11 @@ void Aura::HandleShapeshiftBoosts(bool apply)
case FORM_BEAR:
spellId1 = 1178;
spellId2 = 21178;
- HotWSpellId = 24899;
MasterShaperSpellId = 48418;
break;
case FORM_DIREBEAR:
spellId1 = 9635;
spellId2 = 21178;
- HotWSpellId = 24899;
MasterShaperSpellId = 48418;
break;
case FORM_BATTLESTANCE:
@@ -6015,7 +6012,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 = m_target->GetAurasByType(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE);
for(Unit::AuraList::const_iterator i = mModTotalStatPct.begin(); i != mModTotalStatPct.end(); ++i)
@@ -6023,10 +6020,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;
-
- m_target->CastCustomSpell(m_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;
}
}
@@ -6035,6 +6048,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)
m_target->RemoveAurasDueToSpell(spellId1);
if(spellId2)
Пояснение: Спелл делится на три части - Повышает интеллект, повышает выносливость, если в формах медведя и повышает силу атаки, если в форме кошки. Интеллект у нас и так нормально повышается, т.к. эффект у спелла Apply Aura: Mod Total Stat % (Интеллект). А вот остальные две части реализовались за счет спеллов 24900 и 24899. Сейчас их нет. Я решил поискать аналогичные и нашел: для силы атаки -
Убойная сила, а для выносливости -
Остаться в живых. Спеллы - таланты роги и охотника, а значит не будут конфликтовать с другими аурами друида. Вообщем, патч талант полностью реализует. Проверил лично. Я понимаю, что это хаковая реализация и принят не будет, но никаких решений я в интернете не встретил, поэтому решил выложить, вдруг кому пригодится.
Если кто-то всеже порекомендует, где реализовать обработку, чтобы патч могли принять, буду благодарен.