|
---|
|
Ядро Здесь форум по базе, но иногда случается, что вопросы пересекаются. Но это форум не по ядру Мангос! |
|
Опции темы | Поиск в этой теме | Опции просмотра |
24.01.2010, 14:36 | #1 |
Guest
Сообщений: n/a
|
Вопрос AURA_REMOVE
Уважаемые знатоки вам пишет человек который начал разбираться в коде и у него возник вопрос.
т.к. вики мангос.ру лежит, как собственно и он сам спрашиваю тут. Собственно вопрос: Кто может описать подробно про AURA_REMOVE какие есть зачем почему как и что делают |
24.01.2010, 14:45 | #2 |
YTDB dev
Регистрация: 05.11.2009
Сообщений: 5,920
Сказал(а) спасибо: 91
Поблагодарили 5,383 раз(а) в 4,847 сообщениях
|
|
Пользователь сказал cпасибо: |
24.01.2010, 14:59 | #3 |
Guest
Сообщений: n/a
|
только там по базе wiki если я не ошибаюсь.
|
24.01.2010, 15:11 | #4 |
RuDB Dev
Регистрация: 06.11.2009
Сообщений: 677
Сказал(а) спасибо: 592
Поблагодарили 690 раз(а) в 289 сообщениях
|
Какие есть? (режимы)
Код:
enum AuraRemoveMode { AURA_REMOVE_BY_DEFAULT, AURA_REMOVE_BY_STACK, // at replace by similar aura AURA_REMOVE_BY_CANCEL, AURA_REMOVE_BY_DISPEL, AURA_REMOVE_BY_DEATH, AURA_REMOVE_BY_DELETE, // use for speedup and prevent unexpected effects at player logout/pet unsummon (must be used _only_ after save), delete. }; Код:
void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode) { Aura* Aur = i->second; SpellEntry const* AurSpellInfo = Aur->GetSpellProto(); Aur->UnregisterSingleCastAura(); // remove from list before mods removing (prevent cyclic calls, mods added before including to aura list - use reverse order) if (Aur->GetModifier()->m_auraname < TOTAL_AURAS) { m_modAuras[Aur->GetModifier()->m_auraname].remove(Aur); } // Set remove mode Aur->SetRemoveMode(mode); // if unit currently update aura list then make safe update iterator shift to next if (m_AurasUpdateIterator == i) ++m_AurasUpdateIterator; // some ShapeshiftBoosts at remove trigger removing other auras including parent Shapeshift aura // remove aura from list before to prevent deleting it before m_Auras.erase(i); // now aura removed from from list and can't be deleted by indirect call but can be referenced from callers // Statue unsummoned at aura remove Totem* statue = NULL; if(IsChanneledSpell(AurSpellInfo)) if(Unit* caster = Aur->GetCaster()) if(caster->GetTypeId()==TYPEID_UNIT && ((Creature*)caster)->isTotem() && ((Totem*)caster)->GetTotemType()==TOTEM_STATUE) statue = ((Totem*)caster); sLog.outDebug("Aura %u now is remove mode %d",Aur->GetModifier()->m_auraname, mode); if (mode != AURA_REMOVE_BY_DELETE) // not unapply if target will deleted Aur->ApplyModifier(false,true); if (Aur->_RemoveAura()) { // last aura in stack removed if (mode != AURA_REMOVE_BY_DELETE && IsSpellLastAuraEffect(Aur->GetSpellProto(),Aur->GetEffIndex())) Aur->HandleSpellSpecificBoosts(false); } // If aura in use (removed from code that plan access to it data after return) // store it in aura list with delayed deletion if (Aur->IsInUse()) m_deletedAuras.push_back(Aur); else delete Aur; if(statue) statue->UnSummon(); // only way correctly remove all auras from list if( m_Auras.empty() ) i = m_Auras.end(); else i = m_Auras.begin(); } |
Пользователь сказал cпасибо: |
24.01.2010, 15:42 | #5 |
Guest
Сообщений: n/a
|
А в каком файле вы нашли
Код:
{ AURA_REMOVE_BY_DEFAULT, AURA_REMOVE_BY_STACK, // at replace by similar aura AURA_REMOVE_BY_CANCEL, AURA_REMOVE_BY_DISPEL, AURA_REMOVE_BY_DEATH, AURA_REMOVE_BY_DELETE, // use for speedup and prevent unexpected effects at player logout/pet unsummon (must be used _only_ after save), delete. }; |
24.01.2010, 17:10 | #6 |
RuDB Dev
Регистрация: 06.11.2009
Сообщений: 677
Сказал(а) спасибо: 592
Поблагодарили 690 раз(а) в 289 сообщениях
|
Unit.h
|
Пользователь сказал cпасибо: |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по почте | Mr.Grom | Ядро | 4 | 03.02.2010 23:34 |
Вопрос по зонам | Dasexler | Ядро | 11 | 25.01.2010 12:17 |
[вопрос] Как повернуть го по вертикали ? | NeatElves | Ядро | 2 | 20.01.2010 20:50 |