aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShocker <shocker@freakz.ro>2011-06-26 16:06:23 +0300
committerShocker <shocker@freakz.ro>2011-06-26 16:06:23 +0300
commite05f608919e13a28c67887b2ed269843892cf225 (patch)
tree6fb5c9e7748eec5e1d4250a1252ba0fac3f37c91 /src
parent6b0b21fea7cbd09f3ee1815758aa00f9ea1965fe (diff)
Core/Spells: Don't allow Killing Spree to hit unattackable targets
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Grids/Notifiers/GridNotifiers.h5
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraEffects.cpp8
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);