diff options
author | Shocker <shocker@freakz.ro> | 2011-06-26 16:06:23 +0300 |
---|---|---|
committer | Shocker <shocker@freakz.ro> | 2011-06-26 16:06:23 +0300 |
commit | e05f608919e13a28c67887b2ed269843892cf225 (patch) | |
tree | 6fb5c9e7748eec5e1d4250a1252ba0fac3f37c91 /src | |
parent | 6b0b21fea7cbd09f3ee1815758aa00f9ea1965fe (diff) |
Core/Spells: Don't allow Killing Spree to hit unattackable targets
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Grids/Notifiers/GridNotifiers.h | 5 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 8 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 7f8dcbd601a..042950a6ddd 100755 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -805,10 +805,10 @@ namespace Trinity float i_range; }; - class AnyUnfriendlyVisibleUnitInObjectRangeCheck + class AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck { public: - AnyUnfriendlyVisibleUnitInObjectRangeCheck(WorldObject const* obj, Unit const* funit, float range) + AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck(WorldObject const* obj, Unit const* funit, float range) : i_obj(obj), i_funit(funit), i_range(range) {} bool operator()(Unit* u) @@ -816,6 +816,7 @@ namespace Trinity return u->isAlive() && i_obj->IsWithinDistInMap(u, i_range) && !i_funit->IsFriendlyTo(u) + && i_funit->canAttack(u) && u->GetCreatureType() != CREATURE_TYPE_CRITTER && i_funit->canSeeOrDetect(u); } diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index cb60408363d..27a34bb8740 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -5655,11 +5655,11 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const Cell cell(p); cell.data.Part.reserved = ALL_DISTRICT; - Trinity::AnyUnfriendlyVisibleUnitInObjectRangeCheck u_check(target, target, radius); - Trinity::UnitListSearcher<Trinity::AnyUnfriendlyVisibleUnitInObjectRangeCheck> checker(target, targets, u_check); + Trinity::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck u_check(target, target, radius); + Trinity::UnitListSearcher<Trinity::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck> checker(target, targets, u_check); - TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnfriendlyVisibleUnitInObjectRangeCheck>, GridTypeMapContainer > grid_object_checker(checker); - TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnfriendlyVisibleUnitInObjectRangeCheck>, WorldTypeMapContainer > world_object_checker(checker); + TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck>, GridTypeMapContainer > grid_object_checker(checker); + TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnfriendlyAttackableVisibleUnitInObjectRangeCheck>, WorldTypeMapContainer > world_object_checker(checker); cell.Visit(p, grid_object_checker, *GetBase()->GetOwner()->GetMap(), *target, radius); cell.Visit(p, world_object_checker, *GetBase()->GetOwner()->GetMap(), *target, radius); |