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 Quest::InitializeQueryData() { queryData.Initialize(SMSG_QUEST_QUERY_RESPONSE, 1); queryData << uint32(GetQuestId()); // quest id queryData << uint32(GetQuestMethod()); // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details) queryData << uint32(GetQuestLevel()); // may be -1, static data, in other cases must be used dynamic level: Player::GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client) queryData << uint32(GetMinLevel()); // min level queryData << uint32(GetZoneOrSort()); // zone or sort to display in quest log queryData << uint32(GetType()); // quest type queryData << uint32(GetSuggestedPlayers()); // suggested players count queryData << uint32(GetRepObjectiveFaction()); // shown in quest log as part of quest objective queryData << uint32(GetRepObjectiveValue()); // shown in quest log as part of quest objective queryData << uint32(GetRepObjectiveFaction2()); // shown in quest log as part of quest objective OPPOSITE faction queryData << uint32(GetRepObjectiveValue2()); // shown in quest log as part of quest objective OPPOSITE faction queryData << uint32(GetNextQuestInChain()); // client will request this quest from NPC, if not 0 queryData << uint32(GetXPId()); // used for calculating rewarded experience if (HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) queryData << uint32(0); // Hide money rewarded else queryData << uint32(GetRewOrReqMoney()); // reward money (below max lvl) queryData << uint32(GetRewMoneyMaxLevel()); // used in XP calculation at client queryData << uint32(GetRewSpell()); // reward spell, this spell will display (icon) (casted if RewSpellCast == 0) queryData << int32(GetRewSpellCast()); // casted spell // rewarded honor points queryData << uint32(GetRewHonorAddition()); queryData << float(GetRewHonorMultiplier()); queryData << uint32(GetSrcItemId()); // source item id queryData << uint32(GetFlags() & 0xFFFF); // quest flags queryData << uint32(GetCharTitleId()); // CharTitleId, new 2.4.0, player gets this title (id from CharTitles) queryData << uint32(GetPlayersSlain()); // players slain queryData << uint32(GetBonusTalents()); // bonus talents queryData << uint32(GetRewArenaPoints()); // bonus arena points queryData << uint32(0); // review rep show mask if (HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) queryData << uint32(0) << uint32(0); for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) queryData << uint32(0) << uint32(0); } else { for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) { queryData << uint32(RewardItemId[i]); queryData << uint32(RewardItemIdCount[i]); } for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { queryData << uint32(RewardChoiceItemId[i]); queryData << uint32(RewardChoiceItemCount[i]); } } for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // reward factions ids queryData << uint32(RewardFactionId[i]); for (uint32 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // columnid+1 QuestFactionReward.dbc? queryData << int32(RewardFactionValueId[i]); for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0) queryData << int32(RewardFactionValueIdOverride[i]); queryData << GetPointMapId(); queryData << GetPointX(); queryData << GetPointY(); queryData << GetPointOpt(); queryData << GetTitle(); queryData << GetObjectives(); queryData << GetDetails(); queryData << GetEndText(); queryData << GetCompletedText(); // display in quest objectives window once all objectives are completed for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) { if (RequiredNpcOrGo[i] < 0) queryData << uint32((RequiredNpcOrGo[i] * (-1)) | 0x80000000); // client expects gameobject template id in form (id|0x80000000) else queryData << uint32(RequiredNpcOrGo[i]); queryData << uint32(RequiredNpcOrGoCount[i]); queryData << uint32(RequiredSourceItemId[i]); queryData << uint32(0); // req source count? } for (uint32 i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) { queryData << uint32(RequiredItemId[i]); queryData << uint32(RequiredItemCount[i]); } for (uint32 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) queryData << ObjectiveText[i]; }