Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   Маски спеллов (http://mangos.ytdb.ru/showthread.php?t=2415)

fedr 13.09.2010 21:50

Маски спеллов
 
Запутался с масками/флагами, помогите разобраться.

Имеем талант http://ru.wowhead.com/spell=18275, который имеет эффект SPELL_EFFECT_APPLY_AURA, aura SPELL_AURA_ADD_PCT_MODIFIER, misc = SPELLMOD_DAMAGE.
SpellModifier имеет поле uint64 mask, которая указывает на какие группы спеллов распространяется аура (?).
На MZ есть таблица `spell_affect`, которая сопоставляет спеллам их `SpellFamilyMask`, однако в поздних версиях такой таблицы нету. В Spell.dbc нашел такие столбцы:
125 EffectSpellClassMaskA1 uint
...
133 EffectSpellClassMaskC3 uint
Отсюда они и берутся? о_О

NeatElves 13.09.2010 22:16

Как вариант подсказки - http://wiki.ytdb.ru/index.php/Spell_...pellFamilyMask )

fedr 13.09.2010 22:42

212 SpellFamilyFlagsLow uint
213 SpellFamilyFlagsHigh uint
214 SpellFamilyFlags2 uint

Получается отсюда.

Чего-то я совсем запутался:

Код:

bool SpellModifier::isAffectedOnSpell( SpellEntry const *spell ) const
{
    SpellEntry const *affect_spell = sSpellStore.LookupEntry(spellId);
    // False if affect_spell == NULL or spellFamily not equal
    if (!affect_spell || affect_spell->SpellFamilyName != spell->SpellFamilyName)
        return false;

    if (mask & spell->SpellFamilyFlags) // !!!
        return true;
       
    return false;
}

Как я представляю: для каждой FamilyName есть группы спеллов (64). При этом у каждого спелла должен быть флаг причастности к одной из групп, и я полагал это и называется SpellFamilyFlags. Маска же содержит группы на которые распространяется действие данного эффекта и результат конъюкции будет >0, если флаг спелла содержится в ней... Поправьте, что не так %)


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

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