diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 29 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 |
4 files changed, 77 insertions, 18 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 65f05e4dbbb..7b22d46d67b 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -2574,25 +2574,18 @@ void WorldSession::SendCharRename(ResponseCodes result, WorldPackets::Character: void WorldSession::SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo) { - /// @todo: fix 6.x implementation - (void)result; - (void)customizeInfo; - /* - WorldPacket data(SMSG_CHAR_CUSTOMIZE, 1 + 8 + customizeInfo.NewName.size() + 1 + 6); - data << uint8(result); if (result == RESPONSE_SUCCESS) { - data << customizeInfo.Guid; - data << customizeInfo.NewName; - data << uint8(customizeInfo.Gender); - data << uint8(customizeInfo.Skin); - data << uint8(customizeInfo.Face); - data << uint8(customizeInfo.HairStyle); - data << uint8(customizeInfo.HairColor); - data << uint8(customizeInfo.FacialHair); + WorldPackets::Character::CharCustomizeResponse response(customizeInfo); + SendPacket(response.Write()); + } + else + { + WorldPackets::Character::CharCustomizeFailed failed; + failed.Result = uint8(result); + failed.CharGUID = customizeInfo->CharGUID; + SendPacket(failed.Write()); } - SendPacket(&data); - */ } void WorldSession::SendCharFactionChange(ResponseCodes result, WorldPackets::Character::CharRaceOrFactionChangeInfo const* factionChangeInfo) diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index a48639f1b03..9c6bb07f56e 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -498,3 +498,40 @@ WorldPacket const* WorldPackets::Character::SetFactionVisible::Write() _worldPacket << FactionIndex; return &_worldPacket; } + +WorldPackets::Character::CharCustomizeResponse::CharCustomizeResponse(WorldPackets::Character::CharCustomizeInfo const* info) + : ServerPacket(SMSG_CHAR_CUSTOMIZE, 16 + 1 + 1 + 1 + 1 + 1 + 1 + 1) +{ + CharGUID = info->CharGUID; + SexID = info->SexID; + SkinID = info->SkinID; + HairColorID = info->HairColorID; + HairStyleID = info->HairStyleID; + FacialHairStyleID = info->FacialHairStyleID; + FaceID = info->FaceID; + CharName = info->CharName; +} + +WorldPacket const* WorldPackets::Character::CharCustomizeResponse::Write() +{ + _worldPacket << CharGUID; + _worldPacket << uint8(SexID); + _worldPacket << uint8(SkinID); + _worldPacket << uint8(HairColorID); + _worldPacket << uint8(HairStyleID); + _worldPacket << uint8(FacialHairStyleID); + _worldPacket << uint8(FaceID); + _worldPacket.WriteBits(CharName.length(), 6); + _worldPacket.FlushBits(); + _worldPacket.WriteString(CharName); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Character::CharCustomizeFailed::Write() +{ + _worldPacket << uint8(Result); + _worldPacket << CharGUID; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index b3f280f9411..10f1053f8ee 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -686,6 +686,35 @@ namespace WorldPackets uint32 FactionIndex = 0; }; + + class CharCustomizeResponse final : public ServerPacket + { + public: + CharCustomizeResponse() : ServerPacket(SMSG_CHAR_CUSTOMIZE, 16 + 1 + 1 + 1 + 1 + 1 + 1 + 1) { } + CharCustomizeResponse(CharCustomizeInfo const* customizeInfo); + + WorldPacket const* Write() override; + + ObjectGuid CharGUID; + std::string CharName; + uint8 SexID = 0; + uint8 SkinID = 0; + uint8 HairColorID = 0; + uint8 HairStyleID = 0; + uint8 FacialHairStyleID = 0; + uint8 FaceID = 0; + }; + + class CharCustomizeFailed final : public ServerPacket + { + public: + CharCustomizeFailed() : ServerPacket(SMSG_CHAR_CUSTOMIZE_FAILED, 1 + 16) { } + + WorldPacket const* Write() override; + + uint8 Result = 0; + ObjectGuid CharGUID; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 3a2397eabdc..70a22f0b1bb 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1001,8 +1001,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_UPGRADE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_UPGRADE_STARTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CUSTOMIZE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CUSTOMIZE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CUSTOMIZE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_CUSTOMIZE_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAR_FACTION_CHANGE_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_AUTO_RESPONDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |