diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index c17826033c..69826e9fb7 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -341,51 +341,28 @@ void WorldSession::SendStableResult(uint8 result) SendPacket(packet.Write()); } -void WorldSession::HandleSetPetSlot(WorldPacket& recvData) +void WorldSession::HandleSetPetSlot(WorldPackets::Pet::SetPetSlot& packet) { /* - TC_LOG_DEBUG("network", "WORLD: Recv CMSG_STABLE_PET"); - ObjectGuid guid; - uint32 petId; - uint8 new_slot; - - recvData >> petId >> new_slot; - - guid[3] = recvData.ReadBit(); - guid[2] = recvData.ReadBit(); - guid[0] = recvData.ReadBit(); - guid[7] = recvData.ReadBit(); - guid[5] = recvData.ReadBit(); - guid[6] = recvData.ReadBit(); - guid[1] = recvData.ReadBit(); - guid[4] = recvData.ReadBit(); - - recvData.ReadByteSeq(guid[5]); - recvData.ReadByteSeq(guid[3]); - recvData.ReadByteSeq(guid[1]); - recvData.ReadByteSeq(guid[7]); - recvData.ReadByteSeq(guid[4]); - recvData.ReadByteSeq(guid[0]); - recvData.ReadByteSeq(guid[6]); - recvData.ReadByteSeq(guid[2]); - - if (!GetPlayer()->IsAlive()) + if (!_player->IsAlive()) { SendStableResult(STABLE_ERR_STABLE); return; } - if (!CheckStableMaster(guid)) + if (!CheckStableMaster(packet.StableMaster)) { SendStableResult(STABLE_ERR_STABLE); return; } - if (new_slot > PET_SLOT_LAST_STABLE_SLOT) + if (packet.DestSlot > PET_SLOT_LAST_STABLE_SLOT) { SendStableResult(STABLE_ERR_STABLE); return; } + + PlayerPetData* playerPetData = _player->GetPlayerPetDataById(petId); CreatureTemplate const* creatureInfo = nullptr; diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index c3fb9ae88e..052f4435dd 100644 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -166,3 +166,27 @@ WorldPacket const* WorldPackets::Pet::PetStableResult::Write() return &_worldPacket; } + +void WorldPackets::Pet::SetPetSlot::Read() +{ + _worldPacket >> PetNumber; + _worldPacket >> DestSlot; + + StableMaster[3] = _worldPacket.ReadBit(); + StableMaster[2] = _worldPacket.ReadBit(); + StableMaster[0] = _worldPacket.ReadBit(); + StableMaster[7] = _worldPacket.ReadBit(); + StableMaster[5] = _worldPacket.ReadBit(); + StableMaster[6] = _worldPacket.ReadBit(); + StableMaster[1] = _worldPacket.ReadBit(); + StableMaster[4] = _worldPacket.ReadBit(); + + _worldPacket.ReadByteSeq(StableMaster[5]); + _worldPacket.ReadByteSeq(StableMaster[3]); + _worldPacket.ReadByteSeq(StableMaster[1]); + _worldPacket.ReadByteSeq(StableMaster[7]); + _worldPacket.ReadByteSeq(StableMaster[4]); + _worldPacket.ReadByteSeq(StableMaster[0]); + _worldPacket.ReadByteSeq(StableMaster[6]); + _worldPacket.ReadByteSeq(StableMaster[2]); +} diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index dc4da7bf8c..f7faa2bdba 100644 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -208,6 +208,19 @@ namespace WorldPackets uint8 Result = 0; }; + + class SetPetSlot final : public ClientPacket + { + public: + SetPetSlot(WorldPacket&& packet) : ClientPacket(CMSG_SET_PET_SLOT, std::move(packet)) { } + + void Read() override; + + ObjectGuid StableMaster; + uint32 PetNumber = 0; + uint8 DestSlot = 0; + }; + } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 26fc1c0cc6..b7aaf7fc4a 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -203,6 +203,7 @@ namespace WorldPackets class DismissCritter; class PetAction; class CPetStableList; + class SetPetSlot; } namespace Quest @@ -918,7 +919,7 @@ class TC_GAME_API WorldSession void HandleNpcTextQueryOpcode(WorldPacket& recvPacket); void HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet); void HandleListStabledPetsOpcode(WorldPackets::Pet::CPetStableList& packet); - void HandleSetPetSlot(WorldPacket& recvPacket); + void HandleSetPetSlot(WorldPackets::Pet::SetPetSlot& packet); void HandleStableRevivePet(WorldPacket& recvPacket); void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);