diff options
-rw-r--r-- | src/game/SpellMgr.cpp | 353 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 3 |
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); |