aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp28
1 files changed, 8 insertions, 20 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 3207980d1d1..d3782ec2fd6 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -6553,17 +6553,11 @@ int32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, int3
APbonus += GetTotalAttackPowerValue(attType);
DoneTotal += int32(stack * ApCoeffMod * APbonus);
}
- else
- {
- // No bonus damage for SPELL_DAMAGE_CLASS_NONE class spells by default
- if (spellProto->DmgClass == SPELL_DAMAGE_CLASS_NONE)
- return uint32(std::max(pdamage * DoneTotalMod, 0.0f));
- }
// Default calculation
- float coeff = spellEffectInfo.BonusCoefficient;
if (DoneAdvertisedBenefit)
{
+ float coeff = spellEffectInfo.BonusCoefficient;
if (Player* modOwner = GetSpellModOwner())
{
coeff *= 100.0f;
@@ -7038,7 +7032,6 @@ int32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, int
DoneAdvertisedBenefit += static_cast<Guardian const*>(this)->GetBonusDamage();
// Check for table values
- float coeff = spellEffectInfo.BonusCoefficient;
if (spellEffectInfo.BonusCoefficientFromAP > 0.0f)
{
WeaponAttackType const attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
@@ -7047,16 +7040,11 @@ int32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, int
DoneTotal += int32(spellEffectInfo.BonusCoefficientFromAP * stack * APbonus);
}
- else if (coeff <= 0.0f) // no AP and no SP coefs, skip
- {
- // No bonus healing for SPELL_DAMAGE_CLASS_NONE class spells by default
- if (spellProto->DmgClass == SPELL_DAMAGE_CLASS_NONE)
- return uint32(std::max(healamount * DoneTotalMod, 0.0f));
- }
// Default calculation
if (DoneAdvertisedBenefit)
{
+ float coeff = spellEffectInfo.BonusCoefficient;
if (Player* modOwner = GetSpellModOwner())
{
coeff *= 100.0f;
@@ -7116,6 +7104,9 @@ float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const
if (spellProto->SpellFamilyName == SPELLFAMILY_POTION)
return 1.0f;
+ float DoneTotalMod = 1.0f;
+
+ // Healing done percent
if (Player const* thisPlayer = ToPlayer())
{
float maxModDamagePercentSchool = 0.0f;
@@ -7123,10 +7114,10 @@ float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const
if (spellProto->GetSchoolMask() & (1 << i))
maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, thisPlayer->m_activePlayerData->ModHealingDonePercent[i]);
- return maxModDamagePercentSchool;
+ DoneTotalMod *= maxModDamagePercentSchool;
}
-
- float DoneTotalMod = 1.0f;
+ else // SPELL_AURA_MOD_HEALING_DONE_PERCENT is included in m_activePlayerData->ModHealingDonePercent for players
+ DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
// bonus against aurastate
DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE, [victim](AuraEffect const* aurEff) -> bool
@@ -7136,9 +7127,6 @@ float Unit::SpellHealingPctDone(Unit* victim, SpellInfo const* spellProto) const
return false;
});
- // Healing done percent
- DoneTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
-
// bonus from missing health of target
float healthPctDiff = 100.0f - victim->GetHealthPct();
for (AuraEffect const* healingDonePctVsTargetHealth : GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PCT_VERSUS_TARGET_HEALTH))