aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/PetHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
-rw-r--r--src/server/game/Handlers/PetHandler.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp
index 3d91ce9afaa..ffc3108c1db 100644
--- a/src/server/game/Handlers/PetHandler.cpp
+++ b/src/server/game/Handlers/PetHandler.cpp
@@ -35,6 +35,7 @@
#include "SpellInfo.h"
#include "SpellMgr.h"
#include "SpellPackets.h"
+#include "PetAI.h"
#include "Util.h"
#include "World.h"
#include "WorldPacket.h"
@@ -211,7 +212,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)
@@ -372,7 +377,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);
+ }
}
}