aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-02-20 12:05:58 -0600
committermegamage <none@none>2009-02-20 12:05:58 -0600
commit1b587c0fe3355567173918d7a0b56141c6bcd1b2 (patch)
treefd8b03d40861ec08c1fd3d47744131032f7398bd /src/game/Player.cpp
parent187cd928ea6a02df715c349ec970d5899ef6274f (diff)
parent956c828bf56f06b5c25ff20d760ad41be2642a51 (diff)
*Merge.
--HG-- branch : trunk
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 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