Core/Packets: converted SMSG_QUERY_PLAYER_NAME_RESPONSE to packet class

This commit is contained in:
Ovahlord
2021-12-29 21:05:42 +01:00
parent 8202480a93
commit 2916a38ea6
5 changed files with 53 additions and 26 deletions

View File

@@ -35,34 +35,16 @@
void WorldSession::SendNameQueryOpcode(ObjectGuid guid)
{
Player* player = ObjectAccessor::FindConnectedPlayer(guid);
CharacterCacheEntry const* nameData = sCharacterCache->GetCharacterCacheByGuid(guid);
WorldPacket data(SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+10));
data << guid.WriteAsPacked();
if (!nameData)
{
data << uint8(1); // name unknown
SendPacket(&data);
return;
}
WorldPackets::Query::QueryPlayerNameResponse response;
response.Player = guid;
data << uint8(0); // name known
data << nameData->Name; // played name
data << uint8(0); // realm name - only set for cross realm interaction (such as Battlegrounds)
data << uint8(nameData->Race);
data << uint8(nameData->Sex);
data << uint8(nameData->Class);
if (DeclinedName const* names = (player ? player->GetDeclinedNames() : nullptr))
{
data << uint8(1); // Name is declined
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
data << names->name[i];
}
if (response.Data.Initialize(guid, player))
response.Result = RESPONSE_SUCCESS; // name known
else
data << uint8(0); // Name is not declined
response.Result = RESPONSE_FAILURE; // name unknown
SendPacket(&data);
SendPacket(response.Write());
}
void WorldSession::HandleNameQueryOpcode(WorldPacket& recvData)

View File

@@ -175,6 +175,9 @@ bool WorldPackets::Query::PlayerGuidLookupData::Initialize(ObjectGuid const& gui
Sex = player->getGender();
ClassID = player->getClass();
Level = player->getLevel();
if (DeclinedName const* names = player->GetDeclinedNames())
DeclinedNames = *names;
}
else
{
@@ -187,3 +190,30 @@ bool WorldPackets::Query::PlayerGuidLookupData::Initialize(ObjectGuid const& gui
return true;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupData const& lookupData)
{
data << lookupData.Name;
data << lookupData.RealmName;
data << uint8(lookupData.Race);
data << uint8(lookupData.Sex);
data << uint8(lookupData.ClassID);
data << bool(lookupData.DeclinedNames.has_value());
if (lookupData.DeclinedNames.has_value())
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
data << lookupData.DeclinedNames->name[i];
return data;
}
WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write()
{
_worldPacket << Player.WriteAsPacked();
_worldPacket << uint8(Result);
if (Result == RESPONSE_SUCCESS)
_worldPacket << Data;
return &_worldPacket;
}

View File

@@ -23,6 +23,7 @@
#include "GameObjectData.h"
#include "DB2Stores.h"
#include "ObjectGuid.h"
#include "Optional.h"
#include "QuestDef.h"
#include "SharedDefines.h"
@@ -168,10 +169,24 @@ namespace WorldPackets
bool Initialize(ObjectGuid const& guid, Player const* player = nullptr);
std::string Name;
std::string RealmName;
uint8 Race = RACE_NONE;
uint8 Sex = GENDER_NONE;
uint8 ClassID = CLASS_NONE;
uint8 Level = 0;
Optional<DeclinedName> DeclinedNames;
};
class QueryPlayerNameResponse final : public ServerPacket
{
public:
QueryPlayerNameResponse() : ServerPacket(SMSG_QUERY_PLAYER_NAME_RESPONSE, 8+1+1+1+1+1+10) { }
WorldPacket const* Write() override;
ObjectGuid Player;
uint8 Result = 0; // 0 - full packet, != 0 - only guid
PlayerGuidLookupData Data;
};
}
}

View File

@@ -1069,7 +1069,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_WATER_WALK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_NAME_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_TAXI_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_WORLD, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_WORLD_ABORT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1134,6 +1133,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PLAYER_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUESTS_COMPLETED_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);

View File

@@ -1023,7 +1023,6 @@ enum OpcodeServer
SMSG_MOVE_UPDATE_WALK_SPEED = 0x54A2,
SMSG_MOVE_WATER_WALK = 0x75B1,
SMSG_MULTIPLE_PACKETS = 0x6736,
SMSG_NAME_QUERY_RESPONSE = 0x6E04,
SMSG_NEW_TAXI_PATH = 0x4B35,
SMSG_NEW_WORLD = 0x79B1,
SMSG_NEW_WORLD_ABORT = 0x14B7,
@@ -1091,6 +1090,7 @@ enum OpcodeServer
SMSG_PVP_CREDIT = 0x6015,
SMSG_PVP_LOG_DATA = 0x5CB2,
SMSG_PVP_OPTIONS_ENABLED = 0x50A1,
SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x6E04,
SMSG_QUERY_QUESTS_COMPLETED_RESPONSE = 0x6314,
SMSG_QUERY_TIME_RESPONSE = 0x2124,
SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x2427,