diff options
Diffstat (limited to 'src/server/game/Handlers/QuestHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 35 |
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()); +} |