aboutsummaryrefslogtreecommitdiff
path: root/src/game/Spell.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2008-11-03 17:20:35 -0600
committermegamage <none@none>2008-11-03 17:20:35 -0600
commit94c03e321186bc73e7027a3308ce889250baa594 (patch)
treeef2855703b968990965e6824f617efa65fef5bf1 /src/game/Spell.cpp
parent6a8878fb5da29c4ff0deac8e8819489089731704 (diff)
[svn] Fix hunter's frozen trap, half duration when pvp.
Use vector to store linked spell information to support multiple effects. --HG-- branch : trunk
Diffstat (limited to 'src/game/Spell.cpp')
-rw-r--r--src/game/Spell.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index c2463d9738a..4795d64bfcc 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -1055,12 +1055,15 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
if(m_caster->GetTypeId() == TYPEID_UNIT && ((Creature*)m_caster)->AI())
((Creature*)m_caster)->AI()->SpellHitTarget(unit, m_spellInfo);
- if(int32 spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id, 1))
+ if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id + 1000000))
{
- if(spell_triggered > 0)
- unit->CastSpell(unit, spell_triggered, true, 0, 0, m_caster->GetGUID());
- else
- unit->RemoveAurasDueToSpell(-spell_triggered);
+ for(std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i)
+ {
+ if(spell_triggered < 0)
+ unit->RemoveAurasDueToSpell(-(*i));
+ else
+ unit->CastSpell(unit, *i, true, 0, 0, m_caster->GetGUID());
+ }
}
}
@@ -2252,12 +2255,15 @@ void Spell::cast(bool skipCheck)
}
}
- if(int32 spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id, 0))
+ if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id))
{
- if(spell_triggered > 0)
- m_caster->CastSpell(m_targets.getUnitTarget() ? m_targets.getUnitTarget() : m_caster, spell_triggered, true);
- else
- m_caster->RemoveAurasDueToSpell(-spell_triggered);
+ for(std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i)
+ {
+ if(spell_triggered < 0)
+ m_caster->RemoveAurasDueToSpell(-(*i));
+ else
+ m_caster->CastSpell(m_targets.getUnitTarget() ? m_targets.getUnitTarget() : m_caster, *i, true);
+ }
}
// traded items have trade slot instead of guid in m_itemTargetGUID