void WorldSession::HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& packet) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUEST_QUERY quest = %u", packet.QuestID); if (Quest const* quest = sObjectMgr->GetQuestTemplate(packet.QuestID)) _player->PlayerTalkClass->SendQuestQueryResponse(quest); else { WorldPackets::Quest::QueryQuestInfoResponse response; response.QuestID = packet.QuestID; SendPacket(response.Write()); } }
WorldPacket Quest::BuildQueryData(LocaleConstant loc) const { WorldPackets::Quest::QueryQuestInfoResponse response; std::string locQuestTitle = GetTitle(); std::string locQuestDetails = GetDetails(); std::string locQuestObjectives = GetObjectives(); std::string locQuestAreaDescription = GetAreaDescription(); std::string locQuestCompletedText = GetCompletedText(); std::string locQuestObjectiveText[QUEST_OBJECTIVES_COUNT]; for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) locQuestObjectiveText[i] = ObjectiveText[i]; if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(GetQuestId())) { ObjectMgr::GetLocaleString(localeData->Title, loc, locQuestTitle); ObjectMgr::GetLocaleString(localeData->Details, loc, locQuestDetails); ObjectMgr::GetLocaleString(localeData->Objectives, loc, locQuestObjectives); ObjectMgr::GetLocaleString(localeData->AreaDescription, loc, locQuestAreaDescription); ObjectMgr::GetLocaleString(localeData->CompletedText, loc, locQuestCompletedText); for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) ObjectMgr::GetLocaleString(localeData->ObjectiveText[i], loc, locQuestObjectiveText[i]); } response.Info.QuestID = GetQuestId(); response.Info.QuestMethod = GetQuestMethod(); response.Info.QuestLevel = GetQuestLevel(); response.Info.QuestMinLevel = GetMinLevel(); response.Info.QuestSortID = GetZoneOrSort(); response.Info.QuestType = GetType(); response.Info.SuggestedGroupNum = GetSuggestedPlayers(); response.Info.RequiredFactionId[0] = GetRepObjectiveFaction(); response.Info.RequiredFactionValue[0] = GetRepObjectiveValue(); response.Info.RequiredFactionId[1] = GetRepObjectiveFaction2(); response.Info.RequiredFactionValue[1] = GetRepObjectiveValue2(); response.Info.RewardNextQuest = GetNextQuestInChain(); response.Info.RewardXPDifficulty = GetXPId(); response.Info.RewardMoney = GetRewOrReqMoney(); response.Info.RewardBonusMoney = GetRewMoneyMaxLevel(); response.Info.RewardDisplaySpell = GetRewSpell(); response.Info.RewardSpell = GetRewSpellCast(); response.Info.RewardHonor = GetRewHonorAddition(); response.Info.RewardKillHonor = GetRewHonorMultiplier(); response.Info.StartItem = GetSrcItemId(); response.Info.Flags = GetFlags(); response.Info.RewardTitleId = GetCharTitleId(); response.Info.RequiredPlayerKills = GetPlayersSlain(); response.Info.RewardTalents = GetBonusTalents(); response.Info.RewardArenaPoints = GetRewArenaPoints(); for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i) { response.Info.RewardItems[i] = RewardItemId[i]; response.Info.RewardAmount[i] = RewardItemIdCount[i]; } for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { response.Info.UnfilteredChoiceItems[i].ItemID = RewardChoiceItemId[i]; response.Info.UnfilteredChoiceItems[i].Quantity = RewardChoiceItemCount[i]; } for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids response.Info.RewardFactionID[i] = RewardFactionId[i]; for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc? response.Info.RewardFactionValue[i] = RewardFactionValueId[i]; for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0) response.Info.RewardFactionValueOverride[i] = RewardFactionValueIdOverride[i]; response.Info.POIContinent = GetPOIContinent(); response.Info.POIx = GetPOIx(); response.Info.POIy = GetPOIy(); response.Info.POIPriority = GetPointOpt(); if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) Quest::AddQuestLevelToTitle(locQuestTitle, GetQuestLevel()); response.Info.Title = locQuestTitle; response.Info.Objectives = locQuestObjectives; response.Info.Details = locQuestDetails; response.Info.AreaDescription = locQuestAreaDescription; response.Info.CompletedText = locQuestCompletedText; for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) { response.Info.RequiredNpcOrGo[i] = RequiredNpcOrGo[i]; response.Info.RequiredNpcOrGoCount[i] = RequiredNpcOrGoCount[i]; response.Info.ItemDrop[i] = ItemDrop[i]; } for (uint8 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) { response.Info.RequiredItemId[i] = RequiredItemId[i]; response.Info.RequiredItemCount[i] = RequiredItemCount[i]; } for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) response.Info.ObjectiveText[i] = locQuestObjectiveText[i]; return *response.Write(); }
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const { LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex(); std::string questLogTitle = quest->GetLogTitle(); std::string questLogDescription = quest->GetLogDescription(); std::string questDescription = quest->GetQuestDescription(); std::string areaDescription = quest->GetAreaDescription(); std::string questCompletionLog = quest->GetQuestCompletionLog(); std::string portraitGiverText = quest->GetPortraitGiverText(); std::string portraitGiverName = quest->GetPortraitGiverName(); std::string portraitTurnInText = quest->GetPortraitTurnInText(); std::string portraitTurnInName = quest->GetPortraitTurnInName(); if (localeConstant >= LOCALE_enUS) { if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId())) { ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, localeConstant, questLogTitle); ObjectMgr::GetLocaleString(questTemplateLocale->LogDescription, localeConstant, questLogDescription); ObjectMgr::GetLocaleString(questTemplateLocale->QuestDescription, localeConstant, questDescription); ObjectMgr::GetLocaleString(questTemplateLocale->AreaDescription, localeConstant, areaDescription); ObjectMgr::GetLocaleString(questTemplateLocale->QuestCompletionLog, localeConstant, questCompletionLog); ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverText, localeConstant, portraitGiverText); ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverName, localeConstant, portraitGiverName); ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInText, localeConstant, portraitTurnInText); ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInName, localeConstant, portraitTurnInName); } } WorldPackets::Quest::QueryQuestInfoResponse packet; packet.Allow = true; packet.QuestID = quest->GetQuestId(); packet.Info.QuestID = quest->GetQuestId(); packet.Info.QuestType = quest->GetQuestType(); packet.Info.QuestLevel = quest->GetQuestLevel(); packet.Info.QuestPackageID = quest->GetQuestPackageID(); packet.Info.QuestMinLevel = quest->GetMinLevel(); packet.Info.QuestSortID = quest->GetZoneOrSort(); packet.Info.QuestInfoID = quest->GetQuestInfoID(); packet.Info.SuggestedGroupNum = quest->GetSuggestedPlayers(); packet.Info.RewardNextQuest = quest->GetNextQuestInChain(); packet.Info.RewardXPDifficulty = quest->GetXPDifficulty(); packet.Info.RewardXPMultiplier = quest->GetXPMultiplier(); if (!quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) packet.Info.RewardMoney = quest->RewardMoney < 0 ? quest->RewardMoney : _session->GetPlayer()->GetQuestMoneyReward(quest); packet.Info.RewardMoneyDifficulty = quest->GetRewMoneyDifficulty(); packet.Info.RewardMoneyMultiplier = quest->GetMoneyMultiplier(); packet.Info.RewardBonusMoney = quest->GetRewMoneyMaxLevel(); for (uint8 i = 0; i < QUEST_REWARD_DISPLAY_SPELL_COUNT; ++i) packet.Info.RewardDisplaySpell[i] = quest->RewardDisplaySpell[i]; packet.Info.RewardSpell = quest->GetRewSpell(); packet.Info.RewardHonor = quest->GetRewHonor(); packet.Info.RewardKillHonor = quest->GetRewKillHonor(); packet.Info.RewardArtifactXPDifficulty = quest->GetArtifactXPDifficulty(); packet.Info.RewardArtifactXPMultiplier = quest->GetArtifactXPMultiplier(); packet.Info.RewardArtifactCategoryID = quest->GetArtifactCategoryId(); packet.Info.StartItem = quest->GetSrcItemId(); packet.Info.Flags = quest->GetFlags(); packet.Info.FlagsEx = quest->GetFlagsEx(); packet.Info.RewardTitle = quest->GetRewTitle(); packet.Info.RewardArenaPoints = quest->GetRewArenaPoints(); packet.Info.RewardSkillLineID = quest->GetRewardSkillId(); packet.Info.RewardNumSkillUps = quest->GetRewardSkillPoints(); packet.Info.RewardFactionFlags = quest->GetRewardReputationMask(); packet.Info.PortraitGiver = quest->GetQuestGiverPortrait(); packet.Info.PortraitTurnIn = quest->GetQuestTurnInPortrait(); for (uint8 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i) { packet.Info.ItemDrop[i] = quest->ItemDrop[i]; packet.Info.ItemDropQuantity[i] = quest->ItemDropQuantity[i]; } if (!quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { for (uint8 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) { packet.Info.RewardItems[i] = quest->RewardItemId[i]; packet.Info.RewardAmount[i] = quest->RewardItemCount[i]; } for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { packet.Info.UnfilteredChoiceItems[i].ItemID = quest->RewardChoiceItemId[i]; packet.Info.UnfilteredChoiceItems[i].Quantity = quest->RewardChoiceItemCount[i]; } } for (uint8 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) { packet.Info.RewardFactionID[i] = quest->RewardFactionId[i]; packet.Info.RewardFactionValue[i] = quest->RewardFactionValue[i]; packet.Info.RewardFactionOverride[i] = quest->RewardFactionOverride[i]; packet.Info.RewardFactionCapIn[i] = quest->RewardFactionCapIn[i]; } packet.Info.POIContinent = quest->GetPOIContinent(); packet.Info.POIx = quest->GetPOIx(); packet.Info.POIy = quest->GetPOIy(); packet.Info.POIPriority = quest->GetPOIPriority(); if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) AddQuestLevelToTitle(questLogTitle, quest->GetQuestLevel()); packet.Info.LogTitle = questLogTitle; packet.Info.LogDescription = questLogDescription; packet.Info.QuestDescription = questDescription; packet.Info.AreaDescription = areaDescription; packet.Info.QuestCompletionLog = questCompletionLog; packet.Info.AllowableRaces = quest->GetAllowableRaces(); packet.Info.QuestRewardID = quest->GetRewardId(); for (QuestObjective const& questObjective : quest->GetObjectives()) { packet.Info.Objectives.push_back(questObjective); if (localeConstant >= LOCALE_enUS) { if (QuestObjectivesLocale const* questObjectivesLocale = sObjectMgr->GetQuestObjectivesLocale(questObjective.ID)) ObjectMgr::GetLocaleString(questObjectivesLocale->Description, localeConstant, packet.Info.Objectives.back().Description); } } for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) { packet.Info.RewardCurrencyID[i] = quest->RewardCurrencyId[i]; packet.Info.RewardCurrencyQty[i] = quest->RewardCurrencyCount[i]; } packet.Info.PortraitGiverText = portraitGiverText; packet.Info.PortraitGiverName = portraitGiverName; packet.Info.PortraitTurnInText = portraitTurnInText; packet.Info.PortraitTurnInName = portraitTurnInName; packet.Info.AcceptedSoundKitID = quest->GetSoundAccept(); packet.Info.CompleteSoundKitID = quest->GetSoundTurnIn(); packet.Info.AreaGroupID = quest->GetAreaGroupID(); packet.Info.TimeAllowed = quest->GetLimitTime(); _session->SendPacket(packet.Write()); TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid=%u", quest->GetQuestId()); }
void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const { std::string questLogTitle = quest->GetLogTitle(); std::string questLogDescription = quest->GetLogDescription(); std::string questDescription = quest->GetQuestDescription(); std::string areaDescription = quest->GetAreaDescription(); std::string questCompletionLog = quest->GetQuestCompletionLog(); std::string portraitGiverText = quest->GetPortraitGiverText(); std::string portraitGiverName = quest->GetPortraitGiverName(); std::string portraitTurnInText = quest->GetPortraitTurnInText(); std::string portraitTurnInName = quest->GetPortraitTurnInName(); QuestObjectives const& objectives = quest->GetObjectives(); std::vector<std::string> questObjectiveDescription(objectives.size()); for (uint8 i = 0; i < objectives.size(); ++i) questObjectiveDescription[i] = objectives[i].Description; int32 locale = _session->GetSessionDbLocaleIndex(); if (locale >= 0) { if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(quest->GetQuestId())) { ObjectMgr::GetLocaleString(localeData->LogTitle, locale, questLogTitle); ObjectMgr::GetLocaleString(localeData->LogDescription, locale, questLogDescription); ObjectMgr::GetLocaleString(localeData->QuestDescription, locale, questDescription); ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, areaDescription); ObjectMgr::GetLocaleString(localeData->QuestCompletionLog, locale, questCompletionLog); ObjectMgr::GetLocaleString(localeData->PortraitGiverText, locale, portraitGiverText); ObjectMgr::GetLocaleString(localeData->PortraitGiverName, locale, portraitGiverName); ObjectMgr::GetLocaleString(localeData->PortraitTurnInText, locale, portraitTurnInText); ObjectMgr::GetLocaleString(localeData->PortraitTurnInName, locale, portraitTurnInName); for (uint8 i = 0; i < objectives.size(); ++i) ObjectMgr::GetLocaleString(localeData->ObjectiveDescription[i], locale, questObjectiveDescription[i]); } } WorldPackets::Quest::QueryQuestInfoResponse packet; packet.Allow = true; packet.QuestID = quest->GetQuestId(); packet.Info.QuestID = quest->GetQuestId(); packet.Info.QuestType = quest->GetQuestType(); packet.Info.QuestLevel = quest->GetQuestLevel(); packet.Info.QuestPackageID = quest->GetQuestPackageID(); packet.Info.QuestMinLevel = quest->GetMinLevel(); packet.Info.QuestSortID = quest->GetZoneOrSort(); packet.Info.QuestInfoID = quest->GetQuestInfoID(); packet.Info.SuggestedGroupNum = quest->GetSuggestedPlayers(); packet.Info.RewardNextQuest = quest->GetNextQuestInChain(); packet.Info.RewardXPDifficulty = quest->GetXPDifficulty(); packet.Info.Float10 = quest->Float10; // Unk packet.Info.Float13 = quest->Float13; // Unk if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) packet.Info.RewardMoney = quest->RewardMoney; packet.Info.RewardMoneyDifficulty = quest->GetRewMoneyDifficulty(); packet.Info.RewardBonusMoney = quest->GetRewMoneyMaxLevel(); packet.Info.RewardDisplaySpell = quest->GetRewDisplaySpell(); packet.Info.RewardSpell = quest->GetRewSpell(); packet.Info.RewardHonor = quest->GetRewHonor(); packet.Info.RewardKillHonor = quest->GetRewKillHonor(); packet.Info.StartItem = quest->GetSrcItemId(); packet.Info.Flags = quest->GetFlags(); packet.Info.FlagsEx = quest->GetFlagsEx(); packet.Info.RewardTitle = quest->GetRewTitle(); packet.Info.RewardTalents = quest->GetBonusTalents(); packet.Info.RewardArenaPoints = quest->GetRewArenaPoints(); packet.Info.RewardSkillLineID = quest->GetRewardSkillId(); packet.Info.RewardNumSkillUps = quest->GetRewardSkillPoints(); packet.Info.RewardFactionFlags = quest->GetRewardReputationMask(); packet.Info.PortraitGiver = quest->GetQuestGiverPortrait(); packet.Info.PortraitTurnIn = quest->GetQuestTurnInPortrait(); if (!quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { for (uint8 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) { packet.Info.RewardItems[i] = quest->RewardItemId[i]; packet.Info.RewardAmount[i] = quest->RewardItemCount[i]; } for (uint8 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { packet.Info.UnfilteredChoiceItems[i].ItemID = quest->RewardChoiceItemId[i]; packet.Info.UnfilteredChoiceItems[i].Quantity = quest->RewardChoiceItemCount[i]; } } for (uint8 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) { packet.Info.RewardFactionID[i] = quest->RewardFactionId[i]; packet.Info.RewardFactionValue[i] = quest->RewardFactionValue[i]; packet.Info.RewardFactionOverride[i] = quest->RewardFactionOverride[i]; } packet.Info.POIContinent = quest->GetPOIContinent(); packet.Info.POIx = quest->GetPOIx(); packet.Info.POIy = quest->GetPOIy(); packet.Info.POIPriority = quest->GetPOIPriority(); if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) AddQuestLevelToTitle(questLogTitle, quest->GetQuestLevel()); packet.Info.LogTitle = questLogTitle; packet.Info.LogDescription = questLogDescription; packet.Info.QuestDescription = questDescription; packet.Info.AreaDescription = areaDescription; packet.Info.QuestCompletionLog = questCompletionLog; packet.Info.AllowableRaces = quest->GetAllowableRaces(); for (QuestObjective const& obj : quest->Objectives) { packet.Info.Objectives.push_back(obj); // @todo update quets objective locales //packet.Info.Objectives.back().Description = questObjectiveDescription[i]; } for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) { packet.Info.RewardCurrencyID[i] = quest->RewardCurrencyId[i]; packet.Info.RewardCurrencyQty[i] = quest->RewardCurrencyCount[i]; } packet.Info.PortraitGiverText = portraitGiverText; packet.Info.PortraitGiverName = portraitGiverName; packet.Info.PortraitTurnInText = portraitTurnInText; packet.Info.PortraitTurnInName = portraitTurnInName; packet.Info.AcceptedSoundKitID = quest->GetSoundAccept(); packet.Info.CompleteSoundKitID = quest->GetSoundTurnIn(); packet.Info.AreaGroupID = quest->GetAreaGroupID(); packet.Info.TimeAllowed = quest->GetLimitTime(); _session->SendPacket(packet.Write()); TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUEST_QUERY_RESPONSE questid=%u", quest->GetQuestId()); }