aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index f8cbfd76ad2..2ad41fc4610 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1052,11 +1052,34 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
target->processed = true; // Target checked in apply effects procedure
// Get mask of effects for target
- uint32 mask = target->effectMask;
+ uint8 mask = target->effectMask;
Unit* unit = m_caster->GetGUID() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster,target->targetGUID);
if (!unit)
+ {
+ uint8 farMask = 0;
+ // create far target mask
+ for(uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ {
+ if (IsFarUnitTargetEffect(m_spellInfo->Effect[i]))
+ if ((1<<i) & mask)
+ farMask |= (1<<i);
+ }
+ if (!farMask)
+ return;
+ // find unit in world
+ unit = ObjectAccessor::FindUnit(target->targetGUID);
+ if (!unit)
+ return;
+ // do far effects on the unit
+ // can't use default call because of threading, do stuff as fast as possible
+ for(uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ {
+ if (farMask & (1<<i))
+ HandleEffects(unit,NULL,NULL,i);
+ }
return;
+ }
if (unit->isAlive() != target->alive)
return;