diff options
| author | xinef1 <w.szyszko2@gmail.com> | 2017-02-04 20:21:12 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-02-04 20:21:12 +0100 |
| commit | 9e1b286984c63b801561a67dd4eae7910ec1af10 (patch) | |
| tree | 02ce9d37632419ffcaa01134ea07c66c6c8d207d /src/server/game/Spells/SpellEffects.cpp | |
| parent | f2963c1f6fd325e261bf596623a659884a9498b7 (diff) | |
Core/Spells: Fixed spell effect 93 (SPELL_EFFECT_FORCE_DESELECT) (#19001)
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index e557501c095..3c7390b54c6 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -46,6 +46,7 @@ #include "Util.h" #include "TemporarySummon.h" #include "GridNotifiers.h" +#include "CellImpl.h" #include "Formulas.h" #include "ScriptMgr.h" #include "SpellHistory.h" @@ -4562,9 +4563,28 @@ void Spell::EffectForceDeselect(SpellEffIndex /*effIndex*/) if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) return; - WorldPacket data(SMSG_CLEAR_TARGET, 8); + float dist = m_caster->GetVisibilityRange(); + + // clear focus + WorldPacket data(SMSG_BREAK_TARGET, m_caster->GetPackGUID().size()); + data << m_caster->GetPackGUID(); + Trinity::MessageDistDelivererToHostile notifierBreak(m_caster, &data, dist); + m_caster->VisitNearbyWorldObject(dist, notifierBreak); + + // and selection + data.Initialize(SMSG_CLEAR_TARGET, 8); data << uint64(m_caster->GetGUID()); - m_caster->SendMessageToSet(&data, true); + Trinity::MessageDistDelivererToHostile notifierClear(m_caster, &data, dist); + m_caster->VisitNearbyWorldObject(dist, notifierClear); + + // we should also force pets to remove us from current target + Unit::AttackerSet attackerSet; + for (Unit::AttackerSet::const_iterator itr = m_caster->getAttackers().begin(); itr != m_caster->getAttackers().end(); ++itr) + if ((*itr)->GetTypeId() == TYPEID_UNIT && !(*itr)->CanHaveThreatList()) + attackerSet.insert(*itr); + + for (Unit::AttackerSet::const_iterator itr = attackerSet.begin(); itr != attackerSet.end(); ++itr) + (*itr)->AttackStop(); } void Spell::EffectSelfResurrect(SpellEffIndex effIndex) |
