aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r--src/game/Player.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 6bf20dcfca3..f0f66d4c7f9 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -16163,6 +16163,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);
@@ -16247,9 +16251,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