aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2024-09-14 13:14:05 +0200
committerGitHub <noreply@github.com>2024-09-14 13:14:05 +0200
commit19a0e885a63a7d07a6edd6c1b14ba91f87141ffd (patch)
tree8f00bdb8382900d20a84f8cb3ab2a7b6fef7cfea
parentb3a502ddb9f08a1cc3ef082263567898c7b0a3eb (diff)
Core/PacketIO: Fix SMSG_UI_MAP_QUEST_LINES_RESPONSE struct (TWW) (#30219)
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp11
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h1
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