|
Запросы Запросы |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
05.02.2011, 14:56 | #1 |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
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к+ за тик). |