*Fix a 100% crash that pet is killed by DOT.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-04-13 12:11:36 -05:00
parent 064866bdfe
commit 52571d6d48
2 changed files with 6 additions and 10 deletions
+2 -7
View File
@@ -477,11 +477,7 @@ void Pet::setDeathState(DeathState s) // overwrite virtual
Creature::setDeathState(s);
if(getDeathState()==CORPSE)
{
//remove summoned pet (no corpse)
if(getPetType()==SUMMON_PET)
Remove(PET_SAVE_NOT_IN_SLOT);
// other will despawn at corpse desppawning (Pet::Update code)
else
if(getPetType() == HUNTER_PET)
{
// pet corpse non lootable and non skinnable
SetUInt32Value( UNIT_DYNAMIC_FLAGS, 0x00 );
@@ -511,9 +507,8 @@ void Pet::Update(uint32 diff)
{
case CORPSE:
{
if( m_deathTimer <= diff )
if(getPetType() != HUNTER_PET || m_deathTimer <= diff )
{
assert(getPetType()!=SUMMON_PET && "Must be already removed.");
Remove(PET_SAVE_NOT_IN_SLOT); //hunters' pets never get removed because of death, NEVER!
return;
}
+4 -3
View File
@@ -16454,18 +16454,19 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
}
}
pet->SavePetToDB(mode);
// only if current pet in slot
switch(pet->getPetType())
{
case POSSESSED_PET:
pet->RemoveCharmedOrPossessedBy(NULL);
break;
default:
SetGuardian(pet, false);
pet->SavePetToDB(mode);
break;
}
SetGuardian(pet, false);
pet->CleanupsBeforeDelete();
pet->AddObjectToRemoveList();
pet->m_removed = true;