diff options
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 47d187f6505..ec274b41ba8 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -784,35 +784,28 @@ void Spell::EffectDummy(SpellEffIndex effIndex) if (!unitTarget) return; - float damage; - // DW should benefit of attack power, damage percent mods etc. - // TODO: check if using offhand damage is correct and if it should be divided by 2 - if (m_caster->haveOffhandWeapon() && m_caster->getAttackTimer(BASE_ATTACK) > m_caster->getAttackTimer(OFF_ATTACK)) - damage = (m_caster->GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE) + m_caster->GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE))/2; - else - damage = (m_caster->GetFloatValue(UNIT_FIELD_MINDAMAGE) + m_caster->GetFloatValue(UNIT_FIELD_MAXDAMAGE))/2; + // apply damage percent mods + damage = m_caster->SpellDamageBonus(unitTarget, m_spellInfo, damage, SPELL_DIRECT_DAMAGE); switch (m_spellInfo->Id) { - case 12162: damage *= 0.16f; break; // Rank 1 - case 12850: damage *= 0.32f; break; // Rank 2 - case 12868: damage *= 0.48f; break; // Rank 3 + case 12162: ApplyPctN(damage, 16); break; // Rank 1 + case 12850: ApplyPctN(damage, 32); break; // Rank 2 + case 12868: ApplyPctN(damage, 48); break; // Rank 3 default: sLog->outError("Spell::EffectDummy: Spell %u not handled in DW", m_spellInfo->Id); return; - }; - - // get remaining damage of old Deep Wound aura - AuraEffect* deepWound = unitTarget->GetAuraEffect(12721, 0, m_caster->GetGUID()); - if (deepWound) - { - int32 remainingTicks = deepWound->GetBase()->GetDuration() / deepWound->GetAmplitude(); - damage += remainingTicks * deepWound->GetAmount(); } - // 1 tick/sec * 6 sec = 6 ticks - int32 deepWoundsDotBasePoints0 = int32(damage / 6); - m_caster->CastCustomSpell(unitTarget, 12721, &deepWoundsDotBasePoints0, NULL, NULL, true, NULL); + SpellEntry const* spellInfo = sSpellStore.LookupEntry(12721); + uint32 ticks = GetSpellDuration(spellInfo) / spellInfo->EffectAmplitude[0]; + + // Add remaining ticks to damage done + if (AuraEffect const* aurEff = unitTarget->GetAuraEffect(12721, EFFECT_0, m_caster->GetGUID())) + damage += aurEff->GetAmount() * (ticks - aurEff->GetTickNumber()); + + damage = damage / ticks; + m_caster->CastCustomSpell(unitTarget, 12721, &damage, NULL, NULL, true); return; } case 13567: // Dummy Trigger |
