Core/Quests: Implement quest_request_items_locale

Closes #19331
This commit is contained in:
AlcDenat
2017-03-21 17:45:07 +01:00
committed by Shauren
parent 76dd3ae368
commit 024ae15681
7 changed files with 62 additions and 10 deletions

View File

@@ -0,0 +1,8 @@
DROP TABLE IF EXISTS `quest_request_items_locale`;
CREATE TABLE `quest_request_items_locale` (
`ID` int(10) unsigned NOT NULL DEFAULT '0',
`locale` varchar(4) NOT NULL,
`CompletionText` text,
`VerifiedBuild` smallint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`locale`)
);

View File

@@ -613,7 +613,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const
void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUID, bool enableNext) const
{
std::string questTitle = quest->GetLogTitle();
std::string rewardText = quest->GetOfferRewardText();
std::string rewardText = quest->GetOfferRewardText();
std::string portraitGiverText = quest->GetPortraitGiverText();
std::string portraitGiverName = quest->GetPortraitGiverName();
std::string portraitTurnInText = quest->GetPortraitTurnInText();
@@ -678,16 +678,16 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
// items. Otherwise, we'll skip straight to the OfferReward
std::string questTitle = quest->GetLogTitle();
std::string requestItemsText = quest->GetRequestItemsText();
std::string completionText = quest->GetRequestItemsText();
LocaleConstant locale = _session->GetSessionDbLocaleIndex();
if (locale >= LOCALE_enUS)
{
if (QuestTemplateLocale const* questTemplateLocale = sObjectMgr->GetQuestLocale(quest->GetQuestId()))
{
ObjectMgr::GetLocaleString(questTemplateLocale->LogTitle, locale, questTitle);
ObjectMgr::GetLocaleString(questTemplateLocale->RequestItemsText, locale, requestItemsText);
}
if (QuestRequestItemsLocale const* questRequestItemsLocale = sObjectMgr->GetQuestRequestItemsLocale(quest->GetQuestId()))
ObjectMgr::GetLocaleString(questRequestItemsLocale->CompletionText, locale, completionText);
}
if (!quest->HasSpecialFlag(QUEST_SPECIAL_FLAGS_DELIVER) && canComplete)
@@ -730,10 +730,10 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
switch (obj.Type)
{
case QUEST_OBJECTIVE_ITEM:
packet.Collect.push_back(WorldPackets::Quest::QuestObjectiveCollect(obj.ObjectID, obj.Amount, obj.Flags));
packet.Collect.emplace_back(obj.ObjectID, obj.Amount, obj.Flags);
break;
case QUEST_OBJECTIVE_CURRENCY:
packet.Currency.push_back(WorldPackets::Quest::QuestCurrency(obj.ObjectID, obj.Amount));
packet.Currency.emplace_back(obj.ObjectID, obj.Amount);
break;
case QUEST_OBJECTIVE_MONEY:
packet.MoneyToGet += obj.Amount;
@@ -745,7 +745,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
packet.AutoLaunched = closeOnCancel;
packet.QuestTitle = questTitle;
packet.CompletionText = requestItemsText;
packet.CompletionText = completionText;
_session->SendPacket(packet.Write());
TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPC=%s, questid=%u", npcGUID.ToString().c_str(), quest->GetQuestId());

View File

@@ -4826,6 +4826,36 @@ void ObjectMgr::LoadQuestOfferRewardLocale()
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " Quest Offer Reward locale strings in %u ms", _questOfferRewardLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadQuestRequestItemsLocale()
{
uint32 oldMSTime = getMSTime();
_questRequestItemsLocaleStore.clear(); // need for reload case
// 0 1 2
QueryResult result = WorldDatabase.Query("SELECT Id, locale, CompletionText FROM quest_request_items_locale");
if (!result)
return;
do
{
Field* fields = result->Fetch();
uint32 id = fields[0].GetUInt32();
std::string localeName = fields[1].GetString();
std::string completionText = fields[2].GetString();
QuestRequestItemsLocale& data = _questRequestItemsLocaleStore[id];
LocaleConstant locale = GetLocaleByName(localeName);
if (locale == LOCALE_enUS)
continue;
AddLocaleString(completionText, locale, data.CompletionText);
} while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " Quest Request Items locale strings in %u ms", _questRequestItemsLocaleStore.size(), GetMSTimeDiffToNow(oldMSTime));
}
void ObjectMgr::LoadScripts(ScriptsType type)
{
uint32 oldMSTime = getMSTime();

View File

@@ -442,6 +442,7 @@ typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer;
typedef std::unordered_map<uint32, QuestTemplateLocale> QuestTemplateLocaleContainer;
typedef std::unordered_map<uint32, QuestObjectivesLocale> QuestObjectivesLocaleContainer;
typedef std::unordered_map<uint32, QuestOfferRewardLocale> QuestOfferRewardLocaleContainer;
typedef std::unordered_map<uint32, QuestRequestItemsLocale> QuestRequestItemsLocaleContainer;
typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer;
typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer;
typedef std::unordered_map<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer;
@@ -1023,6 +1024,7 @@ class TC_GAME_API ObjectMgr
void LoadQuestTemplateLocale();
void LoadQuestObjectivesLocale();
void LoadQuestOfferRewardLocale();
void LoadQuestRequestItemsLocale();
void LoadPageTextLocales();
void LoadGossipMenuItemsLocales();
void LoadPointOfInterestLocales();
@@ -1199,6 +1201,12 @@ class TC_GAME_API ObjectMgr
if (itr == _questOfferRewardLocaleStore.end()) return nullptr;
return &itr->second;
}
QuestRequestItemsLocale const* GetQuestRequestItemsLocale(uint32 entry) const
{
auto itr = _questRequestItemsLocaleStore.find(entry);
if (itr == _questRequestItemsLocaleStore.end()) return nullptr;
return &itr->second;
}
QuestObjectivesLocale const* GetQuestObjectivesLocale(uint32 entry) const
{
QuestObjectivesLocaleContainer::const_iterator itr = _questObjectivesLocaleStore.find(entry);
@@ -1554,6 +1562,7 @@ class TC_GAME_API ObjectMgr
QuestTemplateLocaleContainer _questTemplateLocaleStore;
QuestObjectivesLocaleContainer _questObjectivesLocaleStore;
QuestOfferRewardLocaleContainer _questOfferRewardLocaleStore;
QuestRequestItemsLocaleContainer _questRequestItemsLocaleStore;
PageTextLocaleContainer _pageTextLocaleStore;
GossipMenuItemsLocaleContainer _gossipMenuItemsLocaleStore;
PointOfInterestLocaleContainer _pointOfInterestLocaleStore;

View File

@@ -253,9 +253,11 @@ struct QuestTemplateLocale
StringVector PortraitTurnInText;
StringVector PortraitTurnInName;
StringVector QuestCompletionLog;
};
/// @todo: implemente this in new tables
StringVector RequestItemsText;
struct QuestRequestItemsLocale
{
StringVector CompletionText;
};
struct QuestObjectivesLocale

View File

@@ -1607,6 +1607,7 @@ void World::SetInitialWorldSettings()
sObjectMgr->LoadGameObjectLocales();
sObjectMgr->LoadQuestTemplateLocale();
sObjectMgr->LoadQuestOfferRewardLocale();
sObjectMgr->LoadQuestRequestItemsLocale();
sObjectMgr->LoadQuestObjectivesLocale();
sObjectMgr->LoadPageTextLocales();
sObjectMgr->LoadGossipMenuItemsLocales();

View File

@@ -1060,9 +1060,11 @@ public:
sObjectMgr->LoadQuestTemplateLocale();
sObjectMgr->LoadQuestObjectivesLocale();
sObjectMgr->LoadQuestOfferRewardLocale();
sObjectMgr->LoadQuestRequestItemsLocale();
handler->SendGlobalGMSysMessage("DB table `quest_template_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `quest_objectives_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `quest_offer_reward_locale` reloaded.");
handler->SendGlobalGMSysMessage("DB table `quest_request_items_locale` reloaded.");
return true;
}