diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d23fc73fdb..314c20e5cb 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -6705,8 +6705,8 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin // Default calculation if (DoneAdvertisedBenefit) { - if (coeff < 0) - coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack); + if (coeff < 0.f) + coeff = CalculateDefaultCoefficient(spellProto, damagetype); if (Player* modOwner = GetSpellModOwner()) { @@ -6731,6 +6731,10 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage if (!spellProto || !victim || damagetype == DIRECT_DAMAGE) return 1.0f; + // Some spells don't benefit from done mods + if (spellProto->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) + return 1.0f; + // Some spells don't benefit from pct done mods if (spellProto->HasAttribute(SPELL_ATTR6_LIMIT_PCT_DAMAGE_MODS)) return 1.0f; @@ -7498,7 +7502,7 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui if (DoneAdvertisedBenefit) { if (coeff < 0.f) - coeff = CalculateDefaultCoefficient(spellProto, damagetype) * int32(stack) * 1.88f; // As wowwiki says: C = (Cast Time / 3.5) * 1.88 (for healing spells) + coeff = CalculateDefaultCoefficient(spellProto, damagetype) * 1.88f; // As wowwiki says: C = (Cast Time / 3.5) * 1.88 (for healing spells) if (Player* modOwner = GetSpellModOwner()) { @@ -7985,7 +7989,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType // Check for table values if (SpellBonusEntry const* bonus = sSpellMgr->GetSpellBonusData(spellProto->Id)) { - if (bonus->ap_bonus > 0) + if (bonus->ap_bonus > 0.f) { float APbonus = GetTotalAttackPowerValue(attType); DoneFlatBenefit += int32(bonus->ap_bonus * APbonus); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index ebc2afd64a..e951de7388 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -392,7 +392,7 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) case 88084: // Arcane Blast (Mirror Image) // Mage Mirror Images deal 50% of the coefficient's spell power bonus as bonus damage if (Unit* owner = m_caster->ToTempSummon()->GetSummoner()) - damage += CalculatePct(owner->SpellDamageBonusDone(unitTarget, m_spellInfo, (uint32)damage, SPELL_DIRECT_DAMAGE, effIndex), 50); + damage = CalculatePct(owner->SpellDamageBonusDone(unitTarget, m_spellInfo, (uint32)damage, SPELL_DIRECT_DAMAGE, effIndex), 50); break; } break;