diff options
| author | Meji <alvaro.megias@outlook.com> | 2024-08-30 18:11:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-30 18:11:07 +0200 |
| commit | efa76de54011d40d69412d2af23cb071ed352688 (patch) | |
| tree | 8a02bf7b0aec70912f33ffd1b380c11adea0854e /src/server/game/Server | |
| parent | f213a580540bfc1ec3a7263782aa64d317afc4ce (diff) | |
Core/PacketIO: Implemented UIMap questlines (#30030)
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 22 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
4 files changed, 46 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 3b63196b7d1..6c8b9517a78 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -858,4 +858,24 @@ void ChoiceResponse::Read() _worldPacket >> ResponseIdentifier; IsReroll = _worldPacket.ReadBit(); } + +WorldPacket const* UiMapQuestLinesResponse::Write() +{ + _worldPacket << int32(UiMapID); + _worldPacket << uint32(QuestLineXQuestIDs.size()); + _worldPacket << uint32(QuestIDs.size()); + + for (uint32 const& questLineQuestID : QuestLineXQuestIDs) + _worldPacket << uint32(questLineQuestID); + + for (uint32 const& questID : QuestIDs) + _worldPacket << uint32(questID); + + return &_worldPacket; +} + +void UiMapQuestLinesRequest::Read() +{ + _worldPacket >> UiMapID; +} } diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 2e295a44b9b..2fb56be4c3f 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -788,6 +788,28 @@ namespace WorldPackets int32 ResponseIdentifier = 0; bool IsReroll = false; }; + + class UiMapQuestLinesResponse final : public ServerPacket + { + public: + UiMapQuestLinesResponse() : ServerPacket(SMSG_UI_MAP_QUEST_LINES_RESPONSE, 4) { } + + WorldPacket const* Write() override; + + int32 UiMapID = 0; + std::vector<uint32> QuestLineXQuestIDs; + std::vector<uint32> QuestIDs; + }; + + class UiMapQuestLinesRequest final : public ClientPacket + { + public: + UiMapQuestLinesRequest(WorldPacket&& packet) : ClientPacket(CMSG_UI_MAP_QUEST_LINES_REQUEST, std::move(packet)) { } + + void Read() override; + + int32 UiMapID = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 82e261ff5bf..29bc0765015 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -981,7 +981,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems); DEFINE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetition); DEFINE_HANDLER(CMSG_TUTORIAL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag); - DEFINE_HANDLER(CMSG_UI_MAP_QUEST_LINES_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_UI_MAP_QUEST_LINES_REQUEST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUiMapQuestLinesRequest); DEFINE_HANDLER(CMSG_UNACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnacceptTradeOpcode); DEFINE_HANDLER(CMSG_UNDELETE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharUndeleteOpcode); DEFINE_HANDLER(CMSG_UNLEARN_SKILL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUnlearnSkillOpcode); @@ -2161,7 +2161,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_MOVIE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TURN_IN_PETITION_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TUTORIAL_FLAGS, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_MAP_QUEST_LINES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_MAP_QUEST_LINES_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_CHARACTER_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 1b61d60b027..1c3052a3f8a 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -674,6 +674,7 @@ namespace WorldPackets class PushQuestToParty; class RequestWorldQuestUpdate; class ChoiceResponse; + class UiMapQuestLinesRequest; } namespace RaF @@ -1566,6 +1567,7 @@ class TC_GAME_API WorldSession void HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& packet); void HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& packet); void HandlePlayerChoiceResponse(WorldPackets::Quest::ChoiceResponse& choiceResponse); + void HandleUiMapQuestLinesRequest(WorldPackets::Quest::UiMapQuestLinesRequest& uiMapQuestLinesRequest); void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chatMessage); void HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& chatMessageWhisper); |
