aboutsummaryrefslogtreecommitdiff
path: root/src/game/SpellEffects.cpp
diff options
context:
space:
mode:
authorQAston <none@none>2010-02-02 22:35:01 +0100
committerQAston <none@none>2010-02-02 22:35:01 +0100
commit10695f9131336b26c352b19ce2a39e8c2ca0af8e (patch)
tree8133420b42fa204ed5f11553df7e04e50a735bed /src/game/SpellEffects.cpp
parent70425115f0650807fb08ca5d70a782c532e7c926 (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.cpp43
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);
}