From efa76de54011d40d69412d2af23cb071ed352688 Mon Sep 17 00:00:00 2001 From: Meji Date: Fri, 30 Aug 2024 18:11:07 +0200 Subject: Core/PacketIO: Implemented UIMap questlines (#30030) --- src/server/game/Server/Packets/QuestPackets.cpp | 20 ++++++++++++++++++++ src/server/game/Server/Packets/QuestPackets.h | 22 ++++++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 4 ++-- src/server/game/Server/WorldSession.h | 2 ++ 4 files changed, 46 insertions(+), 2 deletions(-) (limited to 'src/server/game/Server') 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 QuestLineXQuestIDs; + std::vector 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); -- cgit v1.2.3