mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Packets: Added CMSG_PAGE_TEXT_QUERY and SMSG_PAGE_TEXT_QUERY_RESPONSE
Moved QueryPlayerName to QueryPackets
This commit is contained in:
@@ -39,7 +39,7 @@ void WorldSession::SendNameQueryOpcode(ObjectGuid guid)
|
||||
Player* player = ObjectAccessor::FindConnectedPlayer(guid);
|
||||
CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid);
|
||||
|
||||
WorldPackets::Character::PlayerNameResponse response;
|
||||
WorldPackets::Query::QueryPlayerNameResponse response;
|
||||
response.Player = guid;
|
||||
|
||||
if (characterInfo)
|
||||
@@ -68,7 +68,7 @@ void WorldSession::SendNameQueryOpcode(ObjectGuid guid)
|
||||
SendPacket(response.Write());
|
||||
}
|
||||
|
||||
void WorldSession::HandleNameQueryOpcode(WorldPackets::Character::QueryPlayerName& packet)
|
||||
void WorldSession::HandleNameQueryOpcode(WorldPackets::Query::QueryPlayerName& packet)
|
||||
{
|
||||
SendNameQueryOpcode(packet.Player);
|
||||
}
|
||||
@@ -326,41 +326,39 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData)
|
||||
}
|
||||
|
||||
/// Only _static_ data is sent in this packet !!!
|
||||
void WorldSession::HandlePageTextQueryOpcode(WorldPacket& recvData)
|
||||
void WorldSession::HandlePageTextQueryOpcode(WorldPackets::Query::QueryPageText& packet)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: Received CMSG_PAGE_TEXT_QUERY");
|
||||
|
||||
uint32 pageID;
|
||||
recvData >> pageID;
|
||||
recvData.read_skip<uint64>(); // guid
|
||||
|
||||
uint32 pageID = packet.PageTextID;
|
||||
|
||||
while (pageID)
|
||||
{
|
||||
PageText const* pageText = sObjectMgr->GetPageText(pageID);
|
||||
// guess size
|
||||
WorldPacket data(SMSG_PAGE_TEXT_QUERY_RESPONSE, 50);
|
||||
data << pageID;
|
||||
|
||||
WorldPackets::Query::QueryPageTextResponse response;
|
||||
response.PageTextID = pageID;
|
||||
|
||||
if (!pageText)
|
||||
{
|
||||
data << "Item page missing.";
|
||||
data << uint32(0);
|
||||
response.Allow = false;
|
||||
pageID = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string Text = pageText->Text;
|
||||
|
||||
response.Allow = true;
|
||||
response.Info.ID = pageID;
|
||||
|
||||
int loc_idx = GetSessionDbLocaleIndex();
|
||||
if (loc_idx >= 0)
|
||||
if (PageTextLocale const* player = sObjectMgr->GetPageTextLocale(pageID))
|
||||
ObjectMgr::GetLocaleString(player->Text, loc_idx, Text);
|
||||
ObjectMgr::GetLocaleString(player->Text, loc_idx, response.Info.Text);
|
||||
|
||||
data << Text;
|
||||
data << uint32(pageText->NextPageID);
|
||||
response.Info.NextPageID = pageText->NextPageID;
|
||||
pageID = pageText->NextPageID;
|
||||
}
|
||||
SendPacket(&data);
|
||||
|
||||
SendPacket(response.Write());
|
||||
|
||||
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_PAGE_TEXT_QUERY_RESPONSE");
|
||||
}
|
||||
|
||||
@@ -395,46 +395,3 @@ void WorldPackets::Character::LoadingScreenNotify::Read()
|
||||
_worldPacket >> MapID;
|
||||
Showing = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Character::QueryPlayerName::Read()
|
||||
{
|
||||
_worldPacket >> Player;
|
||||
|
||||
Hint.VirtualRealmAddress.HasValue = _worldPacket.ReadBit();
|
||||
Hint.NativeRealmAddress.HasValue = _worldPacket.ReadBit();
|
||||
|
||||
if (Hint.VirtualRealmAddress.HasValue)
|
||||
_worldPacket >> Hint.VirtualRealmAddress.value;
|
||||
|
||||
if (Hint.NativeRealmAddress.HasValue)
|
||||
_worldPacket >> Hint.NativeRealmAddress.value;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Character::PlayerNameResponse::Write()
|
||||
{
|
||||
_worldPacket << Result;
|
||||
_worldPacket << Player;
|
||||
|
||||
if (Result == 0)
|
||||
{
|
||||
_worldPacket.WriteBits(Data.Name.length(), 7);
|
||||
|
||||
for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
|
||||
_worldPacket.WriteBits(Data.DeclinedNames.name[i].length(), 7);
|
||||
|
||||
for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
|
||||
_worldPacket.WriteString(Data.DeclinedNames.name[i]);
|
||||
|
||||
_worldPacket << Data.AccountID;
|
||||
_worldPacket << Data.BnetAccountID;
|
||||
_worldPacket << Data.GuidActual;
|
||||
_worldPacket << Data.VirtualRealmAddress;
|
||||
_worldPacket << Data.Race;
|
||||
_worldPacket << Data.Sex;
|
||||
_worldPacket << Data.ClassID;
|
||||
_worldPacket << Data.Level;
|
||||
_worldPacket.WriteString(Data.Name);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -473,50 +473,6 @@ namespace WorldPackets
|
||||
int32 MapID = -1;
|
||||
bool Showing = false;
|
||||
};
|
||||
|
||||
struct PlayerGuidLookupHint
|
||||
{
|
||||
Optional<uint32> VirtualRealmAddress; ///< current realm (?) (identifier made from the Index, BattleGroup and Region)
|
||||
Optional<uint32> NativeRealmAddress; ///< original realm (?) (identifier made from the Index, BattleGroup and Region)
|
||||
};
|
||||
|
||||
struct PlayerGuidLookupData
|
||||
{
|
||||
bool IsDeleted = false;
|
||||
ObjectGuid AccountID;
|
||||
ObjectGuid BnetAccountID;
|
||||
ObjectGuid GuidActual;
|
||||
std::string Name;
|
||||
uint32 VirtualRealmAddress = 0;
|
||||
uint8 Race = RACE_NONE;
|
||||
uint8 Sex = GENDER_NONE;
|
||||
uint8 ClassID = CLASS_NONE;
|
||||
uint8 Level = 0;
|
||||
DeclinedName DeclinedNames;
|
||||
};
|
||||
|
||||
class QueryPlayerName final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
QueryPlayerName(WorldPacket&& packet) : ClientPacket(CMSG_NAME_QUERY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Player;
|
||||
PlayerGuidLookupHint Hint;
|
||||
};
|
||||
|
||||
class PlayerNameResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
PlayerNameResponse() : ServerPacket(SMSG_NAME_QUERY_RESPONSE, 60) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid Player;
|
||||
uint8 Result = 0; // 0 - full packet, != 0 - only guid
|
||||
PlayerGuidLookupData Data;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -88,3 +88,68 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Query::QueryPlayerName::Read()
|
||||
{
|
||||
_worldPacket >> Player;
|
||||
|
||||
Hint.VirtualRealmAddress.HasValue = _worldPacket.ReadBit();
|
||||
Hint.NativeRealmAddress.HasValue = _worldPacket.ReadBit();
|
||||
|
||||
if (Hint.VirtualRealmAddress.HasValue)
|
||||
_worldPacket >> Hint.VirtualRealmAddress.value;
|
||||
|
||||
if (Hint.NativeRealmAddress.HasValue)
|
||||
_worldPacket >> Hint.NativeRealmAddress.value;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write()
|
||||
{
|
||||
_worldPacket << Result;
|
||||
_worldPacket << Player;
|
||||
|
||||
if (Result == 0)
|
||||
{
|
||||
_worldPacket.WriteBits(Data.Name.length(), 7);
|
||||
|
||||
for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
|
||||
_worldPacket.WriteBits(Data.DeclinedNames.name[i].length(), 7);
|
||||
|
||||
for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
|
||||
_worldPacket.WriteString(Data.DeclinedNames.name[i]);
|
||||
|
||||
_worldPacket << Data.AccountID;
|
||||
_worldPacket << Data.BnetAccountID;
|
||||
_worldPacket << Data.GuidActual;
|
||||
_worldPacket << Data.VirtualRealmAddress;
|
||||
_worldPacket << Data.Race;
|
||||
_worldPacket << Data.Sex;
|
||||
_worldPacket << Data.ClassID;
|
||||
_worldPacket << Data.Level;
|
||||
_worldPacket.WriteString(Data.Name);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Query::QueryPageText::Read()
|
||||
{
|
||||
_worldPacket >> PageTextID;
|
||||
_worldPacket >> ItemGUID;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write()
|
||||
{
|
||||
_worldPacket << PageTextID;
|
||||
_worldPacket.WriteBit(Allow);
|
||||
|
||||
if (Allow)
|
||||
{
|
||||
_worldPacket << Info.ID;
|
||||
_worldPacket << Info.NextPageID;
|
||||
_worldPacket.WriteBits(Info.Text.length(), 12);
|
||||
_worldPacket.WriteString(Info.Text);
|
||||
}
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace WorldPackets
|
||||
class QueryCreatureResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
QueryCreatureResponse() : ServerPacket(SMSG_CREATURE_QUERY_RESPONSE, 2+4+4+4+12) { }
|
||||
QueryCreatureResponse() : ServerPacket(SMSG_CREATURE_QUERY_RESPONSE, 76) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
@@ -67,6 +67,80 @@ namespace WorldPackets
|
||||
CreatureStats Stats;
|
||||
uint32 CreatureID = 0;
|
||||
};
|
||||
|
||||
struct PlayerGuidLookupHint
|
||||
{
|
||||
Optional<uint32> VirtualRealmAddress; ///< current realm (?) (identifier made from the Index, BattleGroup and Region)
|
||||
Optional<uint32> NativeRealmAddress; ///< original realm (?) (identifier made from the Index, BattleGroup and Region)
|
||||
};
|
||||
|
||||
class QueryPlayerName final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
QueryPlayerName(WorldPacket&& packet) : ClientPacket(CMSG_NAME_QUERY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid Player;
|
||||
PlayerGuidLookupHint Hint;
|
||||
};
|
||||
|
||||
struct PlayerGuidLookupData
|
||||
{
|
||||
bool IsDeleted = false;
|
||||
ObjectGuid AccountID;
|
||||
ObjectGuid BnetAccountID;
|
||||
ObjectGuid GuidActual;
|
||||
std::string Name;
|
||||
uint32 VirtualRealmAddress = 0;
|
||||
uint8 Race = RACE_NONE;
|
||||
uint8 Sex = GENDER_NONE;
|
||||
uint8 ClassID = CLASS_NONE;
|
||||
uint8 Level = 0;
|
||||
DeclinedName DeclinedNames;
|
||||
};
|
||||
|
||||
class QueryPlayerNameResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
QueryPlayerNameResponse() : ServerPacket(SMSG_NAME_QUERY_RESPONSE, 60) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
ObjectGuid Player;
|
||||
uint8 Result = 0; // 0 - full packet, != 0 - only guid
|
||||
PlayerGuidLookupData Data;
|
||||
};
|
||||
|
||||
class QueryPageText final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
QueryPageText(WorldPacket&& packet) : ClientPacket(CMSG_PAGE_TEXT_QUERY, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
ObjectGuid ItemGUID;
|
||||
uint32 PageTextID = 0;
|
||||
};
|
||||
|
||||
struct PageTextInfo
|
||||
{
|
||||
uint32 ID = 0;
|
||||
uint32 NextPageID = 0;
|
||||
std::string Text;
|
||||
};
|
||||
|
||||
class QueryPageTextResponse final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
QueryPageTextResponse() : ServerPacket(SMSG_PAGE_TEXT_QUERY_RESPONSE, 15) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
bool Allow = false;
|
||||
PageTextInfo Info;
|
||||
uint32 PageTextID = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -471,7 +471,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MOVE_TIME_SKIPPED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MOVE_WATER_WALK_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_MOVE_WORLDPORT_ACK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode );
|
||||
DEFINE_HANDLER(CMSG_NAME_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Character::QueryPlayerName, &WorldSession::HandleNameQueryOpcode);
|
||||
DEFINE_HANDLER(CMSG_NAME_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryPlayerName, &WorldSession::HandleNameQueryOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_NEXT_CINEMATIC_CAMERA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleNextCinematicCamera );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_NPC_TEXT_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleNpcTextQueryOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OBJECT_UPDATE_FAILED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleObjectUpdateFailedOpcode );
|
||||
@@ -480,7 +480,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPENING_CINEMATIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOpeningCinematic );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPEN_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOpenItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_OPT_OUT_OF_LOOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleOptOutOfLootOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PAGE_TEXT_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePageTextQueryOpcode );
|
||||
DEFINE_HANDLER(CMSG_PAGE_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QueryPageText, &WorldSession::HandlePageTextQueryOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_SILENCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PARTY_UNSILENCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_PETITION_BUY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePetitionBuyOpcode );
|
||||
@@ -1138,7 +1138,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_CONTAINER, STATUS_UNHANDLED);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_UNHANDLED);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OVERRIDE_LIGHT, STATUS_UNHANDLED);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAGE_TEXT_QUERY_RESPONSE, STATUS_UNHANDLED);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAGE_TEXT_QUERY_RESPONSE, STATUS_NEVER);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTYKILLLOG, STATUS_UNHANDLED);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_COMMAND_RESULT, STATUS_UNHANDLED);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATS, STATUS_UNHANDLED);
|
||||
|
||||
@@ -94,7 +94,6 @@ namespace WorldPackets
|
||||
class LogoutRequest;
|
||||
class LogoutCancel;
|
||||
class LoadingScreenNotify;
|
||||
class QueryPlayerName;
|
||||
}
|
||||
|
||||
namespace Guild
|
||||
@@ -115,6 +114,8 @@ namespace WorldPackets
|
||||
namespace Query
|
||||
{
|
||||
class QueryCreature;
|
||||
class QueryPlayerName;
|
||||
class QueryPageText;
|
||||
}
|
||||
|
||||
namespace Movement
|
||||
@@ -586,7 +587,7 @@ class WorldSession
|
||||
void HandleMeetingStoneInfo(WorldPacket& recPacket);
|
||||
void HandleGameobjectReportUse(WorldPacket& recvPacket);
|
||||
|
||||
void HandleNameQueryOpcode(WorldPackets::Character::QueryPlayerName& packet);
|
||||
void HandleNameQueryOpcode(WorldPackets::Query::QueryPlayerName& packet);
|
||||
|
||||
void HandleQueryTimeOpcode(WorldPacket& recvPacket);
|
||||
|
||||
@@ -839,7 +840,7 @@ class WorldSession
|
||||
void HandleCompleteCinematic(WorldPacket& recvPacket);
|
||||
void HandleNextCinematicCamera(WorldPacket& recvPacket);
|
||||
|
||||
void HandlePageTextQueryOpcode(WorldPacket& recvPacket);
|
||||
void HandlePageTextQueryOpcode(WorldPackets::Query::QueryPageText& packet);
|
||||
|
||||
void HandleTutorialFlag (WorldPacket& recvData);
|
||||
void HandleTutorialClear(WorldPacket& recvData);
|
||||
|
||||
Reference in New Issue
Block a user