aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp31
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: