Core/Spells: Fix SPELL_AURA_MOD_DAMAGE_PERCENT_DONE(79) to affect proper spellschools based on EffectMiscValue.
Author: Dr.Tenma Fixes issue #4019 Fixes issue #5059 --HG-- branch : trunk
This commit is contained in:
@@ -7716,10 +7716,6 @@ void Player::_ApplyWeaponDependentAuraMods(Item *item,WeaponAttackType attackTyp
|
||||
AuraEffectList const& auraDamageFlatList = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_DONE);
|
||||
for (AuraEffectList::const_iterator itr = auraDamageFlatList.begin(); itr != auraDamageFlatList.end(); ++itr)
|
||||
_ApplyWeaponDependentAuraDamageMod(item,attackType,*itr,apply);
|
||||
|
||||
AuraEffectList const& auraDamagePCTList = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
|
||||
for (AuraEffectList::const_iterator itr = auraDamagePCTList.begin(); itr != auraDamagePCTList.end(); ++itr)
|
||||
_ApplyWeaponDependentAuraDamageMod(item,attackType,*itr,apply);
|
||||
}
|
||||
|
||||
void Player::_ApplyWeaponDependentAuraCritMod(Item *item, WeaponAttackType attackType, AuraEffect const* aura, bool apply)
|
||||
@@ -7768,18 +7764,13 @@ void Player::_ApplyWeaponDependentAuraDamageMod(Item *item, WeaponAttackType att
|
||||
switch (aura->GetAuraType())
|
||||
{
|
||||
case SPELL_AURA_MOD_DAMAGE_DONE: unitModType = TOTAL_VALUE; break;
|
||||
case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE: unitModType = TOTAL_PCT; break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
if (!item->IsBroken()&&item->IsFitToSpellRequirements(aura->GetSpellProto()))
|
||||
{
|
||||
HandleStatModifier(unitMod, unitModType, float(aura->GetAmount()),apply);
|
||||
|
||||
if (unitModType == TOTAL_PCT)
|
||||
ApplyModSignedFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT,aura->GetAmount()/100.0f,apply);
|
||||
else
|
||||
ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS,aura->GetAmount(),apply);
|
||||
ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS,aura->GetAmount(),apply);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10322,12 +10322,16 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3
|
||||
if (GetTypeId() == TYPEID_UNIT && !this->ToCreature()->isPet())
|
||||
DoneTotalMod *= this->ToCreature()->GetSpellDamageMod(this->ToCreature()->GetCreatureInfo()->rank);
|
||||
|
||||
AuraEffectList const &mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
|
||||
for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
|
||||
if (((*i)->GetMiscValue() & GetSpellSchoolMask(spellProto)) &&
|
||||
(*i)->GetSpellProto()->EquippedItemClass == -1 && // -1 == any item class (not wand)
|
||||
(*i)->GetSpellProto()->EquippedItemInventoryTypeMask == 0) // 0 == any inventory type (not wand)
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
if (spellProto)
|
||||
{
|
||||
AuraEffectList const &mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
|
||||
for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
|
||||
if ((*i)->GetMiscValue() & GetSpellSchoolMask(spellProto))
|
||||
if (((*i)->GetSpellProto()->EquippedItemClass == -1) ||
|
||||
((*i)->GetSpellProto()->EquippedItemClass & spellProto->EquippedItemClass) &&
|
||||
((*i)->GetSpellProto()->EquippedItemSubClassMask & spellProto->EquippedItemSubClassMask))
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
}
|
||||
|
||||
uint32 creatureTypeMask = pVictim->GetCreatureTypeMask();
|
||||
// Add flat bonus from spell damage versus
|
||||
@@ -11612,18 +11616,33 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage, WeaponAttackType att
|
||||
float TakenTotalMod = 1.0f;
|
||||
|
||||
// ..done
|
||||
// SPELL_AURA_MOD_DAMAGE_PERCENT_DONE included in weapon damage
|
||||
// SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT included in weapon damage
|
||||
|
||||
// SPELL_AURA_MOD_DAMAGE_PERCENT_DONE for non-physical spells like Scourge Strike, Frost Strike, this is NOT included in weapon damage
|
||||
if (spellProto)
|
||||
if (GetSpellSchoolMask(spellProto) != SPELL_SCHOOL_MASK_NORMAL)
|
||||
AuraEffectList const &mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
|
||||
for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
|
||||
if (spellProto)
|
||||
{
|
||||
AuraEffectList const &mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
|
||||
for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i)
|
||||
if (((*i)->GetMiscValue() & GetSpellSchoolMask(spellProto)) && !((*i)->GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL))
|
||||
if ((*i)->GetMiscValue() & GetSpellSchoolMask(spellProto))
|
||||
if (((*i)->GetSpellProto()->EquippedItemClass == -1) ||
|
||||
((*i)->GetSpellProto()->EquippedItemClass & spellProto->EquippedItemClass) &&
|
||||
((*i)->GetSpellProto()->EquippedItemSubClassMask & spellProto->EquippedItemSubClassMask))
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
}
|
||||
else if (ToPlayer())
|
||||
{
|
||||
EquipmentSlots slot;
|
||||
|
||||
switch (attType)
|
||||
{
|
||||
case BASE_ATTACK: slot = EQUIPMENT_SLOT_MAINHAND; break;
|
||||
case OFF_ATTACK: slot = EQUIPMENT_SLOT_OFFHAND; break;
|
||||
case RANGED_ATTACK: slot = EQUIPMENT_SLOT_RANGED; break;
|
||||
default: return;
|
||||
}
|
||||
|
||||
Item * item = ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, slot);
|
||||
|
||||
if (item && !item->IsBroken() && item->IsFitToSpellRequirements((*i)->GetSpellProto()))
|
||||
AddPctN(DoneTotalMod, (*i)->GetAmount());
|
||||
}
|
||||
|
||||
AuraEffectList const &mDamageDoneVersus = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS);
|
||||
for (AuraEffectList::const_iterator i = mDamageDoneVersus.begin(); i != mDamageDoneVersus.end(); ++i)
|
||||
|
||||
Reference in New Issue
Block a user