aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-03-04 04:18:55 -0300
committerariel- <ariel-@users.noreply.github.com>2017-03-04 04:18:55 -0300
commit15a207fcac15d336b848f9759f75386e12b6a35f (patch)
treef86e366a1540eb70c63638139f3ea1763dd5096f
parent25cbf0a8a64dbecc501219ed3653afd07284bdef (diff)
Core/Creature: redo some logical checks in _IsTargetAcceptable
- Check against current creature victim, don't check potential victim attacking list. - Neutral creatures with aggressive reactstate were triggered to attack from MoveInLineOfSight because of this check - Prevents attack from a distance after right clicking an npc Closes #19235
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index cbbaf917417..171f1fb61fd 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2262,7 +2262,7 @@ bool Creature::CanAssistTo(const Unit* u, const Unit* enemy, bool checkfaction /
// use this function to avoid having hostile creatures attack
// friendlies and other mobs they shouldn't attack
-bool Creature::_IsTargetAcceptable(const Unit* target) const
+bool Creature::_IsTargetAcceptable(Unit const* target) const
{
ASSERT(target);
@@ -2281,13 +2281,17 @@ bool Creature::_IsTargetAcceptable(const Unit* target) const
return false;
}
- const Unit* myVictim = getAttackerForHelper();
- const Unit* targetVictim = target->getAttackerForHelper();
+ Unit const* targetVictim = target->getAttackerForHelper();
// if I'm already fighting target, or I'm hostile towards the target, the target is acceptable
- if (myVictim == target || targetVictim == this || IsHostileTo(target))
+ if (GetVictim() == 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;