aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Pet.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index 02f09991650..3048d42d344 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -59,6 +59,9 @@ Pet::~Pet()
{
if(m_uint32Values) // only for fully created Object
{
+ if(Unit* owner = GetOwner())
+ owner->SetPet(this, false);
+
for (PetSpellMap::iterator i = m_spells.begin(); i != m_spells.end(); ++i)
delete i->second;
ObjectAccessor::Instance().RemoveObject(this);
@@ -69,17 +72,23 @@ Pet::~Pet()
void Pet::AddToWorld()
{
- ///- Register the pet for guid lookup
- if(!IsInWorld()) ObjectAccessor::Instance().AddObject(this);
- Unit::AddToWorld();
+ if(!IsInWorld())
+ {
+ ///- Register the pet for guid lookup
+ ObjectAccessor::Instance().AddObject(this);
+ Unit::AddToWorld();
+ }
}
void Pet::RemoveFromWorld()
{
- ///- Remove the pet from the accessor
- if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
- ///- Don't call the function for Creature, normal mobs + totems go in a different storage
- Unit::RemoveFromWorld();
+ if(IsInWorld())
+ {
+ ///- Remove the pet from the accessor
+ ObjectAccessor::Instance().RemoveObject(this);
+ ///- Don't call the function for Creature, normal mobs + totems go in a different storage
+ Unit::RemoveFromWorld();
+ }
}
bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool current )
@@ -636,9 +645,7 @@ bool Pet::CanTakeMoreActiveSpells(uint32 spellid)
void Pet::Remove(PetSaveMode mode, bool returnreagent)
{
- Unit* owner = GetOwner();
-
- if(owner)
+ if(Unit* owner = GetOwner())
{
if(owner->GetTypeId()==TYPEID_PLAYER)
{