mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 17:27:36 +01:00
*Aura Consolidation + MaxModifier. By Authorius, modified by Deafboy and thenecromancer, adapted by Muhaha.
--HG-- branch : trunk
This commit is contained in:
@@ -1209,7 +1209,7 @@ void Unit::DealFlatDamage(Unit *pVictim, SpellEntry const *spellInfo, uint32 *da
|
||||
AuraList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS);
|
||||
for(AuraList::const_iterator i = mDamageDoneVersus.begin();i != mDamageDoneVersus.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
bonusDmg = uint32(bonusDmg * ((*i)->GetModifier()->m_amount+100.0f)/100.0f);
|
||||
bonusDmg = uint32(bonusDmg * ((*i)->GetModifierValue()+100.0f)/100.0f);
|
||||
|
||||
*damage += bonusDmg;
|
||||
|
||||
@@ -2464,7 +2464,7 @@ void Unit::DoAttackDamage (Unit *pVictim, uint32 *damage, CleanDamage *cleanDama
|
||||
AuraList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS);
|
||||
for(AuraList::const_iterator i = mDamageDoneVersus.begin();i != mDamageDoneVersus.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
crit_bonus = uint32(crit_bonus * ((*i)->GetModifier()->m_amount+100.0f)/100.0f);
|
||||
crit_bonus = uint32(crit_bonus * ((*i)->GetModifierValue()+100.0f)/100.0f);
|
||||
}
|
||||
|
||||
*damage += crit_bonus;
|
||||
@@ -2742,9 +2742,7 @@ void Unit::DoAttackDamage (Unit *pVictim, uint32 *damage, CleanDamage *cleanDama
|
||||
}
|
||||
}
|
||||
|
||||
CastMeleeProcDamageAndSpell(pVictim, (*damage - *absorbDamage - *resistDamage - *blocked_amount), damageSchoolMask, attType, outcome, spellCasted, isTriggeredSpell);
|
||||
|
||||
// victim's damage shield
|
||||
CastMeleeProcDamageAndSpell(pVictim, (*damage - *absorbDamage pVictim->SpellNonMeleeDamageLog(this, (*i)->GetId(), (*i)->GetModifier()->m_amount, false, false);eld
|
||||
// yet another hack to fix crashes related to the aura getting removed during iteration
|
||||
std::set<Aura*> alreadyDone;
|
||||
uint32 removedAuras = pVictim->m_removedAuras;
|
||||
@@ -2755,7 +2753,7 @@ void Unit::DoAttackDamage (Unit *pVictim, uint32 *damage, CleanDamage *cleanDama
|
||||
if (alreadyDone.find(*i) == alreadyDone.end())
|
||||
{
|
||||
alreadyDone.insert(*i);
|
||||
pVictim->SpellNonMeleeDamageLog(this, (*i)->GetId(), (*i)->GetModifier()->m_amount, false, false);
|
||||
pVictim->SpellNonMeleeDamageLog(this, (*i)->GetId(), (*i)->GetModifierValue(), false, false);
|
||||
if (pVictim->m_removedAuras > removedAuras)
|
||||
{
|
||||
removedAuras = pVictim->m_removedAuras;
|
||||
@@ -3407,7 +3405,7 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool
|
||||
Unit::AuraList const& mReflectSpellsSchool = pVictim->GetAurasByType(SPELL_AURA_REFLECT_SPELLS_SCHOOL);
|
||||
for(Unit::AuraList::const_iterator i = mReflectSpellsSchool.begin(); i != mReflectSpellsSchool.end(); ++i)
|
||||
if((*i)->GetModifier()->m_miscvalue & GetSpellSchoolMask(spell))
|
||||
reflectchance += (*i)->GetModifier()->m_amount;
|
||||
reflectchance = (*i)->GetModifierValue();
|
||||
if (reflectchance > 0 && roll_chance_i(reflectchance))
|
||||
{
|
||||
// Start triggers for remove charges if need (trigger only for victim, and mark as active spell)
|
||||
@@ -4016,7 +4014,7 @@ int32 Unit::GetTotalAuraModifier(AuraType auratype) const
|
||||
|
||||
AuraList const& mTotalAuraList = GetAurasByType(auratype);
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
modifier += (*i)->GetModifier()->m_amount;
|
||||
modifier += (*i)->GetModifierValue();
|
||||
|
||||
return modifier;
|
||||
}
|
||||
@@ -4027,7 +4025,7 @@ float Unit::GetTotalAuraMultiplier(AuraType auratype) const
|
||||
|
||||
AuraList const& mTotalAuraList = GetAurasByType(auratype);
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
multiplier *= (100.0f + (*i)->GetModifier()->m_amount)/100.0f;
|
||||
multiplier *= (100.0f + (*i)->GetModifierValue())/100.0f;
|
||||
|
||||
return multiplier;
|
||||
}
|
||||
@@ -4038,8 +4036,11 @@ int32 Unit::GetMaxPositiveAuraModifier(AuraType auratype) const
|
||||
|
||||
AuraList const& mTotalAuraList = GetAurasByType(auratype);
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
if ((*i)->GetModifier()->m_amount > modifier)
|
||||
modifier = (*i)->GetModifier()->m_amount;
|
||||
{
|
||||
int32 amount = (*i)->GetModifierValue();
|
||||
if (amount > modifier)
|
||||
modifier = amount;
|
||||
}
|
||||
|
||||
return modifier;
|
||||
}
|
||||
@@ -4050,8 +4051,11 @@ int32 Unit::GetMaxNegativeAuraModifier(AuraType auratype) const
|
||||
|
||||
AuraList const& mTotalAuraList = GetAurasByType(auratype);
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
if ((*i)->GetModifier()->m_amount < modifier)
|
||||
modifier = (*i)->GetModifier()->m_amount;
|
||||
{
|
||||
int32 amount = (*i)->GetModifierValue();
|
||||
if (amount < modifier)
|
||||
modifier = amount;
|
||||
}
|
||||
|
||||
return modifier;
|
||||
}
|
||||
@@ -4065,7 +4069,7 @@ int32 Unit::GetTotalAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask)
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue & misc_mask)
|
||||
modifier += mod->m_amount;
|
||||
modifier += (*i)->GetModifierValue();
|
||||
}
|
||||
return modifier;
|
||||
}
|
||||
@@ -4079,7 +4083,7 @@ float Unit::GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 misc_mask
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue & misc_mask)
|
||||
multiplier *= (100.0f + mod->m_amount)/100.0f;
|
||||
multiplier *= (100.0f + (*i)->GetModifierValue())/100.0f;
|
||||
}
|
||||
return multiplier;
|
||||
}
|
||||
@@ -4092,8 +4096,9 @@ int32 Unit::GetMaxPositiveAuraModifierByMiscMask(AuraType auratype, uint32 misc_
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue & misc_mask && mod->m_amount > modifier)
|
||||
modifier = mod->m_amount;
|
||||
int32 amount = (*i)->GetModifierValue();
|
||||
if (mod->m_miscvalue & misc_mask && amount > modifier)
|
||||
modifier = amount;
|
||||
}
|
||||
|
||||
return modifier;
|
||||
@@ -4107,8 +4112,9 @@ int32 Unit::GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 misc_
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue & misc_mask && mod->m_amount < modifier)
|
||||
modifier = mod->m_amount;
|
||||
int32 amount = (*i)->GetModifierValue();
|
||||
if (mod->m_miscvalue & misc_mask && amount < modifier)
|
||||
modifier = amount;
|
||||
}
|
||||
|
||||
return modifier;
|
||||
@@ -4123,7 +4129,7 @@ int32 Unit::GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value)
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue == misc_value)
|
||||
modifier += mod->m_amount;
|
||||
modifier += (*i)->GetModifierValue();
|
||||
}
|
||||
return modifier;
|
||||
}
|
||||
@@ -4137,7 +4143,7 @@ float Unit::GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 misc_valu
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue == misc_value)
|
||||
multiplier *= (100.0f + mod->m_amount)/100.0f;
|
||||
multiplier *= (100.0f + (*i)->GetModifierValue())/100.0f;
|
||||
}
|
||||
return multiplier;
|
||||
}
|
||||
@@ -4150,8 +4156,9 @@ int32 Unit::GetMaxPositiveAuraModifierByMiscValue(AuraType auratype, int32 misc_
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue == misc_value && mod->m_amount > modifier)
|
||||
modifier = mod->m_amount;
|
||||
int32 amount = (*i)->GetModifierValue();
|
||||
if (mod->m_miscvalue == misc_value && amount > modifier)
|
||||
modifier = amount;
|
||||
}
|
||||
|
||||
return modifier;
|
||||
@@ -4165,8 +4172,9 @@ int32 Unit::GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 misc_
|
||||
for(AuraList::const_iterator i = mTotalAuraList.begin();i != mTotalAuraList.end(); ++i)
|
||||
{
|
||||
Modifier* mod = (*i)->GetModifier();
|
||||
if (mod->m_miscvalue == misc_value && mod->m_amount < modifier)
|
||||
modifier = mod->m_amount;
|
||||
int32 amount = (*i)->GetModifierValue();
|
||||
if (mod->m_miscvalue == misc_value && amount < modifier)
|
||||
modifier = amount;
|
||||
}
|
||||
|
||||
return modifier;
|
||||
@@ -4205,8 +4213,10 @@ bool Unit::AddAura(Aura *Aur)
|
||||
// replace aura if next will > spell StackAmount
|
||||
if(aurSpellInfo->StackAmount)
|
||||
{
|
||||
if(m_Auras.count(spair) >= aurSpellInfo->StackAmount)
|
||||
RemoveAura(i,AURA_REMOVE_BY_STACK);
|
||||
Aur->SetStackAmount(i->second->GetStackAmount());
|
||||
if(Aur->GetStackAmount() < aurSpellInfo->StackAmount)
|
||||
Aur->SetStackAmount(Aur->GetStackAmount()+1);
|
||||
RemoveAura(i,AURA_REMOVE_BY_STACK);
|
||||
}
|
||||
// if StackAmount==0 not allow auras from same caster
|
||||
else
|
||||
@@ -4562,11 +4572,48 @@ void Unit::RemoveAurasWithDispelType( DispelType type )
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::RemoveSingleAuraFromStackByDispel(uint32 spellId)
|
||||
{
|
||||
for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); )
|
||||
{
|
||||
Aura *aur = iter->second;
|
||||
if (aur->GetId() == spellId)
|
||||
{
|
||||
if(iter->second->GetStackAmount() > 1)
|
||||
{
|
||||
// reapply modifier with reduced stack amount
|
||||
iter->second->ApplyModifier(false,true);
|
||||
iter->second->SetStackAmount(iter->second->GetStackAmount()-1);
|
||||
iter->second->ApplyModifier(true,true);
|
||||
|
||||
iter->second->UpdateSlotCounterAndDuration();
|
||||
return; // not remove aura if stack amount > 1
|
||||
}
|
||||
else
|
||||
RemoveAura(iter,AURA_REMOVE_BY_DISPEL);
|
||||
}
|
||||
else
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::RemoveSingleAuraFromStack(uint32 spellId, uint32 effindex)
|
||||
{
|
||||
AuraMap::iterator iter = m_Auras.find(spellEffectPair(spellId, effindex));
|
||||
if(iter != m_Auras.end())
|
||||
{
|
||||
if(iter->second->GetStackAmount() > 1)
|
||||
{
|
||||
// reapply modifier with reduced stack amount
|
||||
iter->second->ApplyModifier(false,true);
|
||||
iter->second->SetStackAmount(iter->second->GetStackAmount()-1);
|
||||
iter->second->ApplyModifier(true,true);
|
||||
|
||||
iter->second->UpdateSlotCounterAndDuration();
|
||||
return; // not remove aura if stack amount > 1
|
||||
}
|
||||
RemoveAura(iter);
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::RemoveAurasDueToSpell(uint32 spellId, Aura* except)
|
||||
@@ -4693,6 +4740,9 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode)
|
||||
sLog.outDebug("Aura %u now is remove mode %d",Aur->GetModifier()->m_auraname, mode);
|
||||
assert(!Aur->IsInUse());
|
||||
Aur->ApplyModifier(false,true);
|
||||
|
||||
Aur->SetStackAmount(0);
|
||||
|
||||
Aur->_RemoveAura();
|
||||
delete Aur;
|
||||
|
||||
@@ -6751,14 +6801,12 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
||||
((Player*)this)->AddSpellCooldown(37657,0,time(NULL)+(roll_chance_i(50) ? 2 : 3));
|
||||
|
||||
// counting
|
||||
uint32 count = 0;
|
||||
AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY);
|
||||
for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr)
|
||||
if((*itr)->GetId()==37658)
|
||||
++count;
|
||||
Aura * dummy = GetDummyAura(37658);
|
||||
if (!dummy)
|
||||
return false;
|
||||
|
||||
// release at 3 aura in stack
|
||||
if(count <= 2)
|
||||
if(dummy->GetStackAmount() <= 2)
|
||||
return true; // main triggered spell casted anyway
|
||||
|
||||
RemoveAurasDueToSpell(37658);
|
||||
@@ -7508,13 +7556,11 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
||||
// stacking
|
||||
CastSpell(this, 37658, true, NULL, triggeredByAura);
|
||||
// counting
|
||||
uint32 count = 0;
|
||||
AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY);
|
||||
for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr)
|
||||
if((*itr)->GetId()==37658)
|
||||
++count;
|
||||
Aura * dummy = GetDummyAura(37658);
|
||||
if (!dummy)
|
||||
return false;
|
||||
// release at 3 aura in stack (cont contain in basepoint of trigger aura)
|
||||
if(count < triggerAmount)
|
||||
if(dummy->GetStackAmount() <= 2)
|
||||
return false;
|
||||
|
||||
RemoveAurasDueToSpell(37658);
|
||||
@@ -8583,7 +8629,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
|
||||
(*i)->GetSpellProto()->EquippedItemInventoryTypeMask == 0 )
|
||||
// 0 == any inventory type (not wand then)
|
||||
{
|
||||
DoneTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
DoneTotalMod *= ((*i)->GetModifierValue() +100.0f)/100.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8591,13 +8637,13 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
|
||||
AuraList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS);
|
||||
for(AuraList::const_iterator i = mDamageDoneVersus.begin();i != mDamageDoneVersus.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
DoneTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
DoneTotalMod *= ((*i)->GetModifierValue() +100.0f)/100.0f;
|
||||
|
||||
// ..taken
|
||||
AuraList const& mModDamagePercentTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN);
|
||||
for(AuraList::const_iterator i = mModDamagePercentTaken.begin(); i != mModDamagePercentTaken.end(); ++i)
|
||||
if( (*i)->GetModifier()->m_miscvalue & GetSpellSchoolMask(spellProto) )
|
||||
TakenTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
TakenTotalMod *= ((*i)->GetModifierValue() +100.0f)/100.0f;
|
||||
|
||||
// .. taken pct: scripted (increases damage of * against targets *)
|
||||
AuraList const& mOverrideClassScript = GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS);
|
||||
@@ -8778,7 +8824,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
|
||||
// Seal of Vengeance - 17% per Fully Stacked Tick - 5 Applications
|
||||
else if ((spellProto->SpellFamilyFlags & 0x80000000000LL) && spellProto->SpellIconID == 2292)
|
||||
{
|
||||
DotFactor = 0.17f;
|
||||
DotFactor = 0.85f;
|
||||
CastingTime = 3500;
|
||||
}
|
||||
// Holy shield - 5% of Holy Damage
|
||||
@@ -8910,7 +8956,7 @@ int32 Unit::SpellBaseDamageBonus(SpellSchoolMask schoolMask)
|
||||
// -1 == any item class (not wand then)
|
||||
(*i)->GetSpellProto()->EquippedItemInventoryTypeMask == 0 )
|
||||
// 0 == any inventory type (not wand then)
|
||||
DoneAdvertisedBenefit += (*i)->GetModifier()->m_amount;
|
||||
DoneAdvertisedBenefit += (*i)->GetModifierValue();
|
||||
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
@@ -8928,14 +8974,14 @@ int32 Unit::SpellBaseDamageBonus(SpellSchoolMask schoolMask)
|
||||
if(eff < 2 && iSpellProto->EffectApplyAuraName[eff+1]==SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT)
|
||||
usedStat = Stats(iSpellProto->EffectMiscValue[eff+1]);
|
||||
|
||||
DoneAdvertisedBenefit += int32(GetStat(usedStat) * (*i)->GetModifier()->m_amount / 100.0f);
|
||||
DoneAdvertisedBenefit += int32(GetStat(usedStat) * (*i)->GetModifierValue() / 100.0f);
|
||||
}
|
||||
}
|
||||
// ... and attack power
|
||||
AuraList const& mDamageDonebyAP = GetAurasByType(SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER);
|
||||
for(AuraList::const_iterator i =mDamageDonebyAP.begin();i != mDamageDonebyAP.end(); ++i)
|
||||
if ((*i)->GetModifier()->m_miscvalue & schoolMask)
|
||||
DoneAdvertisedBenefit += int32(GetTotalAttackPowerValue(BASE_ATTACK) * (*i)->GetModifier()->m_amount / 100.0f);
|
||||
DoneAdvertisedBenefit += int32(GetTotalAttackPowerValue(BASE_ATTACK) * (*i)->GetModifierValue() / 100.0f);
|
||||
|
||||
}
|
||||
return DoneAdvertisedBenefit;
|
||||
@@ -8950,13 +8996,13 @@ int32 Unit::SpellBaseDamageBonusForVictim(SpellSchoolMask schoolMask, Unit *pVic
|
||||
AuraList const& mDamageDoneCreature = GetAurasByType(SPELL_AURA_MOD_DAMAGE_DONE_CREATURE);
|
||||
for(AuraList::const_iterator i = mDamageDoneCreature.begin();i != mDamageDoneCreature.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
TakenAdvertisedBenefit += (*i)->GetModifier()->m_amount;
|
||||
TakenAdvertisedBenefit += (*i)->GetModifierValue();
|
||||
|
||||
// ..taken
|
||||
AuraList const& mDamageTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_DAMAGE_TAKEN);
|
||||
for(AuraList::const_iterator i = mDamageTaken.begin();i != mDamageTaken.end(); ++i)
|
||||
if(((*i)->GetModifier()->m_miscvalue & schoolMask) != 0)
|
||||
TakenAdvertisedBenefit += (*i)->GetModifier()->m_amount;
|
||||
TakenAdvertisedBenefit += (*i)->GetModifierValue();
|
||||
|
||||
return TakenAdvertisedBenefit;
|
||||
}
|
||||
@@ -9224,7 +9270,7 @@ uint32 Unit::SpellHealingBonus(SpellEntry const *spellProto, uint32 healamount,
|
||||
// Healing done percent
|
||||
AuraList const& mHealingDonePct = GetAurasByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
|
||||
for(AuraList::const_iterator i = mHealingDonePct.begin();i != mHealingDonePct.end(); ++i)
|
||||
heal *= (100.0f + (*i)->GetModifier()->m_amount) / 100.0f;
|
||||
heal *= (100.0f + (*i)->GetModifierValue()) / 100.0f;
|
||||
|
||||
// apply spellmod to Done amount
|
||||
if(Player* modOwner = GetSpellModOwner())
|
||||
@@ -9265,7 +9311,7 @@ int32 Unit::SpellBaseHealingBonus(SpellSchoolMask schoolMask)
|
||||
AuraList const& mHealingDone = GetAurasByType(SPELL_AURA_MOD_HEALING_DONE);
|
||||
for(AuraList::const_iterator i = mHealingDone.begin();i != mHealingDone.end(); ++i)
|
||||
if(((*i)->GetModifier()->m_miscvalue & schoolMask) != 0)
|
||||
AdvertisedBenefit += (*i)->GetModifier()->m_amount;
|
||||
AdvertisedBenefit += (*i)->GetModifierValue();
|
||||
|
||||
// Healing bonus of spirit, intellect and strength
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
@@ -9276,14 +9322,14 @@ int32 Unit::SpellBaseHealingBonus(SpellSchoolMask schoolMask)
|
||||
{
|
||||
// stat used dependent from misc value (stat index)
|
||||
Stats usedStat = Stats((*i)->GetSpellProto()->EffectMiscValue[(*i)->GetEffIndex()]);
|
||||
AdvertisedBenefit += int32(GetStat(usedStat) * (*i)->GetModifier()->m_amount / 100.0f);
|
||||
AdvertisedBenefit += int32(GetStat(usedStat) * (*i)->GetModifierValue() / 100.0f);
|
||||
}
|
||||
|
||||
// ... and attack power
|
||||
AuraList const& mHealingDonebyAP = GetAurasByType(SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER);
|
||||
for(AuraList::const_iterator i = mHealingDonebyAP.begin();i != mHealingDonebyAP.end(); ++i)
|
||||
if ((*i)->GetModifier()->m_miscvalue & schoolMask)
|
||||
AdvertisedBenefit += int32(GetTotalAttackPowerValue(BASE_ATTACK) * (*i)->GetModifier()->m_amount / 100.0f);
|
||||
AdvertisedBenefit += int32(GetTotalAttackPowerValue(BASE_ATTACK) * (*i)->GetModifierValue() / 100.0f);
|
||||
}
|
||||
return AdvertisedBenefit;
|
||||
}
|
||||
@@ -9294,7 +9340,7 @@ int32 Unit::SpellBaseHealingBonusForVictim(SpellSchoolMask schoolMask, Unit *pVi
|
||||
AuraList const& mDamageTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_HEALING);
|
||||
for(AuraList::const_iterator i = mDamageTaken.begin();i != mDamageTaken.end(); ++i)
|
||||
if(((*i)->GetModifier()->m_miscvalue & schoolMask) != 0)
|
||||
AdvertisedBenefit += (*i)->GetModifier()->m_amount;
|
||||
AdvertisedBenefit += (*i)->GetModifierValue();
|
||||
return AdvertisedBenefit;
|
||||
}
|
||||
|
||||
@@ -9403,7 +9449,7 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attT
|
||||
AuraList const& mDamageDoneCreature = GetAurasByType(SPELL_AURA_MOD_DAMAGE_DONE_CREATURE);
|
||||
for(AuraList::const_iterator i = mDamageDoneCreature.begin();i != mDamageDoneCreature.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
DoneFlatBenefit += (*i)->GetModifier()->m_amount;
|
||||
DoneFlatBenefit += (*i)->GetModifierValue();
|
||||
|
||||
// ..done
|
||||
// SPELL_AURA_MOD_DAMAGE_DONE included in weapon damage
|
||||
@@ -9418,7 +9464,7 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attT
|
||||
AuraList const& mCreatureAttackPower = GetAurasByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS);
|
||||
for(AuraList::const_iterator i = mCreatureAttackPower.begin();i != mCreatureAttackPower.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
APbonus += (*i)->GetModifier()->m_amount;
|
||||
APbonus += (*i)->GetModifierValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -9428,7 +9474,7 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attT
|
||||
AuraList const& mCreatureAttackPower = GetAurasByType(SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS);
|
||||
for(AuraList::const_iterator i = mCreatureAttackPower.begin();i != mCreatureAttackPower.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
APbonus += (*i)->GetModifier()->m_amount;
|
||||
APbonus += (*i)->GetModifierValue();
|
||||
}
|
||||
|
||||
if (APbonus!=0) // Can be negative
|
||||
@@ -9453,7 +9499,7 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attT
|
||||
AuraList const& mDamageTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_DAMAGE_TAKEN);
|
||||
for(AuraList::const_iterator i = mDamageTaken.begin();i != mDamageTaken.end(); ++i)
|
||||
if((*i)->GetModifier()->m_miscvalue & GetMeleeDamageSchoolMask())
|
||||
TakenFlatBenefit += (*i)->GetModifier()->m_amount;
|
||||
TakenFlatBenefit += (*i)->GetModifierValue();
|
||||
|
||||
if(attType!=RANGED_ATTACK)
|
||||
TakenFlatBenefit += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN);
|
||||
@@ -9471,13 +9517,13 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attT
|
||||
AuraList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS);
|
||||
for(AuraList::const_iterator i = mDamageDoneVersus.begin();i != mDamageDoneVersus.end(); ++i)
|
||||
if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue))
|
||||
DoneTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
DoneTotalMod *= ((*i)->GetModifierValue()+100.0f)/100.0f;
|
||||
|
||||
// ..taken
|
||||
AuraList const& mModDamagePercentTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN);
|
||||
for(AuraList::const_iterator i = mModDamagePercentTaken.begin(); i != mModDamagePercentTaken.end(); ++i)
|
||||
if((*i)->GetModifier()->m_miscvalue & GetMeleeDamageSchoolMask())
|
||||
TakenTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
TakenTotalMod *= ((*i)->GetModifierValue()+100.0f)/100.0f;
|
||||
|
||||
// .. taken pct: dummy auras
|
||||
AuraList const& mDummyAuras = pVictim->GetAurasByType(SPELL_AURA_DUMMY);
|
||||
@@ -9535,13 +9581,13 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attT
|
||||
{
|
||||
AuraList const& mModMeleeDamageTakenPercent = pVictim->GetAurasByType(SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT);
|
||||
for(AuraList::const_iterator i = mModMeleeDamageTakenPercent.begin(); i != mModMeleeDamageTakenPercent.end(); ++i)
|
||||
TakenTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
TakenTotalMod *= ((*i)->GetModifierValue()+100.0f)/100.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
AuraList const& mModRangedDamageTakenPercent = pVictim->GetAurasByType(SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN_PCT);
|
||||
for(AuraList::const_iterator i = mModRangedDamageTakenPercent.begin(); i != mModRangedDamageTakenPercent.end(); ++i)
|
||||
TakenTotalMod *= ((*i)->GetModifier()->m_amount+100.0f)/100.0f;
|
||||
TakenTotalMod *= ((*i)->GetModifierValue()+100.0f)/100.0f;
|
||||
}
|
||||
|
||||
float tmpDamage = float(int32(*pdamage) + DoneFlatBenefit) * DoneTotalMod;
|
||||
|
||||
Reference in New Issue
Block a user