aboutsummaryrefslogtreecommitdiff
path: root/src/game/Pet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Pet.cpp')
-rw-r--r--src/game/Pet.cpp30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index e846f7004c0..7edc9144bdc 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -190,10 +190,7 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
return true;
}
- if (getPetType() == HUNTER_PET || (getPetType() == SUMMON_PET && cinfo->type == CREATURE_TYPE_DEMON && owner->getClass() == CLASS_WARLOCK))
- m_charmInfo->SetPetNumber(pet_number, true);
- else
- m_charmInfo->SetPetNumber(pet_number, false);
+ m_charmInfo->SetPetNumber(pet_number, IsPermanentPetFor(owner));
// set current pet as current
// 0=current
@@ -1685,6 +1682,27 @@ void Pet::ToggleAutocast(uint32 spellid, bool apply)
}
}
+bool Pet::IsPermanentPetFor(Player* owner)
+{
+ switch(getPetType())
+ {
+ case SUMMON_PET:
+ switch(owner->getClass())
+ {
+ case CLASS_WARLOCK:
+ return GetCreatureInfo()->type == CREATURE_TYPE_DEMON;
+ case CLASS_DEATH_KNIGHT:
+ return GetCreatureInfo()->type == CREATURE_TYPE_UNDEAD;
+ default:
+ return false;
+ }
+ case HUNTER_PET:
+ return true;
+ default:
+ return false;
+ }
+}
+
bool Pet::Create(uint32 guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 pet_number)
{
SetMapId(map->GetId());
@@ -1735,10 +1753,10 @@ void Pet::LearnPetPassives()
void Pet::CastPetAuras(bool current)
{
Unit* owner = GetOwner();
- if(!owner)
+ if(!owner || owner->GetTypeId()!=TYPEID_PLAYER)
return;
- if(getPetType() != HUNTER_PET && (getPetType() != SUMMON_PET || owner->getClass() != CLASS_WARLOCK))
+ if(!IsPermanentPetFor((Player*)owner))
return;
for(PetAuraSet::const_iterator itr = owner->m_petAuras.begin(); itr != owner->m_petAuras.end();)