aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellInfo.cpp4
2 files changed, 4 insertions, 2 deletions
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 2d16e3d04d9..c0f3daf0664 100755
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -706,6 +706,8 @@ namespace Trinity
// can't be checked in SpellInfo::CheckTarget - needs more research
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE))
continue;
+ if (target->HasUnitState(UNIT_STAT_UNATTACKABLE))
+ continue;
if (i_source->IsControlledByPlayer())
{
if (i_source->IsFriendlyTo(target))
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index 56ec382ffc3..9d36ca493a2 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1639,8 +1639,8 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, Unit const* target, b
return SPELL_FAILED_BAD_TARGETS;
}
- // check GM mode and GM invisibility - only for player casts (npc casts are controlled by AI)
- if (target != caster && caster->IsControlledByPlayer() && target->GetTypeId() == TYPEID_PLAYER)
+ // check GM mode and GM invisibility - only for player casts (npc casts are controlled by AI) and negative spells
+ if (target != caster && (caster->IsControlledByPlayer() || !IsPositive()) && target->GetTypeId() == TYPEID_PLAYER)
{
if (!target->ToPlayer()->IsVisible())
return SPELL_FAILED_BAD_TARGETS;