diff options
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 06ecc709000..6cb02a20306 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2138,10 +2138,22 @@ void Spell::EffectLearnSpell() Player* player = unitTarget->ToPlayer(); - uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : effectInfo->TriggerSpell; - player->LearnSpell(spellToLearn, false); + if (m_CastItem && !effectInfo->TriggerSpell) + { + for (ItemEffectEntry const* itemEffect : m_CastItem->GetEffects()) + { + if (itemEffect->TriggerType != ITEM_SPELLTRIGGER_LEARN_SPELL_ID) + continue; + + player->LearnSpell(itemEffect->SpellID, false); + } + } - TC_LOG_DEBUG("spells", "Spell: %s has learned spell %u from %s", player->GetGUID().ToString().c_str(), spellToLearn, m_caster->GetGUID().ToString().c_str()); + if (effectInfo->TriggerSpell) + { + player->LearnSpell(effectInfo->TriggerSpell, false); + TC_LOG_DEBUG("spells", "Spell: %s has learned spell %u from %s", player->GetGUID().ToString().c_str(), effectInfo->TriggerSpell, m_caster->GetGUID().ToString().c_str()); + } } void Spell::EffectDispel() |
