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;  | 
