diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2017-06-07 02:33:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-06-07 02:33:47 +0200 |
| commit | 1660bb7d27d6f42b49012a6b57e3c2b2eab20fd3 (patch) | |
| tree | cf63a9cb6e89e621d7ae8b901684bc98a40a7e08 /src/server/game/Handlers/PetHandler.cpp | |
| parent | 2335b9de1a46a409c714a1dc89cbd0565545e70e (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.
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/PetHandler.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index c618978dff0..53dc69ffd94 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -26,6 +26,7 @@ #include "Spell.h" #include "ObjectAccessor.h" #include "CreatureAI.h" +#include "PetAI.h" #include "Util.h" #include "Pet.h" #include "World.h" @@ -216,7 +217,11 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe charmInfo->SetIsCommandFollow(false); charmInfo->SetIsReturning(false); - pet->ToCreature()->AI()->AttackStart(TargetUnit); + CreatureAI* AI = pet->ToCreature()->AI(); + if (PetAI* petAI = dynamic_cast<PetAI*>(AI)) + petAI->_AttackStart(TargetUnit); // force target switch + else + AI->AttackStart(TargetUnit); //10% chance to play special pet attack talk, else growl if (pet->IsPet() && ((Pet*)pet)->getPetType() == SUMMON_PET && pet != TargetUnit && urand(0, 100) < 10) @@ -365,7 +370,13 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe { pet->GetMotionMaster()->Clear(); if (pet->ToCreature()->IsAIEnabled) - pet->ToCreature()->AI()->AttackStart(unit_target); + { + CreatureAI* AI = pet->ToCreature()->AI(); + if (PetAI* petAI = dynamic_cast<PetAI*>(AI)) + petAI->_AttackStart(unit_target); // force victim switch + else + AI->AttackStart(unit_target); + } } } |
