aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.h')
-rw-r--r--src/server/game/Spells/Spell.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 9c4ad549ebc..df7d3b7944b 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -738,11 +738,12 @@ namespace Trinity
const Unit * const i_source;
uint32 i_entry;
const Position * const i_pos;
+ bool i_requireDeadTarget;
SpellNotifierCreatureAndPlayer(Unit *source, std::list<Unit*> &data, float radius, SpellNotifyPushType type,
- SpellTargets TargetType = SPELL_TARGETS_ENEMY, const Position *pos = NULL, uint32 entry = 0)
+ SpellTargets TargetType = SPELL_TARGETS_ENEMY, const Position *pos = NULL, uint32 entry = 0, bool requireDeadTarget = false)
: i_data(&data), i_push_type(type), i_radius(radius), i_TargetType(TargetType),
- i_source(source), i_entry(entry), i_pos(pos)
+ i_source(source), i_entry(entry), i_pos(pos), i_requireDeadTarget(requireDeadTarget)
{
ASSERT(i_source);
}
@@ -761,7 +762,7 @@ namespace Trinity
case SPELL_TARGETS_ENEMY:
if (target->isTotem())
continue;
- if (!target->isAttackableByAOE())
+ if (!target->isAttackableByAOE(i_requireDeadTarget))
continue;
if (i_source->IsControlledByPlayer())
{
@@ -777,7 +778,13 @@ namespace Trinity
case SPELL_TARGETS_ALLY:
if (target->isTotem())
continue;
- if (!target->isAttackableByAOE() || !i_source->IsFriendlyTo(target))
+ if (!i_source->IsFriendlyTo(target))
+ continue;
+ if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
+ continue;
+ if (target->GetTypeId() == TYPEID_PLAYER && target->ToPlayer()->isGameMaster())
+ continue;
+ if (target->isAlive() == i_requireDeadTarget)
continue;
break;
case SPELL_TARGETS_ENTRY: