Тема: SpellStack rules
Показать сообщение отдельно
Старый 30.10.2010, 22:13   #2
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от selector Посмотреть сообщение
но не считаю, что это правильный вариант. Также необходимо учитывать, что у 2 из спелов-аур есть еще по одному EFFECT_INDEX которые дают "бонусы" владельцу.
Ну случай интересный, тогда это вообще не в этой функции делаться должно, ведь тут мы заменяем ауру целиком.

Должно быть так
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 5b95452..a08a67d 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -5758,6 +5758,15 @@ void Aura::HandleAuraModRangedAttackPower(bool apply, bool /*Real*/)
 
 void Aura::HandleAuraModAttackPowerPercent(bool apply, bool /*Real*/)
 {
+    if (apply)
+    {
+        Unit::AuraList const& APPauras = GetTarget()->GetAurasByType(SPELL_AURA_MOD_ATTACK_POWER_PCT);
+        for(Unit::AuraList::const_iterator itr = APPauras.begin(); itr != APPauras.end(); ++itr)
+        {
+            if((*itr)->GetSpellProto()->SpellIconID != GetSpellProto()->SpellIconID)
+                return;
+        }
+    }
     //UNIT_FIELD_ATTACK_POWER_MULTIPLIER = multiplier - 1
     GetTarget()->HandleStatModifier(UNIT_MOD_ATTACK_POWER, TOTAL_PCT, float(m_modifier.m_amount), apply);
 }
@@ -5767,6 +5776,16 @@ void Aura::HandleAuraModRangedAttackPowerPercent(bool apply, bool /*Real*/)
     if((GetTarget()->getClassMask() & CLASSMASK_WAND_USERS)!=0)
         return;
 
+    if (apply)
+    {
+        Unit::AuraList const& APPauras = GetTarget()->GetAurasByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT);
+        for(Unit::AuraList::const_iterator itr = APPauras.begin(); itr != APPauras.end(); ++itr)
+        {
+            if((*itr)->GetSpellProto()->SpellIconID != GetSpellProto()->SpellIconID)
+                return;
+        }
+    }
+
     //UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = multiplier - 1
     GetTarget()->HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_PCT, float(m_modifier.m_amount), apply);
 }
я его естественно не тестировал

И if (apply) там возможно не нужен, это так... для подстраховки, ну и чтоб цикл по аурам не гонять лишний раз

EDIT:

Также в патч нада бы запихать проверку на наличие этого флага, иначе http://www.wowhead.com/?spell=53434 и подобные станут тоже заменяться, хотя не должны - это делайте уже сами, или я сделаю за вас, но уже завтра...

Тут http://www.wowhead.com/?spell=53138#comments список всех спеллов которые должны также стакаться, хоть список и для катаклизма, но мало что изменилось, по ним можно удостовериться реально ли этот флаг правильный для определения стакаться или нет

Последний раз редактировалось Insider42; 31.10.2010 в 08:25.
Insider42 вне форума   Ответить с цитированием