diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 4 |
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; |