Changeset 250 for trunk/src/game/SpellMgr.cpp
- Timestamp:
- 11/19/08 13:50:41 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/SpellMgr.cpp
r236 r250 99 99 return (spellInfo->Attributes & SPELL_ATTR_PASSIVE) != 0; 100 100 } 101 101 /*not used for now so commented out 102 102 bool IsNoStackAuraDueToAura(uint32 spellId_1, uint32 effIndex_1, uint32 spellId_2, uint32 effIndex_2) 103 103 { … … 108 108 109 109 if (spellInfo_1->Effect[effIndex_1] != spellInfo_2->Effect[effIndex_2] || 110 spellInfo_1->EffectItemType[effIndex_1] != spellInfo_2->EffectItemType[effIndex_2] ||111 110 spellInfo_1->EffectMiscValue[effIndex_1] != spellInfo_2->EffectMiscValue[effIndex_2] || 112 111 spellInfo_1->EffectApplyAuraName[effIndex_1] != spellInfo_2->EffectApplyAuraName[effIndex_2]) … … 114 113 115 114 return true; 116 } 115 }*/ 117 116 118 117 int32 CompareAuraRanks(uint32 spellId_1, uint32 effIndex_1, uint32 spellId_2, uint32 effIndex_2) … … 245 244 case SPELL_CURSE: 246 245 case SPELL_ASPECT: 246 case SPELL_POSITIVE_SHOUT: 247 case SPELL_JUDGEMENT: 248 case SPELL_WARLOCK_CORRUPTION: 249 return spellSpec1==spellSpec2; 250 default: 251 return false; 252 } 253 } 254 255 bool IsSingleFromSpellSpecificPerTarget(uint32 spellSpec1,uint32 spellSpec2) 256 { 257 switch(spellSpec1) 258 { 247 259 case SPELL_TRACKER: 248 260 case SPELL_WARLOCK_ARMOR: … … 250 262 case SPELL_ELEMENTAL_SHIELD: 251 263 case SPELL_MAGE_POLYMORPH: 252 case SPELL_POSITIVE_SHOUT:253 case SPELL_JUDGEMENT:254 case SPELL_WARLOCK_CORRUPTION:255 264 return spellSpec1==spellSpec2; 256 265 case SPELL_BATTLE_ELIXIR: … … 1031 1040 } 1032 1041 1033 bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) const 1034 { 1035 if(spellId_1 == spellId_2) // auras due to the same spell 1036 return false; 1037 1042 bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2, bool isFromTheSameCaster ) const 1043 { 1038 1044 SpellEntry const *spellInfo_1 = sSpellStore.LookupEntry(spellId_1); 1039 1045 SpellEntry const *spellInfo_2 = sSpellStore.LookupEntry(spellId_2); … … 1041 1047 if(!spellInfo_1 || !spellInfo_2) 1042 1048 return false; 1049 1050 SpellSpecific spellId_spec_1 = GetSpellSpecific(spellId_1); 1051 SpellSpecific spellId_spec_2 = GetSpellSpecific(spellId_2); 1052 if (spellId_spec_1 && spellId_spec_2) 1053 if (IsSingleFromSpellSpecificPerTarget(spellId_spec_1,spellId_spec_2) 1054 || (IsSingleFromSpellSpecificPerCaster(spellId_spec_1,spellId_spec_2) && isFromTheSameCaster)) 1055 return true; 1043 1056 1044 1057 if(spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName) … … 1051 1064 return false; 1052 1065 } 1066 1067 //if both elixirs are not battle/guardian/potions/flasks then always stack 1068 else if ((spellInfo_1->SpellFamilyName == SPELLFAMILY_POTION) 1069 &&(spellId_spec_1 || spellId_spec_2)) 1070 return false; 1071 1053 1072 else if (spellInfo_1->SpellFamilyFlags != spellInfo_2->SpellFamilyFlags) 1054 1073 return false; 1055 1074 1056 1075 for(uint32 i = 0; i < 3; ++i) 1057 if(spellInfo_1->Effect[i] != spellInfo_2->Effect[i]1058 || spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i])1076 { 1077 if(spellInfo_1->Effect[i] != spellInfo_2->Effect[i]) 1059 1078 return false; 1060 1079 if (spellInfo_1->EffectApplyAuraName[i] || spellInfo_2->EffectApplyAuraName[i]) 1080 { 1081 if(spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i] 1082 || spellInfo_1->EffectMiscValue[i] != spellInfo_2->EffectMiscValue[i]) 1083 // need itemtype check? need to find an example 1084 return false; 1085 else if (!isFromTheSameCaster) 1086 switch(spellInfo_1->EffectApplyAuraName[i]) 1087 { 1088 //spells with these auras from different casters will stack 1089 case SPELL_AURA_PERIODIC_DAMAGE: 1090 case SPELL_AURA_PERIODIC_HEAL: 1091 case SPELL_AURA_PERIODIC_TRIGGER_SPELL: 1092 case SPELL_AURA_PERIODIC_ENERGIZE: 1093 case SPELL_AURA_PERIODIC_MANA_LEECH: 1094 case SPELL_AURA_PERIODIC_LEECH: 1095 //exception for shaman positive totems with these auras 1096 if ((spellInfo_1->SpellFamilyName != SPELLFAMILY_SHAMAN) 1097 ||(spellInfo_1->Effect[i]!=SPELL_AURA_MOD_INCREASE_ENERGY)) 1098 return false; 1099 default: 1100 break; 1101 } 1102 } 1103 } 1061 1104 return true; 1062 1105 }