aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/QuestHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/QuestHandler.cpp')
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 9a95bd79374..b6636b1e246 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -826,3 +826,38 @@ void WorldSession::HandlePlayerChoiceResponse(WorldPackets::Quest::ChoiceRespons
_player->GetReputationMgr().ModifyReputation(sFactionStore.AssertEntry(faction.Id), faction.Quantity);
}
}
+
+void WorldSession::HandleUiMapQuestLinesRequest(WorldPackets::Quest::UiMapQuestLinesRequest& uiMapQuestLinesRequest)
+{
+ UiMapEntry const* uiMap = sUiMapStore.LookupEntry(uiMapQuestLinesRequest.UiMapID);
+ if (!uiMap)
+ return;
+
+ WorldPackets::Quest::UiMapQuestLinesResponse response;
+ response.UiMapID = uiMap->ID;
+
+ if (std::vector<uint32> const* questLines = sObjectMgr->GetUiMapQuestLinesList(uiMap->ID))
+ {
+ for (uint32 questLineId : *questLines)
+ {
+ std::vector<QuestLineXQuestEntry const*> const* questLineQuests = sDB2Manager.GetQuestsForQuestLine(questLineId);
+ if (!questLineQuests)
+ continue;
+
+ 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 (std::vector<uint32> const* quests = sObjectMgr->GetUiMapQuestsList(uiMap->ID))
+ {
+ for (uint32 questId : *quests)
+ if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId))
+ if (_player->CanTakeQuest(quest, false))
+ response.QuestIDs.push_back(questId);
+ }
+
+ SendPacket(response.Write());
+}