|
Патчи на рассмотрении Рассматриваемые к принятию патчи |
|
Опции темы | Поиск в этой теме | Опции просмотра |
17.06.2010, 11:24 | #1 |
Гость
Сообщений: n/a
|
Simplified way to retrieve talent auras.
Преамбула.
Чем собственно ауры талантов отличаются от обычных? Нет, не только тем, что они пассивны. Для человека, правящего спеллы, они представляют головную боль, т.к. очень часто все SpellFamilyFlags у них равны 0, а в ванильном ядре до сих пор нет никакого способа для облегчения их получения. Фабула. Для себя я уже достаточно давно сделал вот такую "хитрую штуку". В Unit.h: Код:
Aura* GetAura(AuraType type, uint32 family, SpellEffectIndex effindex, uint32 iconID, uint32 miscValue = 0, uint64 casterGUID = 0) const; Код:
Aura* Unit::GetAura(AuraType type, uint32 family, SpellEffectIndex effindex, uint32 iconID, uint32 miscValue, uint64 casterGUID) const { AuraList const& auras = GetAurasByType(type); for(AuraList::const_iterator i = auras.begin();i != auras.end(); ++i) { if ((*i)->GetEffIndex() != effindex) continue; if (casterGUID && (*i)->GetCasterGUID()!=casterGUID) continue; if (miscValue && (*i)->GetMiscValue() != miscValue) continue; SpellEntry const *spell = (*i)->GetSpellProto(); if (spell->SpellFamilyName == family && spell->SpellIconID == iconID) return (*i); } return NULL; } Код:
// Improved Moonkin Form if (form == FORM_MOONKIN) { Unit::AuraList const& dummyAuras = target->GetAurasByType(SPELL_AURA_DUMMY); for(Unit::AuraList::const_iterator i = dummyAuras.begin(); i != dummyAuras.end(); i++) { if ((*i)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_DRUID && (*i)->GetSpellProto()->SpellIconID == 2855) { uint32 spell_id = 0; switch((*i)->GetId()) { case 48384:spell_id=50170;break;//Rank 1 case 48395:spell_id=50171;break;//Rank 2 case 48396:spell_id=50172;break;//Rank 3 default: sLog.outError("Aura::HandleShapeshiftBoosts: Not handled rank of IMF (Spell: %u)",(*i)->GetId()); break; } if(spell_id) target->CastSpell(target, spell_id, true, NULL, this); break; } } } Код:
// Improved Moonkin Form if (form == FORM_MOONKIN) { if (Aura *aur = m_target->GetAura(SPELL_AURA_DUMMY, SPELLFAMILY_DRUID, EFFECT_INDEX_0, 2855)) { uint32 spell_id = 0; switch(aur->GetId()) { case 48384:spell_id=50170;break; // Rank 1 case 48395:spell_id=50171;break; // Rank 2 case 48396:spell_id=50172;break; // Rank 3 default: sLog.outError("Aura::HandleShapeshiftBoosts: Not handled rank of IMF (Spell: %u)", aur->GetId()); } if(spell_id) m_target->CastSpell(m_target, spell_id, true, NULL, this); } } |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10616] Simplified trade distance checks, GROUP_UPDATE_FLAG_POSITION flag handling moved out of Map | newsbot | CMaNGOS Commits | 0 | 17.10.2010 19:22 |
[10446] Small fix for single target auras: remove caster only auras | newsbot | CMaNGOS Commits | 0 | 05.09.2010 08:00 |
[10051] Fixed talent 58426 broken after 3.3.3 switch. | newsbot | CMaNGOS Commits | 0 | 12.06.2010 03:40 |
[9987] Restore work talent 12311 and ranks. | newsbot | CMaNGOS Commits | 0 | 28.05.2010 00:13 |
[9661] Implement dual talent specializations in talent switch part. | newsbot | CMaNGOS Commits | 1 | 03.04.2010 06:39 |