diff options
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
4 files changed, 26 insertions, 9 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index e3192efff29..b6c4020634e 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -814,20 +814,17 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) pCurrChar->GetMotionMaster()->Initialize(); pCurrChar->SendDungeonDifficulty(false); - WorldPacket data(SMSG_LOGIN_VERIFY_WORLD, 20); - data << pCurrChar->GetMapId(); - data << pCurrChar->GetPositionX(); - data << pCurrChar->GetPositionY(); - data << pCurrChar->GetPositionZ(); - data << pCurrChar->GetOrientation(); - SendPacket(&data); + WorldPackets::Character::LoginVerifyWorld loginVerifyWorld; + loginVerifyWorld.MapID = pCurrChar->GetMapId(); + loginVerifyWorld.Pos = pCurrChar->GetPosition(); + SendPacket(loginVerifyWorld.Write()); // load player specific part before send times LoadAccountData(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ACCOUNT_DATA), PER_CHARACTER_CACHE_MASK); SendAccountDataTimes(PER_CHARACTER_CACHE_MASK); bool featureBit4 = true; - data.Initialize(SMSG_FEATURE_SYSTEM_STATUS, 7); // checked in 4.2.2 + WorldPacket data(SMSG_FEATURE_SYSTEM_STATUS, 7); // checked in 4.2.2 data << uint8(2); // unknown value data << uint32(1); data << uint32(1); diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index a5faef9a483..4aa09e4df74 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -286,3 +286,11 @@ void WorldPackets::Character::PlayerLogin::Read() _worldPacket >> Guid; _worldPacket >> FarClip; } + +WorldPacket const* WorldPackets::Character::LoginVerifyWorld::Write() +{ + _worldPacket << int32(MapID); + _worldPacket << Pos.PositionXYZOStream(); + _worldPacket << uint32(Reason); + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 8d07769ed5a..465b1ee8ffb 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -254,6 +254,18 @@ namespace WorldPackets ObjectGuid Guid; ///< Guid of the player that is logging in float FarClip = 0.0f; ///< Visibility distance (for terrain) }; + + class LoginVerifyWorld final : public ServerPacket + { + public: + LoginVerifyWorld() : ServerPacket(SMSG_LOGIN_VERIFY_WORLD, 4 + 4 * 4 + 4) { } + + WorldPacket const* Write() override; + + int32 MapID = -1; + Position Pos; + uint32 Reason = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 12dc1fd096c..7d4cf5b8ec1 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1016,7 +1016,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIST_INVENTORY, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SETTIMESPEED, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_COMPLETE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_UNHANDLED); |