From 0e449bf738fdf10eb63bf64f664df1b76723502d Mon Sep 17 00:00:00 2001 From: zamalaev Date: Wed, 19 Feb 2020 20:39:49 +0000 Subject: [PATCH] SMSG_CHAR_CREATE 5.4.8 (18414) --- src/game/Server/Opcodes.h | 2 +- src/game/WorldHandlers/CharacterHandler.cpp | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/game/Server/Opcodes.h b/src/game/Server/Opcodes.h index 2c483d907..06a00f4e8 100644 --- a/src/game/Server/Opcodes.h +++ b/src/game/Server/Opcodes.h @@ -104,7 +104,7 @@ enum Opcodes CMSG_CHAR_ENUM = 0x0848, // 5.4.1 17538 CMSG_CHAR_DELETE = 0x113B, // 5.4.7 18019 SMSG_AUTH_SRP6_RESPONSE = 0x103A, - SMSG_CHAR_CREATE = 0x2D05, // 4.3.4 15595 + SMSG_CHAR_CREATE = 0x11C3, // 5.4.8 18414 SMSG_CHAR_ENUM = 0x10B0, // 4.3.4 15595 SMSG_CHAR_DELETE = 0x0304, // 4.3.4 15595 CMSG_PLAYER_LOGIN = 0x17D3, // 5.4.7 18019 diff --git a/src/game/WorldHandlers/CharacterHandler.cpp b/src/game/WorldHandlers/CharacterHandler.cpp index 0c3beee0c..ba0396641 100644 --- a/src/game/WorldHandlers/CharacterHandler.cpp +++ b/src/game/WorldHandlers/CharacterHandler.cpp @@ -213,16 +213,20 @@ void WorldSession::HandleCharEnumOpcode(WorldPacket & /*recv_data*/) PET_SAVE_AS_CURRENT, GetAccountId()); } -void WorldSession::HandleCharCreateOpcode(WorldPacket& recv_data) +void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData) { // extract other data required for player creating - uint8 gender, skin, face, hairStyle, hairColor, facialHair, outfitId; - std::string name; - uint8 race_, class_; + uint8 hairStyle, face, facialHair, hairColor, race_, class_, skin, gender, outfitId; - recv_data >> class_ >> hairStyle >> facialHair >> race_; - recv_data >> face >> skin >> gender >> hairColor >> outfitId; - name = recv_data.ReadString(recv_data.ReadBits(8)); + recvData >> outfitId >> hairStyle >> class_ >> skin; + recvData >> face >> race_ >> facialHair >> gender >> hairColor; + + uint32 nameLength = recvData.ReadBits(6); + uint8 unk = recvData.ReadBit(); + std::string name = recvData.ReadString(nameLength); + + if (unk) + recvData.read_skip(); WorldPacket data(SMSG_CHAR_CREATE, 1); // returned with diff.values in all cases