aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index d1415153575..4fd9582b1e8 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -5994,6 +5994,36 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32
if (!unitCaster->GetCharmedGUID().IsEmpty())
return SPELL_FAILED_ALREADY_HAVE_CHARM;
+
+ Player* playerCaster = unitCaster->ToPlayer();
+ if (playerCaster && playerCaster->GetPetStable())
+ {
+ std::pair<PetStable::PetInfo const*, PetSaveMode> info = Pet::GetLoadPetInfo(*playerCaster->GetPetStable(), spellEffectInfo.MiscValue, 0, false);
+ if (!info.first)
+ {
+ playerCaster->SendTameFailure(PetTameResult::NoPetAvailable);
+ return SPELL_FAILED_DONT_REPORT;
+ }
+
+ if (info.first->Type == HUNTER_PET && !info.first->Health)
+ {
+ playerCaster->SendTameFailure(PetTameResult::Dead);
+ return SPELL_FAILED_DONT_REPORT;
+ }
+
+ CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(info.first->CreatureId);
+ if (!creatureInfo || !creatureInfo->IsTameable(playerCaster->CanTameExoticPets()))
+ {
+ // if problem in exotic pet
+ if (creatureInfo && creatureInfo->IsTameable(true))
+ playerCaster->SendTameFailure(PetTameResult::CantControlExotic);
+ else
+ playerCaster->SendTameFailure(PetTameResult::NoPetAvailable);
+
+ return SPELL_FAILED_DONT_REPORT;
+ }
+ }
+
break;
}
case SPELL_EFFECT_SUMMON_PLAYER: