diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
4 files changed, 10 insertions, 7 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 23dc7f52cc6..f2360da5396 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4970,9 +4970,9 @@ void Player::SetBaseModPctValue(BaseModGroup modGroup, float val) UpdateBaseModGroup(modGroup); } -void Player::UpdateDamageDoneMods(WeaponAttackType attackType) +void Player::UpdateDamageDoneMods(WeaponAttackType attackType, int32 skipEnchantSlot /*= -1*/) { - Unit::UpdateDamageDoneMods(attackType); + Unit::UpdateDamageDoneMods(attackType, skipEnchantSlot); UnitMods unitMod; switch (attackType) @@ -4998,6 +4998,9 @@ void Player::UpdateDamageDoneMods(WeaponAttackType attackType) for (uint8 slot = 0; slot < MAX_ENCHANTMENT_SLOT; ++slot) { + if (skipEnchantSlot == slot) + continue; + SpellItemEnchantmentEntry const* enchantmentEntry = sSpellItemEnchantmentStore.LookupEntry(item->GetEnchantmentId(EnchantmentSlot(slot))); if (!enchantmentEntry) continue; @@ -14126,7 +14129,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool { WeaponAttackType const attackType = Player::GetAttackBySlot(item->GetSlot(), item->GetTemplate()->GetInventoryType()); if (attackType != MAX_ATTACK) - UpdateDamageDoneMods(attackType); + UpdateDamageDoneMods(attackType, apply ? -1 : slot); break; } case ITEM_ENCHANTMENT_TYPE_EQUIP_SPELL: @@ -14376,7 +14379,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool { WeaponAttackType const attackType = Player::GetAttackBySlot(item->GetSlot(), item->GetTemplate()->GetInventoryType()); if (attackType != MAX_ATTACK) - UpdateDamageDoneMods(attackType); + UpdateDamageDoneMods(attackType, apply ? -1 : slot); break; } case ITEM_ENCHANTMENT_TYPE_USE_SPELL: diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e86afb16863..27d0be2f250 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2222,7 +2222,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetBaseModFlatValue(BaseModGroup modGroup, float val); void SetBaseModPctValue(BaseModGroup modGroup, float val); - void UpdateDamageDoneMods(WeaponAttackType attackType) override; + void UpdateDamageDoneMods(WeaponAttackType attackType, int32 skipEnchantSlot = -1) override; void UpdateBaseModGroup(BaseModGroup modGroup); float GetBaseModValue(BaseModGroup modGroup, BaseModType modType) const; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0ea5d683234..3c6672deb31 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8647,7 +8647,7 @@ void Unit::UpdateUnitMod(UnitMods unitMod) } } -void Unit::UpdateDamageDoneMods(WeaponAttackType attackType) +void Unit::UpdateDamageDoneMods(WeaponAttackType attackType, int32 /*skipEnchantSlot = -1*/) { UnitMods unitMod; switch (attackType) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 93065c19921..e48319bde83 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1542,7 +1542,7 @@ class TC_GAME_API Unit : public WorldObject // only players have item requirements virtual bool CheckAttackFitToAuraRequirement(WeaponAttackType /*attackType*/, AuraEffect const* /*aurEff*/) const { return true; } - virtual void UpdateDamageDoneMods(WeaponAttackType attackType); + virtual void UpdateDamageDoneMods(WeaponAttackType attackType, int32 skipEnchantSlot = -1); void UpdateAllDamageDoneMods(); void UpdateDamagePctDoneMods(WeaponAttackType attackType); |