diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 2a12b2a62..4f0fbe0ad 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -772,7 +772,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x2E7*/ { "CMSG_WARDEN_DATA", STATUS_LOGGEDIN, &WorldSession::HandleWardenDataOpcode }, /*0x2E8*/ { "SMSG_GROUP_JOINED_BATTLEGROUND", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x2E9*/ { "MSG_BATTLEGROUND_PLAYER_POSITIONS", STATUS_LOGGEDIN, &WorldSession::HandleBattleGroundPlayerPositionsOpcode}, - /*0x2EA*/ { "CMSG_PET_STOP_ATTACK", STATUS_UNHANDLED,&WorldSession::Handle_NULL }, + /*0x2EA*/ { "CMSG_PET_STOP_ATTACK", STATUS_LOGGEDIN, &WorldSession::HandlePetStopAttack }, /*0x2EB*/ { "SMSG_BINDER_CONFIRM", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x2EC*/ { "SMSG_BATTLEGROUND_PLAYER_JOINED", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x2ED*/ { "SMSG_BATTLEGROUND_PLAYER_LEFT", STATUS_NEVER, &WorldSession::Handle_ServerSide }, diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index daa823059..6b1c8e601 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -272,6 +272,32 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data ) } } +void WorldSession::HandlePetStopAttack(WorldPacket& recv_data) +{ + DEBUG_LOG("WORLD: Received CMSG_PET_STOP_ATTACK"); + + ObjectGuid petGuid; + recv_data >> petGuid; + + Unit* pet = GetPlayer()->GetMap()->GetUnit(petGuid); // pet or controlled creature/player + if (!pet) + { + sLog.outError("%s doesn't exist.", petGuid.GetString().c_str()); + return; + } + + if (GetPlayer()->GetGUID() != pet->GetCharmerOrOwnerGUID()) + { + sLog.outError("HandlePetStopAttack: %s isn't charm/pet of %s.", petGuid.GetString().c_str(), GetPlayer()->GetObjectGuid().GetString().c_str()); + return; + } + + if (!pet->isAlive()) + return; + + pet->AttackStop(); +} + void WorldSession::HandlePetNameQueryOpcode( WorldPacket & recv_data ) { DETAIL_LOG( "HandlePetNameQuery. CMSG_PET_NAME_QUERY" ); diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 9c86660a9..8af868e97 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -642,6 +642,7 @@ class MANGOS_DLL_SPEC WorldSession //Pet void HandlePetAction( WorldPacket & recv_data ); + void HandlePetStopAttack(WorldPacket& recv_data); void HandlePetNameQueryOpcode( WorldPacket & recv_data ); void HandlePetSetAction( WorldPacket & recv_data ); void HandlePetAbandon( WorldPacket & recv_data ); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ae121c930..a23e40c8a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10562" + #define REVISION_NR "10563" #endif // __REVISION_NR_H__