QueryCache port

partial port of:
(ae9d01a324)
(dd1aa64563)
This commit is contained in:
funjoker
2019-07-27 02:52:13 +02:00
committed by Shauren
parent 4380fe2751
commit b4d30bb92c
18 changed files with 492 additions and 383 deletions

View File

@@ -419,3 +419,166 @@ bool Quest::CanIncreaseRewardedQuestCounters() const
// This affects counters and client requests for completed quests.
return (!IsDFQuest() && !IsDaily() && (!IsRepeatable() || IsWeekly() || IsMonthly() || IsSeasonal()));
}
void Quest::InitializeQueryData()
{
WorldPacket queryTemp;
for (uint8 loc = LOCALE_enUS; loc < TOTAL_LOCALES; ++loc)
{
queryTemp = BuildQueryData(static_cast<LocaleConstant>(loc));
QueryData[loc] = queryTemp;
}
}
WorldPacket Quest::BuildQueryData(LocaleConstant loc) const
{
WorldPackets::Quest::QueryQuestInfoResponse response;
response.Allow = true;
response.QuestID = GetQuestId();
response.Info.LogTitle = GetLogTitle();
response.Info.LogDescription = GetLogDescription();
response.Info.QuestDescription = GetQuestDescription();
response.Info.AreaDescription = GetAreaDescription();
response.Info.QuestCompletionLog = GetQuestCompletionLog();
response.Info.PortraitGiverText = GetPortraitGiverText();
response.Info.PortraitGiverName = GetPortraitGiverName();
response.Info.PortraitTurnInText = GetPortraitTurnInText();
response.Info.PortraitTurnInName = GetPortraitTurnInName();
if (loc != LOCALE_enUS)
{
if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(GetQuestId()))
{
ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, loc, response.Info.LogTitle);
ObjectMgr::GetLocaleString(questTemplateLocale->LogDescription, loc, response.Info.LogDescription);
ObjectMgr::GetLocaleString(questTemplateLocale->QuestDescription, loc, response.Info.QuestDescription);
ObjectMgr::GetLocaleString(questTemplateLocale->AreaDescription, loc, response.Info.AreaDescription);
ObjectMgr::GetLocaleString(questTemplateLocale->QuestCompletionLog, loc, response.Info.QuestCompletionLog);
ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverText, loc, response.Info.PortraitGiverText);
ObjectMgr::GetLocaleString(questTemplateLocale->PortraitGiverName, loc, response.Info.PortraitGiverName);
ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInText, loc, response.Info.PortraitTurnInText);
ObjectMgr::GetLocaleString(questTemplateLocale->PortraitTurnInName, loc, response.Info.PortraitTurnInName);
}
}
if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS))
AddQuestLevelToTitle(response.Info.LogTitle, GetQuestLevel());
response.Info.QuestID = GetQuestId();
response.Info.QuestType = GetQuestType();
response.Info.QuestLevel = GetQuestLevel();
response.Info.QuestScalingFactionGroup = GetQuestScalingFactionGroup();
response.Info.QuestMaxScalingLevel = GetQuestMaxScalingLevel();
response.Info.QuestPackageID = GetQuestPackageID();
response.Info.QuestMinLevel = GetMinLevel();
response.Info.QuestSortID = GetZoneOrSort();
response.Info.QuestInfoID = GetQuestInfoID();
response.Info.SuggestedGroupNum = GetSuggestedPlayers();
response.Info.RewardNextQuest = GetNextQuestInChain();
response.Info.RewardXPDifficulty = GetXPDifficulty();
response.Info.RewardXPMultiplier = GetXPMultiplier();
if (!HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
response.Info.RewardMoney = RewardMoney;
response.Info.RewardMoneyDifficulty = GetRewMoneyDifficulty();
response.Info.RewardMoneyMultiplier = GetMoneyMultiplier();
response.Info.RewardBonusMoney = GetRewMoneyMaxLevel();
for (uint8 i = 0; i < QUEST_REWARD_DISPLAY_SPELL_COUNT; ++i)
response.Info.RewardDisplaySpell[i] = RewardDisplaySpell[i];
response.Info.RewardSpell = GetRewSpell();
response.Info.RewardHonor = GetRewHonor();
response.Info.RewardKillHonor = GetRewKillHonor();
response.Info.RewardArtifactXPDifficulty = GetArtifactXPDifficulty();
response.Info.RewardArtifactXPMultiplier = GetArtifactXPMultiplier();
response.Info.RewardArtifactCategoryID = GetArtifactCategoryId();
response.Info.StartItem = GetSrcItemId();
response.Info.Flags = GetFlags();
response.Info.FlagsEx = GetFlagsEx();
response.Info.FlagsEx2 = GetFlagsEx2();
response.Info.RewardTitle = GetRewTitle();
response.Info.RewardArenaPoints = GetRewArenaPoints();
response.Info.RewardSkillLineID = GetRewardSkillId();
response.Info.RewardNumSkillUps = GetRewardSkillPoints();
response.Info.RewardFactionFlags = GetRewardReputationMask();
response.Info.PortraitGiver = GetQuestGiverPortrait();
response.Info.PortraitGiverMount = GetQuestGiverPortraitMount();
response.Info.PortraitTurnIn = GetQuestTurnInPortrait();
for (uint8 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i)
{
response.Info.ItemDrop[i] = ItemDrop[i];
response.Info.ItemDropQuantity[i] = ItemDropQuantity[i];
}
if (!HasFlag(QUEST_FLAGS_HIDDEN_REWARDS))
{
for (uint8 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
{
response.Info.RewardItems[i] = RewardItemId[i];
response.Info.RewardAmount[i] = RewardItemCount[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_REWARD_REPUTATIONS_COUNT; ++i)
{
response.Info.RewardFactionID[i] = RewardFactionId[i];
response.Info.RewardFactionValue[i] = RewardFactionValue[i];
response.Info.RewardFactionOverride[i] = RewardFactionOverride[i];
response.Info.RewardFactionCapIn[i] = RewardFactionCapIn[i];
}
response.Info.POIContinent = GetPOIContinent();
response.Info.POIx = GetPOIx();
response.Info.POIy = GetPOIy();
response.Info.POIPriority = GetPOIPriority();
response.Info.AllowableRaces = GetAllowableRaces();
response.Info.TreasurePickerID = GetTreasurePickerId();
response.Info.Expansion = GetExpansion();
for (QuestObjective const& questObjective : GetObjectives())
{
response.Info.Objectives.push_back(questObjective);
if (loc != LOCALE_enUS)
{
if (QuestObjectivesLocale const* questObjectivesLocale = sObjectMgr->GetQuestObjectivesLocale(questObjective.ID))
ObjectMgr::GetLocaleString(questObjectivesLocale->Description, loc, response.Info.Objectives.back().Description);
}
}
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
{
response.Info.RewardCurrencyID[i] = RewardCurrencyId[i];
response.Info.RewardCurrencyQty[i] = RewardCurrencyCount[i];
}
response.Info.AcceptedSoundKitID = GetSoundAccept();
response.Info.CompleteSoundKitID = GetSoundTurnIn();
response.Info.AreaGroupID = GetAreaGroupID();
response.Info.TimeAllowed = GetLimitTime();
return *response.Write();
}
void Quest::AddQuestLevelToTitle(std::string& title, int32 level)
{
// Adds the quest level to the front of the quest title
// example: [13] Westfall Stew
std::stringstream questTitlePretty;
questTitlePretty << "[" << level << "] " << title;
title = questTitlePretty.str();
}