Index: src/game/Player.cpp =================================================================== --- src/game/Player.cpp (revision 5314) +++ src/game/Player.cpp (working copy) @@ -14468,16 +14468,6 @@ } } -void Player::Uncharm() -{ - Unit* charm = GetCharm(); - if(!charm) return; - - charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_CHARM); - charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_POSSESS); - -} - void Player::Say(const std::string text, const uint32 language) { WorldPacket data(SMSG_MESSAGECHAT, 200); Index: src/game/Player.h =================================================================== --- src/game/Player.h (revision 5314) +++ src/game/Player.h (working copy) @@ -974,7 +974,6 @@ void UpdateInnerTime (int time) { time_inn_enter = time; }; void RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent = false); - void Uncharm(); void Say(const std::string text, const uint32 language); void Yell(const std::string text, const uint32 language); Index: src/game/Unit.cpp =================================================================== --- src/game/Unit.cpp (revision 5314) +++ src/game/Unit.cpp (working copy) @@ -6245,6 +6245,17 @@ SetUInt64Value(UNIT_FIELD_CHARM,charmed ? charmed->GetGUID() : 0); } +void Unit::Uncharm() +{ + Unit* charm = GetCharm(); + if(!charm) return; + // stop combat + charm->CombatStop(); + // remove auras from Charm + charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_CHARM); + charm->RemoveSpellsCausingAura(SPELL_AURA_MOD_POSSESS); +} + void Unit::UnsummonAllTotems() { for (int8 i = 0; i < 4; ++i) @@ -7580,6 +7591,7 @@ { RemoveAllAurasOnDeath(); UnsummonAllTotems(); + Uncharm(); ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false); Index: src/game/Unit.h =================================================================== --- src/game/Unit.h (revision 5314) +++ src/game/Unit.h (working copy) @@ -956,6 +956,7 @@ void ModifyAuraState(AuraState flag, bool apply); bool HasAuraState(AuraState flag) const { return HasFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1)); } void UnsummonAllTotems(); + void Uncharm(); int32 SpellBaseDamageBonus(int32 SchoolMask); int32 SpellBaseHealingBonus(int32 SchoolMask); int32 SpellBaseDamageBonusForVictim(int32 SchoolMask, Unit *pVictim);