diff options
Diffstat (limited to 'src/game/Pet.cpp')
-rw-r--r-- | src/game/Pet.cpp | 30 |
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();) |