diff options
author | Meji <alvaro.megias@outlook.com> | 2024-09-14 13:14:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-14 13:14:05 +0200 |
commit | 19a0e885a63a7d07a6edd6c1b14ba91f87141ffd (patch) | |
tree | 8f00bdb8382900d20a84f8cb3ab2a7b6fef7cfea | |
parent | b3a502ddb9f08a1cc3ef082263567898c7b0a3eb (diff) |
Core/PacketIO: Fix SMSG_UI_MAP_QUEST_LINES_RESPONSE struct (TWW) (#30219)
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QuestPackets.h | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index b6636b1e246..cca62c6ac08 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -844,10 +844,21 @@ void WorldSession::HandleUiMapQuestLinesRequest(WorldPackets::Quest::UiMapQuestL if (!questLineQuests) continue; + bool isQuestLineCompleted = true; for (QuestLineXQuestEntry const* questLineQuest : *questLineQuests) + { if (Quest const* quest = sObjectMgr->GetQuestTemplate(questLineQuest->QuestID)) + { if (_player->CanTakeQuest(quest, false)) response.QuestLineXQuestIDs.push_back(questLineQuest->ID); + + if (isQuestLineCompleted && !_player->GetQuestRewardStatus(questLineQuest->QuestID)) + isQuestLineCompleted = false; + } + } + + if (!isQuestLineCompleted) + response.QuestLineIDs.push_back(questLineId); } } diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 0aeee26a837..768947dc23b 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -865,6 +865,7 @@ WorldPacket const* UiMapQuestLinesResponse::Write() _worldPacket << int32(UiMapID); _worldPacket << uint32(QuestLineXQuestIDs.size()); _worldPacket << uint32(QuestIDs.size()); + _worldPacket << uint32(QuestLineIDs.size()); for (uint32 const& questLineQuestID : QuestLineXQuestIDs) _worldPacket << uint32(questLineQuestID); @@ -872,6 +873,9 @@ WorldPacket const* UiMapQuestLinesResponse::Write() for (uint32 const& questID : QuestIDs) _worldPacket << uint32(questID); + for (uint32 const& questLineID : QuestLineIDs) + _worldPacket << uint32(questLineID); + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 5f0e339aa7c..133afeff714 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -800,6 +800,7 @@ namespace WorldPackets int32 UiMapID = 0; std::vector<uint32> QuestLineXQuestIDs; std::vector<uint32> QuestIDs; + std::vector<uint32> QuestLineIDs; }; class UiMapQuestLinesRequest final : public ClientPacket |