diff options
author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-05-10 15:37:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-10 14:37:44 +0200 |
commit | 5eaf68670ac13ae4b594b0fa2b6d36da61014b68 (patch) | |
tree | 0ceee3839ddf7765422b53501a48bc46338bf9d0 /src/server/game/Handlers/MiscHandler.cpp | |
parent | 772f506a3b426e27ee64b0506aed06219c8d7747 (diff) |
Core/PacketIO: Updated logout opcodes (#24519)
(cherry picked from commit f59a701e2903d6ef023cd10aa7f4a80a524a8c07)
# Conflicts:
# src/server/database/Database/Implementation/LoginDatabase.cpp
# src/server/database/Database/Implementation/LoginDatabase.h
# src/server/game/Handlers/MiscHandler.cpp
# src/server/game/Server/Packets/AuthenticationPackets.cpp
# src/server/game/Server/Packets/AuthenticationPackets.h
# src/server/game/Server/Packets/CharacterPackets.h
# src/server/game/Server/Protocol/Opcodes.cpp
# src/server/game/Server/Protocol/Opcodes.h
# src/server/game/Server/WorldSession.cpp
# src/server/game/Server/WorldSession.h
# src/server/game/Server/WorldSocket.cpp
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 42 |
1 files changed, 15 insertions, 27 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index a5f8b7a2da7..3b507697b1a 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -21,6 +21,7 @@ #include "BattlefieldMgr.h" #include "Battleground.h" #include "BattlegroundMgr.h" +#include "CharacterPackets.h" #include "Chat.h" #include "CinematicMgr.h" #include "Common.h" @@ -352,10 +353,8 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: Send SMSG_WHO Message"); } -void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) +void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& /*logoutRequest*/) { - TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_LOGOUT_REQUEST Message, security - %u", GetSecurity()); - if (ObjectGuid lguid = GetPlayer()->GetLootGUID()) DoLootRelease(lguid); @@ -373,18 +372,18 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) else if (GetPlayer()->duel || GetPlayer()->HasAura(9454)) // is dueling or frozen by GM via freeze command reason = 2; // FIXME - Need the correct value - WorldPacket data(SMSG_LOGOUT_RESPONSE, 1+4); - data << uint32(reason); - data << uint8(instantLogout); - SendPacket(&data); + WorldPackets::Character::LogoutResponse logoutResponse; + logoutResponse.LogoutResult = reason; + logoutResponse.Instant = instantLogout; + SendPacket(logoutResponse.Write()); if (reason) { - LogoutRequest(0); + SetLogoutStartTime(0); return; } - //instant logout in taverns/cities or on taxi or for admins, gm's, mod's if its enabled in worldserver.conf + // instant logout in taverns/cities or on taxi or for admins, gm's, mod's if its enabled in worldserver.conf if (instantLogout) { LogoutPlayer(true); @@ -396,43 +395,32 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) { if (GetPlayer()->GetStandState() == UNIT_STAND_STATE_STAND) GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT); - - data.Initialize(SMSG_FORCE_MOVE_ROOT, (8+4)); // guess size - data << GetPlayer()->GetPackGUID(); - data << (uint32)2; - SendPacket(&data); + GetPlayer()->SetRooted(true); GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } - LogoutRequest(GameTime::GetGameTime()); + SetLogoutStartTime(GameTime::GetGameTime()); } -void WorldSession::HandlePlayerLogoutOpcode(WorldPacket& /*recvData*/) +void WorldSession::HandlePlayerLogoutOpcode(WorldPackets::Character::PlayerLogout& /*playerLogout*/) { - TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_PLAYER_LOGOUT Message"); } -void WorldSession::HandleLogoutCancelOpcode(WorldPacket& /*recvData*/) +void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& /*logoutCancel*/) { - TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_LOGOUT_CANCEL Message"); - // Player have already logged out serverside, too late to cancel if (!GetPlayer()) return; - LogoutRequest(0); + SetLogoutStartTime(0); - WorldPacket data(SMSG_LOGOUT_CANCEL_ACK, 0); - SendPacket(&data); + SendPacket(WorldPackets::Character::LogoutCancelAck().Write()); // not remove flags if can't free move - its not set in Logout request code. if (GetPlayer()->CanFreeMove()) { //!we can move again - data.Initialize(SMSG_FORCE_MOVE_UNROOT, 8); // guess size - data << GetPlayer()->GetPackGUID(); - data << uint32(0); - SendPacket(&data); + GetPlayer()->SetRooted(false); //! Stand Up GetPlayer()->SetStandState(UNIT_STAND_STATE_STAND); |