Changeset 157
- Timestamp:
- 11/19/08 13:41:36 (17 years ago)
- Location:
- trunk/src/game
- Files:
-
- 5 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/Spell.cpp
r148 r157 1056 1056 ((Creature*)m_caster)->AI()->SpellHitTarget(unit, m_spellInfo); 1057 1057 1058 if(int32 spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id, 1)) 1059 { 1060 if(spell_triggered > 0) 1061 unit->CastSpell(unit, spell_triggered, true, 0, 0, m_caster->GetGUID()); 1062 else 1063 unit->RemoveAurasDueToSpell(-spell_triggered); 1058 if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id + 1000000)) 1059 { 1060 for(std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i) 1061 { 1062 if(spell_triggered < 0) 1063 unit->RemoveAurasDueToSpell(-(*i)); 1064 else 1065 unit->CastSpell(unit, *i, true, 0, 0, m_caster->GetGUID()); 1066 } 1064 1067 } 1065 1068 } … … 2253 2256 } 2254 2257 2255 if(int32 spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id, 0)) 2256 { 2257 if(spell_triggered > 0) 2258 m_caster->CastSpell(m_targets.getUnitTarget() ? m_targets.getUnitTarget() : m_caster, spell_triggered, true); 2259 else 2260 m_caster->RemoveAurasDueToSpell(-spell_triggered); 2258 if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id)) 2259 { 2260 for(std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i) 2261 { 2262 if(spell_triggered < 0) 2263 m_caster->RemoveAurasDueToSpell(-(*i)); 2264 else 2265 m_caster->CastSpell(m_targets.getUnitTarget() ? m_targets.getUnitTarget() : m_caster, *i, true); 2266 } 2261 2267 } 2262 2268 -
trunk/src/game/SpellEffects.cpp
r149 r157 2119 2119 // Now Reduce spell duration using data received at spell hit 2120 2120 int32 duration = Aur->GetAuraMaxDuration(); 2121 unitTarget->ApplyDiminishingToDuration(m_diminishGroup,duration, m_caster,m_diminishLevel);2121 unitTarget->ApplyDiminishingToDuration(m_diminishGroup,duration,caster,m_diminishLevel); 2122 2122 Aur->setDiminishGroup(m_diminishGroup); 2123 2123 -
trunk/src/game/SpellMgr.cpp
r155 r157 2088 2088 } 2089 2089 2090 SpellLinkedSpell linkedSpell; 2091 linkedSpell.spell = effect; 2092 linkedSpell.type = type; 2093 mSpellLinkedMap[trigger] = linkedSpell; 2090 if(type) //we will find a better way when more types are needed 2091 trigger += 1000000; 2092 mSpellLinkedMap[trigger].push_back(effect); 2094 2093 2095 2094 ++count; -
trunk/src/game/SpellMgr.h
r131 r157 649 649 typedef std::map<uint32, SpellExtraAttribute> SpellExtraAttrMap; 650 650 651 struct SpellLinkedSpell 652 { 653 int32 spell; 654 uint32 type; 655 }; 656 typedef std::map<int32, SpellLinkedSpell> SpellLinkedMap; 651 typedef std::map<int32, std::vector<int32> > SpellLinkedMap; 657 652 658 653 class SpellMgr … … 863 858 } 864 859 865 int32 GetSpellLinked(int32 spell_id, uint32 type) const860 const std::vector<int32> *GetSpellLinked(int32 spell_id) const 866 861 { 867 862 SpellLinkedMap::const_iterator itr = mSpellLinkedMap.find(spell_id); 868 if(itr != mSpellLinkedMap.end()) 869 return itr->second.type == type ? itr->second.spell : 0; 870 else 871 return 0; 863 return itr != mSpellLinkedMap.end() ? &(itr->second) : NULL; 872 864 } 873 865 -
trunk/src/game/Unit.cpp
r155 r157 4155 4155 4156 4156 4157 if( int32 spell_triggered = spellmgr.GetSpellLinked(-(int32)Aur->GetSpellProto()->Id, 0))4158 { 4159 if(spell_triggered > 0)4160 { 4161 if( Unit* caster = Aur->GetCaster())4162 CastSpell(this, spell_triggered, true, 0, 0, caster->GetGUID());4163 }4164 else4165 RemoveAurasDueToSpell(-spell_triggered);4157 if(const std::vector<int32> *spell_triggered = spellmgr.GetSpellLinked(-(int32)Aur->GetSpellProto()->Id)) 4158 { 4159 for(std::vector<int32>::const_iterator i = spell_triggered->begin(); i != spell_triggered->end(); ++i) 4160 { 4161 if(spell_triggered < 0) 4162 RemoveAurasDueToSpell(-(*i)); 4163 else if(Unit* caster = Aur->GetCaster()) 4164 CastSpell(this, *i, true, 0, 0, caster->GetGUID()); 4165 } 4166 4166 } 4167 4167