diff options
author | Treeston <treeston.mmoc@gmail.com> | 2017-06-07 02:33:47 +0200 |
---|---|---|
committer | Carbenium <carbenium@outlook.com> | 2020-07-16 21:47:28 +0200 |
commit | f7a7d02a7f50400cdc2be3c4722afeefe7efce80 (patch) | |
tree | 0f405c9382ec9e96b3a40a8f4f722a07c791bd0f /src/server/game/AI/CreatureAI.cpp | |
parent | 5903a10a834b1198702b024182581799648540ff (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.cpp | 27 |
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)) |