Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Модификации ядра > Запросы

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

Запросы Запросы

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.02.2011, 14:56   #1
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию SPELL_ATTR_EX4_STACK_DOT_MODIFIER и его толкование

Добрый день всем.
Недавно обнаружил очень интересную вещь - ретропал в цлк в составе рейда слил ребраду пол хп за несколько секунд. Что удивило, когда попалил одежку пала - тот был фулл одет в мейл на агилу, засокечен на агилу и крит.
Вкоре выяснил - омг дамаг шел от таланта [Righteous Vengeance] (на вовхеде его уже, увы, нет), который вешает на цель дот при критических ударах джагами, крусаком и штормом.

Собственно, я был в курсе, что некоторые доты при повторном накладывании не заменяют ауры, а стакают модифаер, но не думал, что таким образом велечины тиков могут достич показателя в несколько лямов.

Далее нашел атрибут, отвечающий за стак модифаера дот аур - SPELL_ATTR_EX4_STACK_DOT_MODIFIER, нашел участок кода в Spell:AddSpellAuraHolder, реализующий стак
Код:
// Carry over removed Aura's remaining damage if Aura still has ticks remaining
                if (foundHolder->GetSpellProto()->AttributesEx4 & SPELL_ATTR_EX4_STACK_DOT_MODIFIER)
                {
                    for (int32 i = 0; i < MAX_EFFECT_INDEX; ++i)
                    {
                        if (Aura *aur = holder->GetAuraByEffectIndex(SpellEffectIndex(i)))
                        {
                            // m_auraname can be modified to SPELL_AURA_NONE for area auras, use original
                            AuraType aurNameReal = AuraType(aurSpellInfo->EffectApplyAuraName[i]);

                            if (aurNameReal == SPELL_AURA_PERIODIC_DAMAGE && aur->GetAuraDuration() > 0)
                            {
                                if (Aura *existing = foundHolder->GetAuraByEffectIndex(SpellEffectIndex(i)))
                                {
                                    int32 remainingTicks = existing->GetAuraMaxTicks() - existing->GetAuraTicks();
                                    int32 remainingDamage = existing->GetModifier()->m_amount * remainingTicks;

                                    aur->GetModifier()->m_amount += int32(remainingDamage / aur->GetAuraMaxTicks());
                                }
                                else
                                    DEBUG_LOG("Holder (spell %u) on target (lowguid: %u) doesn't have aura on effect index %u. skipping.", aurSpellInfo->Id, holder->GetTarget()->GetGUIDLow(), i);
                            }
                        }
                    }
                }
сразу смутило - нет никакого ограничения на максимальное значение модифаера.
попалил все спеллы с данным атрибутом
Код:
select id,spellname,spellfamilyname from spellstore where attributesex4 & 0x00000100=0x00000100;
+-------+------------------------------------------------+-----------------+
| id    | spellname                                      | spellfamilyname |
+-------+------------------------------------------------+-----------------+
| 12654 | Ignite                                         |               3 |
| 12721 | Deep Wounds                                    |               4 |
| 19752 | Divine Intervention                            |              10 |
| 28375 | Decimate                                       |               0 |
| 29142 | Eyesore Blaster                                |               0 |
| 29879 | Frost Blast                                    |               0 |
| 31117 | Unstable Affliction                            |               5 |
| 34695 | Tornado                                        |               0 |
| 36536 | dd10                                           |               0 |
| 36586 | dd1                                            |               0 |
| 37284 | Scalding Water                                 |               0 |
| 39384 | Burning Flames                                 |               0 |
| 41342 | Shared Rule                                    |               0 |
| 41343 | Shared Rule                                    |               0 |
| 41344 | Shared Rule                                    |               0 |
| 42080 | Headless Horseman - Fire onSpawn               |               0 |
| 42096 | Headless Horseman - Fire onSpawn, Size         |               0 |
| 42273 | Headless Horseman - Fire, non-growing, onSpawn |               0 |
| 44031 | Tackled!                                       |               0 |
| 50536 | Unholy Blight                                  |              15 |
| 51013 | Exsanguinate                                   |               0 |
| 51460 | Necrosis                                       |              15 |
| 58691 | Pandemic                                       |               5 |
| 60239 | Gargoyle Ambusher Strike                       |               0 |
| 61840 | Righteous Vengeance                            |              10 |
| 63468 | Piercing Shots                                 |               9 |
| 64595 | Shield-Breaker                                 |               0 |
| 64930 | Electrified                                    |              11 |
| 65309 | dd10 AoE                                       |               0 |
| 65707 | [DND] Warbot Damage Self                       |               0 |
| 65719 | Shadow Nova                                    |               0 |
| 66240 | Leeching Swarm                                 |               0 |
| 66480 | Shield-Breaker                                 |               0 |
| 66593 | dmg7 arcane                                    |               0 |
| 66594 | dmg7 shadow                                    |               0 |
| 66595 | dmg5 arcane                                    |               0 |
| 66596 | dmg7 shadow                                    |               0 |
| 70374 | Burning Pitch                                  |               0 |
| 70383 | Burning Pitch                                  |               0 |
| 70890 | Scourge Strike                                 |              15 |
| 71023 | Languish                                       |               3 |
| 71824 | Lava Burst                                     |               0 |
| 71879 | Necrotic Touch                                 |              15 |
| 72980 | Shadow Resonance                               |               0 |
| 75100 | Attack                                         |               0 |
+-------+------------------------------------------------+-----------------+
45 rows in set
Действительно, есть спеллы, которые очевидно стакают дот (синие), а есть непонятные (красные), которые не подходят под смысл атрибута, по моему мнению.

Собственно, назрело сомнение, действительно ли SPELL_ATTR_EX4_STACK_DOT_MODIFIER отвечает за стак дотов, или у него какое-то другое или более расширенное значение? Проверка aurNameReal == SPELL_AURA_PERIODIC_DAMAGE также наводит на эту мысль.

Вопрос второй - действительно ли можно стакать модифаер до бесконечности, или же существует какое-то ограничение? В инете нигде инфы не нашел.

На данный момент, имеются пруфы омг дамага от паловского Righteous Vengeance(1кк+), варовского Deep Wounds (1кк+), дкшного Unholy Blight (5к+), Ignite (лично доводил стак до 70к+ за тик).
Amaru вне форума   Ответить с цитированием
Ответ


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

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



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


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