From e2643dabb0761b72fc3d70794898ef02f704bbb2 Mon Sep 17 00:00:00 2001 From: ForesterDev <11771800+ForesterDev@users.noreply.github.com> Date: Sat, 4 Apr 2020 20:34:43 +0400 Subject: [PATCH] Core/Packets: update & enabled CMSG_SHOWING_CLOAK, CMSG_SHOWING_HELM (#24394) (cherry picked from commit a47d57d1dbd7bc944972d7ef1773739e5019adde) Co-authored-by: DJScias # Conflicts: # src/server/game/Server/Packets/AllPackets.h # src/server/game/Server/Packets/CharacterPackets.cpp # src/server/game/Server/Packets/CharacterPackets.h # src/server/game/Server/WorldSession.h --- src/server/game/Handlers/CharacterHandler.cpp | 18 +++++++++-------- .../game/Server/Packets/CharacterPackets.cpp | 11 ++++++++++ .../game/Server/Packets/CharacterPackets.h | 20 +++++++++++++++++++ src/server/game/Server/WorldSession.h | 6 ++++-- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 5b3db1cf922..1875edb522b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1260,18 +1260,20 @@ void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket& recvData) _player->GetReputationMgr().SetInactive(replistid, inactive != 0); } -void WorldSession::HandleShowingHelmOpcode(WorldPacket& recvData) +void WorldSession::HandleShowingHelmOpcode(WorldPackets::Character::ShowingHelm& packet) { - TC_LOG_DEBUG("network", "CMSG_SHOWING_HELM for %s", _player->GetName().c_str()); - recvData.read_skip(); // unknown, bool? - _player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM); + if (packet.ShowHelm) + _player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM); + else + _player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM); } -void WorldSession::HandleShowingCloakOpcode(WorldPacket& recvData) +void WorldSession::HandleShowingCloakOpcode(WorldPackets::Character::ShowingCloak& packet) { - TC_LOG_DEBUG("network", "CMSG_SHOWING_CLOAK for %s", _player->GetName().c_str()); - recvData.read_skip(); // unknown, bool? - _player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK); + if (packet.ShowCloak) + _player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK); + else + _player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK); } void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData) diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 826a36a0bf6..d24a30a517b 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -215,3 +215,14 @@ WorldPacket const* WorldPackets::Character::CharacterLoginFailed::Write() _worldPacket << uint8(Code); return &_worldPacket; } + +void WorldPackets::Character::ShowingCloak::Read() +{ + _worldPacket >> ShowCloak; +} + +void WorldPackets::Character::ShowingHelm::Read() +{ + _worldPacket >> ShowHelm; +} + diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index f815bd84ec3..a67b3e5d129 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -125,6 +125,26 @@ namespace WorldPackets LoginFailureReason Code = LoginFailureReason::Failed; }; + + class ShowingCloak final : public ClientPacket + { + public: + ShowingCloak(WorldPacket&& packet) : ClientPacket(CMSG_SHOWING_CLOAK, std::move(packet)) { } + + void Read() override; + + bool ShowCloak = false; + }; + + class ShowingHelm final : public ClientPacket + { + public: + ShowingHelm(WorldPacket&& packet) : ClientPacket(CMSG_SHOWING_HELM, std::move(packet)) { } + + void Read() override; + + bool ShowHelm = false; + }; } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 4c2322729fe..a220ff6a0d4 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -83,6 +83,8 @@ namespace WorldPackets namespace Character { class EnumCharacters; + class ShowingCloak; + class ShowingHelm; enum class LoginFailureReason : uint8; } @@ -633,8 +635,8 @@ class TC_GAME_API WorldSession void HandleMountSpecialAnimOpcode(WorldPacket& recvdata); // character view - void HandleShowingHelmOpcode(WorldPacket& recvData); - void HandleShowingCloakOpcode(WorldPacket& recvData); + void HandleShowingHelmOpcode(WorldPackets::Character::ShowingHelm& packet); + void HandleShowingCloakOpcode(WorldPackets::Character::ShowingCloak& packet); // repair void HandleRepairItemOpcode(WorldPacket& recvPacket);