diff options
author | QAston <none@none> | 2010-02-02 22:35:01 +0100 |
---|---|---|
committer | QAston <none@none> | 2010-02-02 22:35:01 +0100 |
commit | 10695f9131336b26c352b19ce2a39e8c2ca0af8e (patch) | |
tree | 8133420b42fa204ed5f11553df7e04e50a735bed /src/game/SpellEffects.cpp | |
parent | 70425115f0650807fb08ca5d70a782c532e7c926 (diff) |
*Drop spell_stack_masks table
*Add spell_group_stack_rules table (for more info see wiki)
*The table is maintained by core team
*Move some spell specific out of core to the new table
--HG--
branch : trunk
Diffstat (limited to 'src/game/SpellEffects.cpp')
-rw-r--r-- | src/game/SpellEffects.cpp | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 7a61a717fe4..63ec61ad826 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -3216,44 +3216,29 @@ void Spell::EffectEnergize(uint32 i) } // get all available elixirs by mask and spell level - std::list<uint32> avalibleElixirs; + std::set<uint32> avalibleElixirs; if (!guardianFound) - { - SpellGroupSpellMapBounds guardianGroup = spellmgr.GetSpellGroupSpellMapBounds(SPELL_GROUP_ELIXIR_GUARDIAN); - for ( SpellGroupSpellMap::const_iterator itr = guardianGroup.first; itr != guardianGroup.second ; ++itr) - { - SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->second); - if (spellInfo && (spellInfo->spellLevel < m_spellInfo->spellLevel || spellInfo->spellLevel > unitTarget->getLevel())) - continue; - if(spellmgr.IsSpellMemberOfSpellGroup(itr->second, SPELL_GROUP_ELIXIR_SHATTRATH)) - continue; - if(spellmgr.IsSpellMemberOfSpellGroup(itr->second, SPELL_GROUP_ELIXIR_UNSTABLE)) - continue; - avalibleElixirs.push_back(itr->second); - } - } + spellmgr.GetSetOfSpellsInSpellGroup(SPELL_GROUP_ELIXIR_GUARDIAN, avalibleElixirs); if (!battleFound) + spellmgr.GetSetOfSpellsInSpellGroup(SPELL_GROUP_ELIXIR_BATTLE, avalibleElixirs); + for (std::set<uint32>::iterator itr = avalibleElixirs.begin(); itr != avalibleElixirs.end() ;) { - SpellGroupSpellMapBounds battleGroup = spellmgr.GetSpellGroupSpellMapBounds(SPELL_GROUP_ELIXIR_BATTLE); - for ( SpellGroupSpellMap::const_iterator itr = battleGroup.first; itr != battleGroup.second ; ++itr) - { - SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->second); - if (spellInfo && (spellInfo->spellLevel < m_spellInfo->spellLevel || spellInfo->spellLevel > unitTarget->getLevel())) - continue; - if(spellmgr.IsSpellMemberOfSpellGroup(itr->second, SPELL_GROUP_ELIXIR_SHATTRATH)) - continue; - if(spellmgr.IsSpellMemberOfSpellGroup(itr->second, SPELL_GROUP_ELIXIR_UNSTABLE)) - continue; - avalibleElixirs.push_back(itr->second); - } + SpellEntry const *spellInfo = sSpellStore.LookupEntry(*itr); + if (spellInfo->spellLevel < m_spellInfo->spellLevel || spellInfo->spellLevel > unitTarget->getLevel()) + avalibleElixirs.erase(itr++); + else if(spellmgr.IsSpellMemberOfSpellGroup(*itr, SPELL_GROUP_ELIXIR_SHATTRATH)) + avalibleElixirs.erase(itr++); + else if(spellmgr.IsSpellMemberOfSpellGroup(*itr, SPELL_GROUP_ELIXIR_UNSTABLE)) + avalibleElixirs.erase(itr++); + else + ++itr; } - avalibleElixirs.unique(); if (!avalibleElixirs.empty()) { // cast random elixir on target uint32 rand_spell = urand(0,avalibleElixirs.size()-1); - std::list<uint32>::iterator itr = avalibleElixirs.begin(); + std::set<uint32>::iterator itr = avalibleElixirs.begin(); std::advance(itr, rand_spell); m_caster->CastSpell(unitTarget,*itr,true,m_CastItem); } |