diff options
Diffstat (limited to 'src/server')
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 30 | ||||
| -rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 25 | 
2 files changed, 27 insertions, 28 deletions
| diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index cc23879c6cc..625073d461c 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10393,17 +10393,12 @@ uint32 Unit::SpellDamageBonus(Unit* victim, SpellInfo const* spellProto, uint32      AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);      for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i) -        if ((*i)->GetMiscValue() & spellProto->GetSchoolMask()) +        if ((*i)->GetMiscValue() & spellProto->GetSchoolMask() && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_NORMAL))          {              if ((*i)->GetSpellInfo()->EquippedItemClass == -1)                  AddPctN(DoneTotalMod, (*i)->GetAmount()); -            else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK)) -            { -                if ((*i)->GetSpellInfo()->EquippedItemClass & spellProto->EquippedItemClass) -                    if (((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0) || -                        ((*i)->GetSpellInfo()->EquippedItemSubClassMask & spellProto->EquippedItemSubClassMask)) -                        AddPctN(DoneTotalMod, (*i)->GetAmount()); -            } +            else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) +                AddPctN(DoneTotalMod, (*i)->GetAmount());              else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo()))                  AddPctN(DoneTotalMod, (*i)->GetAmount());          } @@ -11762,27 +11757,14 @@ void Unit::MeleeDamageBonus(Unit* victim, uint32 *pdamage, WeaponAttackType attT      {          if (spellProto)          { -            if ((*i)->GetMiscValue() & spellProto->GetSchoolMask()) +            if ((*i)->GetMiscValue() & spellProto->GetSchoolMask() && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_NORMAL))              {                  if ((*i)->GetSpellInfo()->EquippedItemClass == -1)                      AddPctN(DoneTotalMod, (*i)->GetAmount()); -                else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK)) -                { -                    if ((*i)->GetSpellInfo()->EquippedItemClass & spellProto->EquippedItemClass) -                        if (((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0) || -                            ((*i)->GetSpellInfo()->EquippedItemSubClassMask & spellProto->EquippedItemSubClassMask)) -                            AddPctN(DoneTotalMod, (*i)->GetAmount()); -                } +                else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) +                    AddPctN(DoneTotalMod, (*i)->GetAmount());                  else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo()))                      AddPctN(DoneTotalMod, (*i)->GetAmount()); -                } -        } -        else -        { -            if ((*i)->GetMiscValue() & GetMeleeDamageSchoolMask() && -                (*i)->GetSpellInfo()->EquippedItemClass == -1) -            { -                AddPctN(DoneTotalMod, (*i)->GetAmount());              }          }      } diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 899034db369..d6a3ef5ff50 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -4500,13 +4500,30 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8      if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT)))          return; -    Player* target = aurApp->GetTarget()->ToPlayer(); +    Unit* target = aurApp->GetTarget();      if (!target)          return; -    for(int i = 0; i < MAX_ATTACK; ++i) -        if(Item* item = target->GetWeaponForAttack(WeaponAttackType(i),false)) -            target->_ApplyWeaponDependentAuraDamageMod(item, WeaponAttackType(i), this, apply); +    if (target->GetTypeId() == TYPEID_PLAYER) +    { +        for(int i = 0; i < MAX_ATTACK; ++i) +            if(Item* item = target->ToPlayer()->GetWeaponForAttack(WeaponAttackType(i),false)) +                target->ToPlayer()->_ApplyWeaponDependentAuraDamageMod(item, WeaponAttackType(i), this, apply); +    } + +    if ((GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) && (GetSpellInfo()->EquippedItemClass == -1 || target->GetTypeId() != TYPEID_PLAYER)) +    { +        target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND,         TOTAL_PCT, float (GetAmount()), apply); +        target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND,          TOTAL_PCT, float (GetAmount()), apply); +        target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED,           TOTAL_PCT, float (GetAmount()), apply); + +        if (target->GetTypeId() == TYPEID_PLAYER) +            target->ToPlayer()->ApplyModSignedFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, GetAmount() / 100.0f, apply); +    } +    else +    { +        // done in Player::_ApplyWeaponDependentAuraMods for !SPELL_SCHOOL_MASK_NORMAL and also for wand case +    }  }  void AuraEffect::HandleModOffhandDamagePercent(AuraApplication const* aurApp, uint8 mode, bool apply) const | 
