diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6c7a041181..4eee788e84 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -698,6 +698,13 @@ void Spell::SelectSpellTargets() if (!m_spellInfo->Effects[i].Effect) continue; + // set expected type of implicit targets to be sent to client + uint32 implicitTargetMask = GetTargetFlagMask(m_spellInfo->Effects[i].TargetA.GetObjectType()) | GetTargetFlagMask(m_spellInfo->Effects[i].TargetB.GetObjectType()); + if (implicitTargetMask & TARGET_FLAG_UNIT) + m_targets.SetTargetFlag(TARGET_FLAG_UNIT); + if (implicitTargetMask & (TARGET_FLAG_GAMEOBJECT | TARGET_FLAG_GAMEOBJECT_ITEM)) + m_targets.SetTargetFlag(TARGET_FLAG_GAMEOBJECT); + uint32 effectTargetType = m_spellInfo->Effects[i].GetRequiredTargetType(); // is it possible that areaaura is not applied to caster? diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 2b0dd569e4..74198aa0df 100755 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -104,6 +104,8 @@ class SpellCastTargets uint32 GetTargetMask() const { return m_targetMask; } void SetTargetMask(uint32 newMask) { m_targetMask = newMask; } + void SetTargetFlag(SpellCastTargetFlags flag) { m_targetMask |= flag; } + uint64 GetUnitTargetGUID() const; Unit* GetUnitTarget() const; void SetUnitTarget(Unit* target);