Changeset 253 for trunk/src/game/SpellMgr.cpp
- Timestamp:
- 11/19/08 13:51:05 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/SpellMgr.cpp
r250 r253 99 99 return (spellInfo->Attributes & SPELL_ATTR_PASSIVE) != 0; 100 100 } 101 /*not used for now so commented out 101 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] || 110 111 spellInfo_1->EffectMiscValue[effIndex_1] != spellInfo_2->EffectMiscValue[effIndex_2] || 111 112 spellInfo_1->EffectApplyAuraName[effIndex_1] != spellInfo_2->EffectApplyAuraName[effIndex_2]) … … 113 114 114 115 return true; 115 } */116 } 116 117 117 118 int32 CompareAuraRanks(uint32 spellId_1, uint32 effIndex_1, uint32 spellId_2, uint32 effIndex_2) … … 244 245 case SPELL_CURSE: 245 246 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 {259 247 case SPELL_TRACKER: 260 248 case SPELL_WARLOCK_ARMOR: … … 262 250 case SPELL_ELEMENTAL_SHIELD: 263 251 case SPELL_MAGE_POLYMORPH: 252 case SPELL_POSITIVE_SHOUT: 253 case SPELL_JUDGEMENT: 254 case SPELL_WARLOCK_CORRUPTION: 264 255 return spellSpec1==spellSpec2; 265 256 case SPELL_BATTLE_ELIXIR: … … 1040 1031 } 1041 1032 1042 bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2, bool isFromTheSameCaster ) const 1043 { 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 1044 1038 SpellEntry const *spellInfo_1 = sSpellStore.LookupEntry(spellId_1); 1045 1039 SpellEntry const *spellInfo_2 = sSpellStore.LookupEntry(spellId_2); … … 1047 1041 if(!spellInfo_1 || !spellInfo_2) 1048 1042 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;1056 1043 1057 1044 if(spellInfo_1->SpellFamilyName != spellInfo_2->SpellFamilyName) … … 1064 1051 return false; 1065 1052 } 1066 1067 //if both elixirs are not battle/guardian/potions/flasks then always stack1068 else if ((spellInfo_1->SpellFamilyName == SPELLFAMILY_POTION)1069 &&(spellId_spec_1 || spellId_spec_2))1070 return false;1071 1072 1053 else if (spellInfo_1->SpellFamilyFlags != spellInfo_2->SpellFamilyFlags) 1073 1054 return false; 1074 1055 1075 1056 for(uint32 i = 0; i < 3; ++i) 1076 {1077 if(spellInfo_1->Effect[i] != spellInfo_2->Effect[i])1057 if(spellInfo_1->Effect[i] != spellInfo_2->Effect[i] 1058 || spellInfo_1->EffectApplyAuraName[i] != spellInfo_2->EffectApplyAuraName[i]) 1078 1059 return false; 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 } 1060 1104 1061 return true; 1105 1062 }