Core/Spells: Fixed SPELL_GROUP_STACK_RULE_EXCLUSIVE_SAME_EFFECT on several types of spell effects
closes #5961 Signed-off-by: Subv <[email protected]>
This commit is contained in:
@@ -4424,9 +4424,7 @@ float Unit::GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 misc_mask
|
||||
}
|
||||
// Add the highest of the Same Effect Stack Rule SpellGroups to the multiplier
|
||||
for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
|
||||
{
|
||||
AddPctN(multiplier, itr->second);
|
||||
}
|
||||
|
||||
return multiplier;
|
||||
}
|
||||
@@ -4461,27 +4459,39 @@ int32 Unit::GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 misc_
|
||||
|
||||
int32 Unit::GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
|
||||
{
|
||||
std::map<SpellGroup, int32> SameEffectSpellGroup;
|
||||
int32 modifier = 0;
|
||||
|
||||
AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
|
||||
for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetMiscValue() == misc_value)
|
||||
modifier += (*i)->GetAmount();
|
||||
if (!sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
|
||||
modifier += (*i)->GetAmount();
|
||||
}
|
||||
|
||||
for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
|
||||
modifier += itr->second;
|
||||
|
||||
return modifier;
|
||||
}
|
||||
|
||||
float Unit::GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 misc_value) const
|
||||
{
|
||||
std::map<SpellGroup, int32> SameEffectSpellGroup;
|
||||
float multiplier = 1.0f;
|
||||
|
||||
AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
|
||||
for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetMiscValue() == misc_value)
|
||||
AddPctN(multiplier, (*i)->GetAmount());
|
||||
if (!sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
|
||||
AddPctN(multiplier, (*i)->GetAmount());
|
||||
}
|
||||
|
||||
for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
|
||||
AddPctN(multiplier, itr->second);
|
||||
|
||||
return multiplier;
|
||||
}
|
||||
|
||||
@@ -4515,27 +4525,39 @@ int32 Unit::GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 misc_
|
||||
|
||||
int32 Unit::GetTotalAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const
|
||||
{
|
||||
std::map<SpellGroup, int32> SameEffectSpellGroup;
|
||||
int32 modifier = 0;
|
||||
|
||||
AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
|
||||
for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
if ((*i)->IsAffectedOnSpell(affectedSpell))
|
||||
modifier += (*i)->GetAmount();
|
||||
if (!sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
|
||||
modifier += (*i)->GetAmount();
|
||||
}
|
||||
|
||||
for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
|
||||
modifier += itr->second;
|
||||
|
||||
return modifier;
|
||||
}
|
||||
|
||||
float Unit::GetTotalAuraMultiplierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const
|
||||
{
|
||||
std::map<SpellGroup, int32> SameEffectSpellGroup;
|
||||
float multiplier = 1.0f;
|
||||
|
||||
AuraEffectList const& mTotalAuraList = GetAuraEffectsByType(auratype);
|
||||
for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
if ((*i)->IsAffectedOnSpell(affectedSpell))
|
||||
AddPctN(multiplier, (*i)->GetAmount());
|
||||
if (!sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
|
||||
AddPctN(multiplier, (*i)->GetAmount());
|
||||
}
|
||||
|
||||
for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
|
||||
AddPctN(multiplier, itr->second);
|
||||
|
||||
return multiplier;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user