Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Запросы (http://mangos.ytdb.ru/forumdisplay.php?f=7)
-   -   SPELL_ATTR_EX4_STACK_DOT_MODIFIER и его толкование (http://mangos.ytdb.ru/showthread.php?t=3659)

Amaru 05.02.2011 14:56

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к+ за тик).


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

ru-mangos.ru - Русское сообщество MaNGOS