diff options
| author | Intel <chemicstry@gmail.com> | 2014-11-15 17:13:41 +0200 |
|---|---|---|
| committer | Intel <chemicstry@gmail.com> | 2014-11-15 17:40:04 +0200 |
| commit | cd9be923955c57a0ec5054897ac377a964f502ca (patch) | |
| tree | e9802959ec45416d897f5069ba850e7399173289 /src/server/game/Server | |
| parent | 96fa1eb5ecb6667b4150b1d9bffa7efed79fedd8 (diff) | |
Core/Packets: Added CMSG_PAGE_TEXT_QUERY and SMSG_PAGE_TEXT_QUERY_RESPONSE
Moved QueryPlayerName to QueryPackets
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.cpp | 43 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/CharacterPackets.h | 44 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.cpp | 65 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QueryPackets.h | 76 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 7 |
6 files changed, 147 insertions, 94 deletions
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 9876da54ae3..8fae98cf8f2 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -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; -} diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 8ffd3622539..386c407b10f 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -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; - }; } } diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 3076c221c71..eec966e2cfb 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -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; +} diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 49bb5847400..b7c57e94747 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -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; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index c5cff72df4e..89b130c61f4 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -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); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 5b5cde1bc63..2db482e220c 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -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); |
