Public feed
#887781
Index: game/Unit.cpp
===================================================================
--- game/Unit.cpp (revision 5121)
+++ game/Unit.cpp (working copy)
@@ -2231,7 +2231,7 @@
// apply melee damage bonus and absorb only if base damage not fully blocked to prevent negative damage or damage with full block
if(*victimState != VICTIMSTATE_BLOCKS)
{
- MeleeDamageBonus(pVictim, damage,attType);
+ MeleeDamageBonus(pVictim, damage,attType,spellCasted);
CalcAbsorbResist(pVictim, damageType, DIRECT_DAMAGE, *damage-*blocked_amount, absorbDamage, resistDamage);
}
@@ -5880,7 +5880,7 @@
return false;
}
-void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attType)
+void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage,WeaponAttackType attType, SpellEntry const *spellCasted)
{
if(!pVictim) return;
@@ -5943,8 +5943,32 @@
}
if (APbonus!=0) // Can be negative
- DoneFlatBenefit += int32(APbonus/14.0f * GetAttackTime(attType)/1000);
+ {
+ uint32 wSpeed = GetAttackTime(attType);
+ if ( GetTypeId() == TYPEID_PLAYER && spellCasted &&
+ (spellCasted->Effect[0] == SPELL_EFFECT_NORMALIZED_WEAPON_DMG ||
+ spellCasted->Effect[1] == SPELL_EFFECT_NORMALIZED_WEAPON_DMG ||
+ spellCasted->Effect[2] == SPELL_EFFECT_NORMALIZED_WEAPON_DMG))
+ {
+ Item *weapon = ((Player*)this)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);
+
+ if ( spellCasted->AttributesEx3 & 0x0000000001000000)
+ Item *weapon = ((Player*)this)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
+
+ if (spellCasted->rangeIndex != 1 && spellCasted->rangeIndex != 2 && spellCasted->rangeIndex != 7)
+ wSpeed = 2800;
+ else if ( weapon && weapon->GetProto()->InventoryType == INVTYPE_2HWEAPON)
+ wSpeed = 3300;
+ else if ( weapon && weapon->GetProto()->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER)
+ wSpeed = 1700;
+ else
+ wSpeed = 2400;
+
+ }
+ DoneFlatBenefit += int32(APbonus/14.0f * wSpeed/1000);
+ }
+
// ..taken
AuraList const& mDamageTaken = pVictim->GetAurasByType(SPELL_AURA_MOD_DAMAGE_TAKEN);
for(AuraList::const_iterator i = mDamageTaken.begin();i != mDamageTaken.end(); ++i)
Index: game/Unit.h
===================================================================
--- game/Unit.h (revision 5121)
+++ game/Unit.h (working copy)
@@ -962,7 +962,7 @@
uint32 SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint32 damage, DamageEffectType damagetype);
uint32 SpellHealingBonus(SpellEntry const *spellProto, uint32 healamount, DamageEffectType damagetype, Unit *pVictim);
bool SpellCriticalBonus(SpellEntry const *spellProto, uint32 *damage, Unit *pVictim);
- void MeleeDamageBonus(Unit *pVictim, uint32 *damage, WeaponAttackType attType);
+ void MeleeDamageBonus(Unit *pVictim, uint32 *damage, WeaponAttackType attType, SpellEntry const *spellCasted);
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply);
virtual bool IsImmunedToSpell(SpellEntry const* spellInfo) const;
// redefined in Creature