Тема: Heart of the Wild
Показать сообщение отдельно
Старый 14.04.2010, 19:01   #13
xmolex
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
xmolex На верном пути
По умолчанию

Вообщем, для себя реализовал так:
Код:
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. Сейчас их нет. Я решил поискать аналогичные и нашел: для силы атаки - Убойная сила, а для выносливости - Остаться в живых. Спеллы - таланты роги и охотника, а значит не будут конфликтовать с другими аурами друида. Вообщем, патч талант полностью реализует. Проверил лично. Я понимаю, что это хаковая реализация и принят не будет, но никаких решений я в интернете не встретил, поэтому решил выложить, вдруг кому пригодится.
Если кто-то всеже порекомендует, где реализовать обработку, чтобы патч могли принять, буду благодарен.
xmolex вне форума   Ответить с цитированием