aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJScias <DJScias@gmail.com>2015-05-28 18:46:45 +0200
committerCarbenium <carbenium@outlook.com>2015-06-02 04:16:24 +0200
commit33ba6b74bdf7eaa1a378998dc202cbee1411aec3 (patch)
treec523b01cd5f75b3a06417688f2fda51cf5c102fe
parentb15a0b96bf05e8d2ccf6cf8f9c09a6e58dcf5b0a (diff)
Core/PacketsIO: Updated and enabled SMSG_CHAR_CUSTOMIZE, SMSG_CHAR_CUSTOMIZE_FAILED
Closes #14789
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp25
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp37
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h29
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
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);