aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/SpellMgr.cpp353
-rw-r--r--src/game/SpellMgr.h3
2 files changed, 19 insertions, 337 deletions
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index ae09d9e0650..d1db3bf311c 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -163,6 +163,9 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
if (spellInfo->SpellFamilyFlags & 0x2000000000LL)
return SPELL_WARLOCK_ARMOR;
+ //seed of corruption and corruption
+ if (spellInfo->SpellFamilyFlags & 0x1000000002LL)
+ return SPELL_WARLOCK_CORRUPTION;
break;
}
case SPELLFAMILY_HUNTER:
@@ -244,9 +247,11 @@ bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2)
case SPELL_TRACKER:
case SPELL_WARLOCK_ARMOR:
case SPELL_MAGE_ARMOR:
+ case SPELL_ELEMENTAL_SHIELD:
case SPELL_MAGE_POLYMORPH:
case SPELL_POSITIVE_SHOUT:
case SPELL_JUDGEMENT:
+ case SPELL_WARLOCK_CORRUPTION:
return spellSpec1==spellSpec2;
case SPELL_BATTLE_ELIXIR:
return spellSpec2==SPELL_BATTLE_ELIXIR
@@ -1027,354 +1032,30 @@ bool SpellMgr::canStackSpellRanks(SpellEntry const *spellInfo)
bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) const
{
+ if(spellId_1 == spellId_2) // auras due to the same spell
+ return false;
+
SpellEntry const *spellInfo_1 = sSpellStore.LookupEntry(spellId_1);
SpellEntry const *spellInfo_2 = sSpellStore.LookupEntry(spellId_2);
if(!spellInfo_1 || !spellInfo_2)
return false;
- if(spellInfo_1->Id == spellId_2) //checked before
+ if(spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName)
return false;
- if(spellInfo_1->SpellFamilyName && spellInfo_1->SpellFamilyName == spellInfo_2->SpellFamilyName) //resurrection sickness
+ if(!spellInfo_1->SpellFamilyName) // generic spells
{
- if(spellInfo_1->SpellFamilyFlags && spellInfo_1->SpellFamilyFlags == spellInfo_2->SpellFamilyFlags)
- return true;
- if(spellInfo_1->SpellFamilyName == SPELLFAMILY_SHAMAN)
- if(IsElementalShield(spellInfo_1) && IsElementalShield(spellInfo_2))
- return true;
- //Corruption & Seed of corruption
- if(spellInfo_1->SpellFamilyName == SPELLFAMILY_WARLOCK)
- if( spellInfo_1->SpellIconID == 313 && spellInfo_2->SpellIconID == 1932 ||
- spellInfo_2->SpellIconID == 313 && spellInfo_1->SpellIconID == 1932 )
- if(spellInfo_1->SpellVisual != 0 && spellInfo_2->SpellVisual != 0)
- return true; // can't be stacked
- }
-
- //I think we don't check this correctly because i need a exception for spell:
- //72,11327,18461...(called from 1856,1857...) Call Aura 16,31, after trigger another spell who call aura 77 and 77 remove 16 and 31, this should not happen.
- //if(spellInfo_2->SpellFamilyFlags == 2048)
- // return false;
-
- // Resurrection sickness
- //if((spellInfo_1->Id == SPELL_ID_PASSIVE_RESURRECTION_SICKNESS) != (spellInfo_2->Id==SPELL_ID_PASSIVE_RESURRECTION_SICKNESS))
- // return false;
-
- // Specific spell family spells
- /*switch(spellInfo_1->SpellFamilyName)
- {
- case SPELLFAMILY_GENERIC:
- switch(spellInfo_2->SpellFamilyName)
- {
- case SPELLFAMILY_GENERIC: // same family case
- {
- // Thunderfury
- if( spellInfo_1->Id == 21992 && spellInfo_2->Id == 27648 || spellInfo_2->Id == 21992 && spellInfo_1->Id == 27648 )
- return false;
-
- // Lightning Speed (Mongoose) and Fury of the Crashing Waves (Tsunami Talisman)
- if( spellInfo_1->Id == 28093 && spellInfo_2->Id == 42084 ||
- spellInfo_2->Id == 28093 && spellInfo_1->Id == 42084 )
- return false;
-
- // Soulstone Resurrection and Twisting Nether (resurrector)
- if( spellInfo_1->SpellIconID == 92 && spellInfo_2->SpellIconID == 92 && (
- spellInfo_1->SpellVisual == 99 && spellInfo_2->SpellVisual == 0 ||
- spellInfo_2->SpellVisual == 99 && spellInfo_1->SpellVisual == 0 ) )
- return false;
-
- // Heart of the Wild and (Primal Instinct (Idol of Terror) triggering spell or Agility)
- if( spellInfo_1->SpellIconID == 240 && spellInfo_2->SpellIconID == 240 && (
- spellInfo_1->SpellVisual == 0 && spellInfo_2->SpellVisual == 78 ||
- spellInfo_2->SpellVisual == 0 && spellInfo_1->SpellVisual == 78 ) )
- return false;
-
- // Personalized Weather (thunder effect should overwrite rainy aura)
- if(spellInfo_1->SpellIconID == 2606 && spellInfo_2->SpellIconID == 2606)
- return false;
-
- // Brood Affliction: Bronze
- if( (spellInfo_1->Id == 23170 && spellInfo_2->Id == 23171) ||
- (spellInfo_2->Id == 23170 && spellInfo_1->Id == 23171) )
- return false;
-
- break;
- }
- case SPELLFAMILY_WARRIOR:
- {
- // Scroll of Protection and Defensive Stance (multi-family check)
- if( spellInfo_1->SpellIconID == 276 && spellInfo_1->SpellVisual == 196 && spellInfo_2->Id == 71)
- return false;
-
- // Improved Hamstring -> Hamstring (multi-family check)
- if( (spellInfo_2->SpellFamilyFlags & 2) && spellInfo_1->Id == 23694 )
- return false;
-
- break;
- }
- case SPELLFAMILY_DRUID:
- {
- // Scroll of Stamina and Leader of the Pack (multi-family check)
- if( spellInfo_1->SpellIconID == 312 && spellInfo_1->SpellVisual == 216 && spellInfo_2->Id == 24932 )
- return false;
-
- // Dragonmaw Illusion (multi-family check)
- if (spellId_1 == 40216 && spellId_2 == 42016 )
- return false;
-
- break;
- }
- case SPELLFAMILY_ROGUE:
- {
- // Garrote-Silence -> Garrote (multi-family check)
- if( spellInfo_1->SpellIconID == 498 && spellInfo_1->SpellVisual == 0 && spellInfo_2->SpellIconID == 498 )
- return false;
-
- break;
- }
- case SPELLFAMILY_HUNTER:
- {
- // Concussive Shot and Imp. Concussive Shot (multi-family check)
- if( spellInfo_1->Id == 19410 && spellInfo_2->Id == 5116 )
- return false;
-
- // Improved Wing Clip -> Wing Clip (multi-family check)
- if( (spellInfo_2->SpellFamilyFlags & 0x40) && spellInfo_1->Id == 19229 )
- return false;
- break;
- }
- case SPELLFAMILY_PALADIN:
- {
- // Unstable Currents and other -> *Sanctity Aura (multi-family check)
- if( spellInfo_2->SpellIconID==502 && spellInfo_1->SpellIconID==502 && spellInfo_1->SpellVisual==969 )
- return false;
-
- // *Band of Eternal Champion and Seal of Command(multi-family check)
- if( spellId_1 == 35081 && spellInfo_2->SpellIconID==561 && spellInfo_2->SpellVisual==7992)
- return false;
-
- break;
- }
- }
- break;
- case SPELLFAMILY_MAGE:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_MAGE )
- {
- // Blizzard & Chilled (and some other stacked with blizzard spells
- if( (spellInfo_1->SpellFamilyFlags & 0x80) && (spellInfo_2->SpellFamilyFlags & 0x100000) ||
- (spellInfo_2->SpellFamilyFlags & 0x80) && (spellInfo_1->SpellFamilyFlags & 0x100000) )
- return false;
-
- // Blink & Improved Blink
- if( (spellInfo_1->SpellFamilyFlags & 0x0000000000010000LL) && (spellInfo_2->SpellVisual == 72 && spellInfo_2->SpellIconID == 1499) ||
- (spellInfo_2->SpellFamilyFlags & 0x0000000000010000LL) && (spellInfo_1->SpellVisual == 72 && spellInfo_1->SpellIconID == 1499) )
- return false;
- }
- // Detect Invisibility and Mana Shield (multi-family check)
- if( spellInfo_2->Id == 132 && spellInfo_1->SpellIconID == 209 && spellInfo_1->SpellVisual == 968 )
- return false;
-
- // Combustion and Fire Protection Aura (multi-family check)
- if( spellInfo_1->Id == 11129 && spellInfo_2->SpellIconID == 33 && spellInfo_2->SpellVisual == 321 )
- return false;
-
- break;
- case SPELLFAMILY_WARLOCK:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_WARLOCK )
- {
- // Siphon Life and Drain Life
- if( spellInfo_1->SpellIconID == 152 && spellInfo_2->SpellIconID == 546 ||
- spellInfo_2->SpellIconID == 152 && spellInfo_1->SpellIconID == 546 )
- return false;
-
- //Corruption & Seed of corruption
- if( spellInfo_1->SpellIconID == 313 && spellInfo_2->SpellIconID == 1932 ||
- spellInfo_2->SpellIconID == 313 && spellInfo_1->SpellIconID == 1932 )
- if(spellInfo_1->SpellVisual != 0 && spellInfo_2->SpellVisual != 0)
- return true; // can't be stacked
-
- // Corruption and Unstable Affliction
- if( spellInfo_1->SpellIconID == 313 && spellInfo_2->SpellIconID == 2039 ||
- spellInfo_2->SpellIconID == 313 && spellInfo_1->SpellIconID == 2039 )
- return false;
-
- // (Corruption or Unstable Affliction) and (Curse of Agony or Curse of Doom)
- if( (spellInfo_1->SpellIconID == 313 || spellInfo_1->SpellIconID == 2039) && (spellInfo_2->SpellIconID == 544 || spellInfo_2->SpellIconID == 91) ||
- (spellInfo_2->SpellIconID == 313 || spellInfo_2->SpellIconID == 2039) && (spellInfo_1->SpellIconID == 544 || spellInfo_1->SpellIconID == 91) )
- return false;
- }
- // Detect Invisibility and Mana Shield (multi-family check)
- if( spellInfo_1->Id == 132 && spellInfo_2->SpellIconID == 209 && spellInfo_2->SpellVisual == 968 )
- return false;
- break;
- case SPELLFAMILY_WARRIOR:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_WARRIOR )
- {
- // Rend and Deep Wound
- if( (spellInfo_1->SpellFamilyFlags & 0x20) && (spellInfo_2->SpellFamilyFlags & 0x1000000000LL) ||
- (spellInfo_2->SpellFamilyFlags & 0x20) && (spellInfo_1->SpellFamilyFlags & 0x1000000000LL) )
- return false;
-
- // Battle Shout and Rampage
- if( (spellInfo_1->SpellIconID == 456 && spellInfo_2->SpellIconID == 2006) ||
- (spellInfo_2->SpellIconID == 456 && spellInfo_1->SpellIconID == 2006) )
- return false;
- }
-
- // Hamstring -> Improved Hamstring (multi-family check)
- if( (spellInfo_1->SpellFamilyFlags & 2) && spellInfo_2->Id == 23694 )
- return false;
-
- // Defensive Stance and Scroll of Protection (multi-family check)
- if( spellInfo_1->Id == 71 && spellInfo_2->SpellIconID == 276 && spellInfo_2->SpellVisual == 196 )
- return false;
-
- // Bloodlust and Bloodthirst (multi-family check)
- if( spellInfo_2->Id == 2825 && spellInfo_1->SpellIconID == 38 && spellInfo_1->SpellVisual == 0 )
- return false;
-
- break;
- case SPELLFAMILY_PRIEST:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_PRIEST )
- {
- //Devouring Plague and Shadow Vulnerability
- if( (spellInfo_1->SpellFamilyFlags & 0x2000000) && (spellInfo_2->SpellFamilyFlags & 0x800000000LL) ||
- (spellInfo_2->SpellFamilyFlags & 0x2000000) && (spellInfo_1->SpellFamilyFlags & 0x800000000LL) )
- return false;
-
- //StarShards and Shadow Word: Pain
- if( (spellInfo_1->SpellFamilyFlags & 0x200000) && (spellInfo_2->SpellFamilyFlags & 0x8000) ||
- (spellInfo_2->SpellFamilyFlags & 0x200000) && (spellInfo_1->SpellFamilyFlags & 0x8000) )
- return false;
- }
- break;
- case SPELLFAMILY_DRUID:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_DRUID )
- {
- //Omen of Clarity and Blood Frenzy
- if( (spellInfo_1->SpellFamilyFlags == 0x0 && spellInfo_1->SpellIconID == 108) && (spellInfo_2->SpellFamilyFlags & 0x20000000000000LL) ||
- (spellInfo_2->SpellFamilyFlags == 0x0 && spellInfo_2->SpellIconID == 108) && (spellInfo_1->SpellFamilyFlags & 0x20000000000000LL) )
- return false;
-
- // Tree of Life (Shapeshift) and 34123 Tree of Life (Passive)
- if ((spellId_1 == 33891 && spellId_2 == 34123) ||
- (spellId_2 == 33891 && spellId_1 == 34123))
- return false;
-
- // Wrath of Elune and Nature's Grace
- if( spellInfo_1->Id == 16886 && spellInfo_2->Id == 46833 || spellInfo_2->Id == 16886 && spellInfo_1->Id == 46833 )
- return false;
-
- // Bear Rage (Feral T4 (2)) and Omen of Clarity
- if( spellInfo_1->Id == 16864 && spellInfo_2->Id == 37306 || spellInfo_2->Id == 16864 && spellInfo_1->Id == 37306 )
- return false;
-
- // Cat Energy (Feral T4 (2)) and Omen of Clarity
- if( spellInfo_1->Id == 16864 && spellInfo_2->Id == 37311 || spellInfo_2->Id == 16864 && spellInfo_1->Id == 37311 )
- return false;
- }
-
- // Leader of the Pack and Scroll of Stamina (multi-family check)
- if( spellInfo_1->Id == 24932 && spellInfo_2->SpellIconID == 312 && spellInfo_2->SpellVisual == 216 )
- return false;
-
- // Dragonmaw Illusion (multi-family check)
- if (spellId_1 == 42016 && spellId_2 == 40216 )
- return false;
-
- break;
- case SPELLFAMILY_ROGUE:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_ROGUE )
- {
- // Master of Subtlety
- if (spellId_1 == 31665 && spellId_2 == 31666 || spellId_1 == 31666 && spellId_2 == 31665 )
- return false;
- }
-
- // Garrote -> Garrote-Silence (multi-family check)
- if( spellInfo_1->SpellIconID == 498 && spellInfo_2->SpellIconID == 498 && spellInfo_2->SpellVisual == 0 )
- return false;
- break;
- case SPELLFAMILY_HUNTER:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_HUNTER )
- {
- // Rapid Fire & Quick Shots
- if( (spellInfo_1->SpellFamilyFlags & 0x20) && (spellInfo_2->SpellFamilyFlags & 0x20000000000LL) ||
- (spellInfo_2->SpellFamilyFlags & 0x20) && (spellInfo_1->SpellFamilyFlags & 0x20000000000LL) )
- return false;
-
- // Serpent Sting & (Immolation/Explosive Trap Effect)
- if( (spellInfo_1->SpellFamilyFlags & 0x4) && (spellInfo_2->SpellFamilyFlags & 0x00000004000LL) ||
- (spellInfo_2->SpellFamilyFlags & 0x4) && (spellInfo_1->SpellFamilyFlags & 0x00000004000LL) )
- return false;
-
- // Bestial Wrath
- if( spellInfo_1->SpellIconID == 1680 && spellInfo_2->SpellIconID == 1680 )
- return false;
- }
-
- // Wing Clip -> Improved Wing Clip (multi-family check)
- if( (spellInfo_1->SpellFamilyFlags & 0x40) && spellInfo_2->Id == 19229 )
- return false;
-
- // Concussive Shot and Imp. Concussive Shot (multi-family check)
- if( spellInfo_2->Id == 19410 && spellInfo_1->Id == 5116 )
- return false;
- break;
- case SPELLFAMILY_PALADIN:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_PALADIN )
- {
- // Paladin Seals
- if( IsSealSpell(spellInfo_1) && IsSealSpell(spellInfo_2) )
- return true;
- }
- // Combustion and Fire Protection Aura (multi-family check)
- if( spellInfo_2->Id == 11129 && spellInfo_1->SpellIconID == 33 && spellInfo_1->SpellVisual == 321 )
- return false;
-
- // *Sanctity Aura -> Unstable Currents and other (multi-family check)
- if( spellInfo_1->SpellIconID==502 && spellInfo_2->SpellFamilyName == SPELLFAMILY_GENERIC && spellInfo_2->SpellIconID==502 && spellInfo_2->SpellVisual==969 )
- return false;
-
- // *Seal of Command and Band of Eternal Champion (multi-family check)
- if( spellInfo_1->SpellIconID==561 && spellInfo_1->SpellVisual==7992 && spellId_2 == 35081)
- return false;
- break;
- case SPELLFAMILY_SHAMAN:
- if( spellInfo_2->SpellFamilyName == SPELLFAMILY_SHAMAN )
- {
- // shaman shields
- if( IsElementalShield(spellInfo_1) && IsElementalShield(spellInfo_2) )
- return true;
-
- // Windfury weapon
- if( spellInfo_1->SpellIconID==220 && spellInfo_2->SpellIconID==220 &&
- spellInfo_1->SpellFamilyFlags != spellInfo_2->SpellFamilyFlags )
- return false;
- }
- // Bloodlust and Bloodthirst (multi-family check)
- if( spellInfo_1->Id == 2825 && spellInfo_2->SpellIconID == 38 && spellInfo_2->SpellVisual == 0 )
- return false;
- break;
- default:
- break;
+ if(!spellInfo_1->SpellIconID
+ || spellInfo_1->SpellIconID != spellInfo_2->SpellIconID)
+ return false;
}
-
- if (IsRankSpellDueToSpell(spellInfo_1, spellId_2))
- return true;*/
-
- if (spellInfo_1->SpellIconID != spellInfo_2->SpellIconID
- || !spellInfo_1->SpellIconID)
- return false;
-
- if (spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName)
+ else if (spellInfo_1->SpellFamilyFlags != spellInfo_2->SpellFamilyFlags)
return false;
- for (int i = 0; i < 3; ++i)
- if (spellInfo_1->Effect[i] != spellInfo_2->Effect[i] ||
- spellInfo_1->EffectItemType[i] != spellInfo_2->EffectItemType[i] ||
- spellInfo_1->EffectMiscValue[i] != spellInfo_2->EffectMiscValue[i] ||
- spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i])
+ for(uint32 i = 0; i < 3; ++i)
+ if(spellInfo_1->Effect[i] != spellInfo_2->Effect[i]
+ || spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i])
return false;
return true;
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index 6b00240ac74..9757648e8d2 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -261,7 +261,8 @@ enum SpellSpecific
SPELL_JUDGEMENT = 13,
SPELL_BATTLE_ELIXIR = 14,
SPELL_GUARDIAN_ELIXIR = 15,
- SPELL_FLASK_ELIXIR = 16
+ SPELL_FLASK_ELIXIR = 16,
+ SPELL_WARLOCK_CORRUPTION= 17
};
SpellSpecific GetSpellSpecific(uint32 spellId);