diff options
-rw-r--r-- | src/game/SpellMgr.cpp | 24 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 3 | ||||
-rw-r--r-- | src/game/Unit.cpp | 11 |
3 files changed, 24 insertions, 14 deletions
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 0d39c6cf336..67e6380d5ea 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -354,22 +354,19 @@ SpellSpecific GetSpellSpecific(uint32 spellId) uint32 firstSpell = spellmgr.GetFirstSpellInChain(spellInfo->Id); switch (firstSpell) { - // Strength - case 8118: - // Stamina - case 8099: - // Spirit - case 8112: - //Intellect - case 8096: - // Agility - case 8115: - // Armor - case 8091: + case 8118: // Strength + case 8099: // Stamina + case 8112: // Spirit + case 8096: // Intellect + case 8115: // Agility + case 8091: // Armor return SPELL_SCROLL; + case 12880: // Enrage + case 12292: // Death Wish + return SPELL_WARRIOR_ENRAGE; } - break; } + break; } case SPELLFAMILY_MAGE: { @@ -514,6 +511,7 @@ bool IsSingleFromSpellSpecificPerTarget(uint32 spellSpec1,uint32 spellSpec2) case SPELL_FOOD: case SPELL_CHARM: case SPELL_SCROLL: + case SPELL_WARRIOR_ENRAGE: case SPELL_MAGE_ARCANE_BRILLANCE: return spellSpec1==spellSpec2; case SPELL_BATTLE_ELIXIR: diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index c3174a05e7c..13973e25120 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -139,7 +139,8 @@ enum SpellSpecific SPELL_PRESENCE = 21, SPELL_CHARM = 22, SPELL_SCROLL = 23, - SPELL_MAGE_ARCANE_BRILLANCE = 24 + SPELL_MAGE_ARCANE_BRILLANCE = 24, + SPELL_WARRIOR_ENRAGE = 25, }; #define SPELL_LINKED_MAX_SPELLS 200000 diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 21f34d49ac3..18fe23728ca 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6864,6 +6864,17 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, AuraEffect* trig Item* castItem = triggeredByAura->GetParentAura()->GetCastItemGUID() && GetTypeId()==TYPEID_PLAYER ? ((Player*)this)->GetItemByGuid(triggeredByAura->GetParentAura()->GetCastItemGUID()) : NULL; + + AuraMap::iterator i,next; + for (i = m_Auras.begin(); i != m_Auras.end(); i = next) + { + next = i; + ++next; + if (!(*i).second) continue; + if ( (*i).second->GetSpellProto()->Id == trigger_spell_id) continue; + if (spellmgr.IsNoStackSpellDueToSpell(trigger_spell_id, (*i).second->GetSpellProto()->Id, (pVictim == this))) + return false; + } // Try handle unknown trigger spells if (sSpellStore.LookupEntry(trigger_spell_id)==NULL) |