From 87c6cc19e570623ab0d1d0ae569e0a51823d0200 Mon Sep 17 00:00:00 2001 From: Artamedes Date: Tue, 8 Oct 2019 10:53:55 -0400 Subject: [PATCH] Core/PacketIO: Handle CMSG_REQUEST_PET_INFO, so pet/vehicle/charm/possess bar shows after a client /reload (#7) * Core/PacketIO: Handle CMSG_REQUEST_PET_INFO, so pet/vehicle/charm/possess bar shows after a client /reload * Core/Handlers: added additional checks for PetSpellInitialize() call in HandleRequestPetInfoOpcode and apply codestyle standards --- src/server/game/Handlers/MiscHandler.cpp | 8 -------- src/server/game/Handlers/PetHandler.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index a16ee3186d..c612fe3f7d 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1482,14 +1482,6 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recvData) _player->m_unitMovedByMe->m_movementInfo.flags = movementInfo.GetMovementFlags(); } -void WorldSession::HandleRequestPetInfoOpcode(WorldPacket& /*recvData */) -{ - /* - TC_LOG_DEBUG("network", "WORLD: CMSG_REQUEST_PET_INFO"); - recvData.hexlike(); - */ -} - void WorldSession::HandleSetTaxiBenchmarkOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: CMSG_SET_TAXI_BENCHMARK_MODE"); diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index cfeb3ba299..988f1053a4 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -972,3 +972,27 @@ void WorldSession::SendPetAdded(int32 petSlot, int32 petNumber, int32 creatureID SendPacket(&data); } + +void WorldSession::HandleRequestPetInfoOpcode(WorldPacket& /*recvData*/) +{ + /* Handle the packet CMSG_REQUEST_PET_INFO - Send when player has a pet, and does /reload + * From: https://github.com/TrinityCore/TrinityCore/commit/6ebe1afeeccb847702c12e522bddaa7b5694dc38#comments + * This packet is also sent when + * You're controlling a vehicle (Player::VehicleSpellInitialize) + * You have a unit charmed (Player::CharmSpellInitialize) + * You're possessing a unit (Player::PossessSpellInitialize) + */ + + if (_player->GetPet() && _player->CanControlPet()) + _player->PetSpellInitialize(); + + if (Unit* charm = _player->GetCharm()) + { + if (charm->HasUnitState(UNIT_STATE_POSSESSED)) + _player->PossessSpellInitialize(); + else if (charm->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + _player->VehicleSpellInitialize(); + else + _player->CharmSpellInitialize(); + } +}