diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-11-24 00:16:42 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-11-24 00:16:42 +0100 |
| commit | d5fb18d3c3a557acaf60a39be4ad5444969dd663 (patch) | |
| tree | 470387e7ccbae73b255e18d0690232ffbc94ae2e /src/server/game/Spells/Spell.cpp | |
| parent | 7430daab1f5e71a441ce7beeefc7a247f3b3dda2 (diff) | |
Core/Spells: Implemented scaling spell value with item level
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d5b6baaf056..69bb1d19b73 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -570,6 +570,7 @@ m_spellValue(new SpellValue(caster->GetMap()->GetDifficultyID(), m_spellInfo)), m_CastItem = NULL; m_castItemGUID.Clear(); m_castItemEntry = 0; + m_castItemLevel = -1; m_castFlagsEx = 0; unitTarget = NULL; @@ -2604,7 +2605,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA { bool refresh = false; m_spellAura = Aura::TryRefreshStackOrCreate(aurSpellInfo, effectMask, unit, - m_originalCaster, (aurSpellInfo == m_spellInfo) ? m_spellValue->EffectBasePoints : basePoints, m_CastItem, ObjectGuid::Empty, &refresh); + m_originalCaster, (aurSpellInfo == m_spellInfo) ? m_spellValue->EffectBasePoints : basePoints, + m_CastItem, ObjectGuid::Empty, &refresh, m_castItemLevel); if (m_spellAura) { // Set aura stack amount to desired value @@ -2859,6 +2861,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered { m_castItemGUID = m_CastItem->GetGUID(); m_castItemEntry = m_CastItem->GetEntry(); + m_castItemLevel = int32(m_CastItem->GetItemLevel(m_CastItem->GetOwner())); } InitExplicitTargets(*targets); @@ -2887,7 +2890,10 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered m_spellState = SPELL_STATE_PREPARING; if (triggeredByAura) - m_triggeredByAuraSpell = triggeredByAura->GetSpellInfo(); + { + m_triggeredByAuraSpell = triggeredByAura->GetSpellInfo(); + m_castItemLevel = triggeredByAura->GetBase()->GetCastItemLevel(); + } // create and add update event for this spell SpellEvent* Event = new SpellEvent(this); @@ -6462,6 +6468,7 @@ bool Spell::UpdatePointers() if (!m_castItemGUID.IsEmpty() && m_caster->GetTypeId() == TYPEID_PLAYER) { m_CastItem = m_caster->ToPlayer()->GetItemByGuid(m_castItemGUID); + m_castItemLevel = -1; // cast item not found, somehow the item is no longer where we expected if (!m_CastItem) return false; @@ -6469,6 +6476,8 @@ bool Spell::UpdatePointers() // check if the item is really the same, in case it has been wrapped for example if (m_castItemEntry != m_CastItem->GetEntry()) return false; + + m_castItemLevel = int32(m_CastItem->GetItemLevel(m_caster->ToPlayer())); } m_targets.Update(m_caster); |
