Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2010, 18:43   #1
selector
Пользователь
 
Аватар для selector
 
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
selector На верном пути
По умолчанию SpellStack rules

Доброе времени суток RMDC.

Не знал где создать тему и решил в разделе для новичков. Необходима помощь(возможно после решения проблемы будет и коммит в мангосе). Имеются спелы http://thottbot.com/?e=Apply%20Aura%...%20Power%20%25 на оффе они не стакаются. Просмотрев каждый спелл через spellwork обратил внимание на схожие Атрибуты у них, а именно
Код:
AttributesExG: 0x10000000 (SPELL_ATTR_EXG_UNK28)
Создавать в SpellMrg правило только по данным не корректно, т.к. имеется еще много спелов/аур подобными атрибутами.

В спелах есть параметры:
Код:
Aura Id 167 (SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT),
и
Код:
Aura Id 166 (SPELL_AURA_MOD_ATTACK_POWER_PCT),
Но у них разные EFFECT_INDEX и создать правило по данному тоже не представляется возможным(мне лично)...


Есть вариант создания самого правила по атрибутам и вписать в SpellMgr::IsNoStackSpellDueToSpell по SpellIconID
Код:
    if (spellInfo_1->AttributesExG & SPELL_ATTR_EXG_UNK28 && spellInfo_2->AttributesExG & SPELL_ATTR_EXG_UNK28)
    {
        // Высвобожденная ярость & Сила поганища 
        if( spellInfo_1->SpellIconID == 2729 && spellInfo_2->SpellIconID == 2021 ||
            spellInfo_2->SpellIconID == 2021 && spellInfo_1->SpellIconID == 2729 )
            return true;
            
        //  Аура меткого выстрела & Сила поганища 
        if( spellInfo_1->SpellIconID == 128 && spellInfo_2->SpellIconID == 2021 ||
            spellInfo_2->SpellIconID == 2021 && spellInfo_1->SpellIconID == 128 )
            return true;
        
        //  Аура меткого выстрела & Высвобожденная ярость 
        if( spellInfo_1->SpellIconID == 128 && spellInfo_2->SpellIconID == 2729 ||
            spellInfo_2->SpellIconID == 2729 && spellInfo_1->SpellIconID == 128 )
            return true;

    }
но не считаю, что это правильный вариант. Также необходимо учитывать, что у 2 из спелов-аур есть еще по одному EFFECT_INDEX которые дают "бонусы" владельцу.

У Высвобожденная ярость
Код:
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA)
BasePoints = 9
Targets (1, 0) (TARGET_SELF, NO_TARGET)
Aura Id 240 (SPELL_AURA_MOD_EXPERTISE)
У Сила поганища
Код:
Effect 1: Id 6 (SPELL_EFFECT_APPLY_AURA)
BasePoints = 2
Targets (1, 0) (TARGET_SELF, NO_TARGET)
Aura Id 137 (SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE),
Их необходимо "сохранить".

Надеюсь на вашу помочь... Ах да чуть не забыл:
Core: 10654 (not clean)
DB: YTDB 569
SD: ......

Последний раз редактировалось selector; 29.10.2010 в 18:45.
selector вне форума   Ответить с цитированием
Старый 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 вне форума   Ответить с цитированием
Старый 30.10.2010, 22:57   #3
selector
Пользователь
 
Аватар для selector
 
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
selector На верном пути
По умолчанию

Цитата:
Сообщение от Insider42 Посмотреть сообщение
EDIT:

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

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


P.S. о Твоем варианте решения проблемы, я даже и не подумал...плохо еще разбираюсь в коде))
selector вне форума   Ответить с цитированием
Старый 30.10.2010, 22:58   #4
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от selector Посмотреть сообщение
Хммм, возможно проверку по атрибутам?


P.S. о Твоем варианте решения проблемы, я даже и не подумал...плохо еще разбираюсь в коде))
Судя по комментам вовхеда моё решение есть верное решение
Ауры должны висеть в бафах, но только одна из них должна реально давать бонус силы атаки.

Проверяте чем хотите, я лишь сделал набросок. Там менять осталось то всего по строчке в обоих функциях

Последний раз редактировалось Insider42; 30.10.2010 в 23:00.
Insider42 вне форума   Ответить с цитированием
Старый 31.10.2010, 09:55   #5
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Почему никто не сказал что тут неожиданно закрался баг? Всё таки нужно проверять ауры как при наложении, так и при снятии - т.е. убрать if (apply) проверку. Иначе АП может уйти в минус :/

ЗЫ: Такое ощущение что форум вымирает
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо"

Последний раз редактировалось Insider42; 31.10.2010 в 10:05.
Insider42 вне форума   Ответить с цитированием
Старый 31.10.2010, 10:39   #6
PSZ
Ученый
 
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
PSZ Обладатель прекрасной аурыPSZ Обладатель прекрасной ауры
По умолчанию

Цитата:
Сообщение от Insider42 Посмотреть сообщение
ЗЫ: Такое ощущение что форум вымирает
За что боролись, на то и напоролись.

ЗЫ: Сейчас обсуждения больше ведутся на гитхабе в форках.
PSZ вне форума   Ответить с цитированием
Старый 31.10.2010, 12:05   #7
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Авторам в первую очередь надо самим проверять свои патчи, т.к. у других на это может не быть времени, да и другие могут не до конца вникнуть в проблему.
virusav вне форума   Ответить с цитированием
Старый 31.10.2010, 15:07   #8
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

я их обычно кидаю на растерзание критикам, ибо не всегда пишу "правильные" патчи. В данный момент занимаюсь написанием более полного патча на подобное дело... есть некоторые трудности и скорее всего он скоро появится в разделе ядро с припиской patch/dev
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо"
Insider42 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 03:11. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot