aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index d9844f4826d..d68d986961c 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -402,9 +402,24 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
if (AuraEffect const* levelMod = GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_DRUID, 1563, EFFECT_0))
levelBonus = CalculatePct(1.0f, levelMod->GetAmount());
- if (Item const* weapon = m_items[EQUIPMENT_SLOT_MAINHAND])
- if (AuraEffect const* weaponMod = GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_DRUID, 1563, EFFECT_1))
- weaponBonus = CalculatePct(static_cast<float>(ASSERT_NOTNULL(weapon->GetTemplate())->getFeralBonus()), weaponMod->GetAmount());
+ // = 0 if removing the weapon, do not calculate bonus (uses template)
+ if (m_baseFeralAP)
+ {
+ if (Item const* weapon = m_items[EQUIPMENT_SLOT_MAINHAND])
+ {
+ if (AuraEffect const* weaponMod = GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_DRUID, 1563, EFFECT_1))
+ {
+ ItemTemplate const* itemTemplate = weapon->GetTemplate();
+ int32 bonusAP = 0;
+ for (uint32 i = 0; i < itemTemplate->StatsCount; ++i)
+ if (itemTemplate->ItemStat[i].ItemStatType == ITEM_MOD_ATTACK_POWER)
+ bonusAP += itemTemplate->ItemStat[i].ItemStatValue;
+
+ bonusAP += m_baseFeralAP;
+ weaponBonus = CalculatePct(static_cast<float>(bonusAP), weaponMod->GetAmount());
+ }
+ }
+ }
}
switch (GetShapeshiftForm())