diff options
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
| -rwxr-xr-x | src/server/game/Spells/Spell.cpp | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 68dde527ab7..8f8748cfdec 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -844,12 +844,6 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex) if (targetMask & TARGET_FLAG_UNIT_MASK) AddUnitTarget(m_caster, 1 << effIndex, false); break; - // for EFFECT_LEARN_PET_SPELL - maybe should add unitTarget's pet instead of caster's? - case EFFECT_IMPLICIT_TARGET_PET: - if (targetMask & TARGET_FLAG_UNIT_MASK) - if (Guardian* pet = m_caster->GetGuardianPet()) - AddUnitTarget(pet, 1 << effIndex, false); - break; } } @@ -4950,21 +4944,24 @@ SpellCastResult Spell::CheckCast(bool strict) } case SPELL_EFFECT_LEARN_PET_SPELL: { - if (m_caster->GetTypeId() != TYPEID_PLAYER) - return SPELL_FAILED_BAD_TARGETS; - - Pet* pet = m_caster->ToPlayer()->GetPet(); - if (!pet) - return SPELL_FAILED_NO_PET; + // check target only for unit target case + if (Unit* unitTarget = m_targets.GetUnitTarget()) + { + if (m_caster->GetTypeId() != TYPEID_PLAYER) + return SPELL_FAILED_BAD_TARGETS; - SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[i].TriggerSpell); + Pet* pet = unitTarget->ToPet(); + if (!pet || pet->GetOwner() != m_caster) + return SPELL_FAILED_BAD_TARGETS; - if (!learn_spellproto) - return SPELL_FAILED_NOT_KNOWN; + SpellInfo const* learn_spellproto = sSpellMgr->GetSpellInfo(m_spellInfo->Effects[i].TriggerSpell); - if (m_spellInfo->SpellLevel > pet->getLevel()) - return SPELL_FAILED_LOWLEVEL; + if (!learn_spellproto) + return SPELL_FAILED_NOT_KNOWN; + if (m_spellInfo->SpellLevel > pet->getLevel()) + return SPELL_FAILED_LOWLEVEL; + } break; } case SPELL_EFFECT_APPLY_GLYPH: |
