diff options
author | megamage <none@none> | 2009-02-20 12:05:58 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-02-20 12:05:58 -0600 |
commit | 1b587c0fe3355567173918d7a0b56141c6bcd1b2 (patch) | |
tree | fd8b03d40861ec08c1fd3d47744131032f7398bd /src/game/Player.cpp | |
parent | 187cd928ea6a02df715c349ec970d5899ef6274f (diff) | |
parent | 956c828bf56f06b5c25ff20d760ad41be2642a51 (diff) |
*Merge.
--HG--
branch : trunk
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r-- | src/game/Player.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 226d6729f95..5ebc547f7cc 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -16870,6 +16870,10 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) case GUARDIAN_PET: m_guardianPets.erase(pet->GetGUID()); break; + case POSSESSED_PET: + m_guardianPets.erase(pet->GetGUID()); + pet->RemoveCharmedOrPossessedBy(NULL); + break; default: if(GetPetGUID() == pet->GetGUID()) SetPet(NULL); @@ -16955,9 +16959,19 @@ void Player::Uncharm() if(!charm) return; - charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_CHARM); - charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_POSSESS_PET); - charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_POSSESS); + if(charm->GetTypeId() == TYPEID_UNIT && ((Creature*)charm)->isPet() + && ((Pet*)charm)->getPetType() == POSSESSED_PET) + { + ((Pet*)charm)->Remove(PET_SAVE_AS_DELETED); + } + else + { + charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_CHARM); + charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_POSSESS_PET); + charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_POSSESS); + } + + assert(!GetCharmGUID()); } void Player::BuildPlayerChat(WorldPacket *data, uint8 msgtype, const std::string& text, uint32 language) const |