diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2017-05-29 16:39:20 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-29 16:39:20 +0200 |
| commit | 69fd6245dc41dca658cadb4e99c1ee6593fe000b (patch) | |
| tree | bc3babb9d1ef46ab26975d7347089a2821d7ce2f /src/server/game/Entities/Creature | |
| parent | 60a69bcd3d6ae5fe55d6a18e67938a3a61bbbe6a (diff) | |
Partial revert of 15a207f, which was causing issues (ref #4943 and #19768). Instead, fix the underlying issue from 15a207f one level further down - Unit::getAttackerForHelper() shouldn't return units that we aren't in combat with (victim can be such a unit for players/player pets, which can startattack from a distance without entering combat). (#19814)
Fixes the following issues:
- Player pets would aggro neutral mobs as soon as they start autocasting (Imp's Firebolt) if they're in react range (due to victim != null, autocast counts as autoattack and sets victim)
- Neutral mobs would randomly evade when aggro switched between targets.
Closes #19768, #19485 and #10921.
(from PR #19814)
Diffstat (limited to 'src/server/game/Entities/Creature')
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 6e22bc0d0b8..1979587d005 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2291,14 +2291,9 @@ bool Creature::_IsTargetAcceptable(Unit const* target) const Unit const* targetVictim = target->getAttackerForHelper(); // if I'm already fighting target, or I'm hostile towards the target, the target is acceptable - if (GetVictim() == target || IsHostileTo(target)) + if (IsInCombatWith(target) || IsHostileTo(target)) return true; - // a player is targeting me, but I'm not hostile towards it, and not currently attacking it, the target is not acceptable - // (players may set their victim from a distance, and doesn't mean we should attack) - if (target->GetTypeId() == TYPEID_PLAYER && targetVictim == this) - return false; - // if the target's victim is friendly, and the target is neutral, the target is acceptable if (targetVictim && IsFriendlyTo(targetVictim)) return true; |
