aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI/CreatureAI.cpp
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-06-07 02:33:47 +0200
committerCarbenium <carbenium@outlook.com>2020-07-16 21:47:28 +0200
commitf7a7d02a7f50400cdc2be3c4722afeefe7efce80 (patch)
tree0f405c9382ec9e96b3a40a8f4f722a07c791bd0f /src/server/game/AI/CreatureAI.cpp
parent5903a10a834b1198702b024182581799648540ff (diff)
Pet/Guardian AI hook re-organizing (#19824)
* Pet/Guardian AI hook re-organizing: - Adjust OwnerAttacked/OwnerAttackedBy hooks on CreatureAI to fire for all owned units, not just player pets. This should allow guardians to more reliably recognize valid targets. - Kill off the AttackedBy hook. While it was defined in CreatureAI.h as virtual, it was only ever invoked for player pets in specific situations. This makes it classic developer bait. - Adjust PetAI to use DamageTaken instead of AttackedBy. - Adjust behavior of AttackStart on PetAI to compensate. (cherry picked from commit 1660bb7d27d6f42b49012a6b57e3c2b2eab20fd3)
Diffstat (limited to 'src/server/game/AI/CreatureAI.cpp')
-rw-r--r--src/server/game/AI/CreatureAI.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 80d59e4e7cc..54fbabd0b50 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -147,15 +147,22 @@ void CreatureAI::MoveInLineOfSight(Unit* who)
if (me->GetVictim())
return;
- if (me->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET) // non-combat pets should just stand there and look good;)
- return;
-
if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who, false))
AttackStart(who);
- //else if (who->GetVictim() && me->IsFriendlyTo(who)
- // && me->IsWithinDistInMap(who, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS))
- // && me->CanStartAttack(who->GetVictim(), true)) /// @todo if we use true, it will not attack it when it arrives
- // me->GetMotionMaster()->MoveChase(who->GetVictim());
+}
+
+void CreatureAI::_OnOwnerCombatInteraction(Unit* target)
+{
+ if (!target || !me->IsAlive())
+ return;
+
+ if (!me->HasReactState(REACT_PASSIVE) && me->CanStartAttack(target, true))
+ {
+ if (me->IsInCombat())
+ me->AddThreat(target, 0.0f);
+ else
+ AttackStart(target);
+ }
}
// Distract creature, if player gets too close while stealthed/prowling
@@ -211,12 +218,6 @@ void CreatureAI::EnterEvadeMode(EvadeReason why)
me->GetVehicleKit()->Reset(true);
}
-/*void CreatureAI::AttackedBy(Unit* attacker)
-{
- if (!me->GetVictim())
- AttackStart(attacker);
-}*/
-
void CreatureAI::SetGazeOn(Unit* target)
{
if (me->IsValidAttackTarget(target))